parent
3a4c6d43e4
commit
cfc67a8246
@ -0,0 +1,8 @@
|
||||
##
|
||||
## These are comments
|
||||
##
|
||||
|
||||
host=localhost
|
||||
port=8080
|
||||
paste_dir=./pastes
|
||||
templ_dir=./html
|
@ -0,0 +1,83 @@
|
||||
package main
|
||||
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"bufio"
|
||||
"regexp"
|
||||
"strings"
|
||||
"log"
|
||||
)
|
||||
|
||||
|
||||
type Config struct {
|
||||
host string
|
||||
port string
|
||||
paste_dir string
|
||||
templ_dir string
|
||||
log_fname string
|
||||
logger *log.Logger
|
||||
}
|
||||
|
||||
|
||||
func (c Config) String() string {
|
||||
|
||||
var s string
|
||||
|
||||
s+= "Host: " + c.host + "\n"
|
||||
s+= "Port: " + c.port + "\n"
|
||||
s+= "paste_dir: " + c.paste_dir + "\n"
|
||||
s+= "templ_dir: " + c.templ_dir + "\n"
|
||||
|
||||
return s
|
||||
|
||||
}
|
||||
|
||||
func parse_config (fname string, c *Config) error {
|
||||
|
||||
|
||||
f, err := os.Open(fname);
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
r := bufio.NewScanner(f)
|
||||
|
||||
line := 0
|
||||
for r.Scan (){
|
||||
s := r.Text()
|
||||
line += 1
|
||||
if matched, _ := regexp.MatchString("^([ \t]*)$", s); matched != true {
|
||||
// it's not a blank line
|
||||
if matched, _ := regexp.MatchString("^#", s); matched != true {
|
||||
// This is not a comment...
|
||||
if matched, _ := regexp.MatchString("^([a-z_]+)=.*", s); matched == true {
|
||||
// and contains an assignment
|
||||
fields := strings.Split(s, "=")
|
||||
switch fields[0]{
|
||||
case "host":
|
||||
c.host = fields[1]
|
||||
case "port":
|
||||
c.port = fields[1]
|
||||
case "paste_dir":
|
||||
c.paste_dir = fields[1]
|
||||
case "templ_dir":
|
||||
c.templ_dir = fields[1]
|
||||
case "log_fname":
|
||||
c.log_fname = fields[1]
|
||||
default:
|
||||
fmt.Fprintf(os.Stderr, "Error reading config file %s at line %d: unknown variable '%s'\n",
|
||||
fname, line, fields[0])
|
||||
}
|
||||
} else {
|
||||
fmt.Fprintf(os.Stderr, "Error reading config file %s at line %d: unknown statement '%s'\n",
|
||||
fname, line, s)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Loading…
Reference in new issue