godotenv/godotenv.go

70 lines
1.3 KiB
Go

package godotenv
import (
"bufio"
"errors"
"os"
"strings"
)
func Load(filenames ...string) (err error) {
for _, filename := range filenames {
err = loadFile(filename)
if err != nil {
return // return early on a spazout
}
}
return
}
func loadFile(filename string) (err error) {
file, err := os.Open(filename)
if err != nil {
return
}
bufferSize := 20
lines := make([]string, bufferSize)
lineReader := bufio.NewReaderSize(file, bufferSize)
for line, isPrefix, e := lineReader.ReadLine(); e == nil; line, isPrefix, e = lineReader.ReadLine() {
fullLine := string(line)
if isPrefix {
for {
line, isPrefix, _ = lineReader.ReadLine()
fullLine += string(line)
if !isPrefix {
break
}
}
}
// add a line to the game/parse
lines = append(lines, string(line))
}
for _, fullLine := range lines {
key, value, err := parseLine(fullLine)
if err == nil {
os.Setenv(key, value)
}
}
return
}
func parseLine(line string) (key string, value string, err error) {
if len(line) == 0 {
err = errors.New("zero length string")
return
}
splitString := strings.Split(line, "=")
key = strings.Trim(splitString[0], " ")
value = strings.Trim(splitString[1], " \"'")
value = strings.Replace(value, "\\\"", "\"", -1)
return
}