/usr/share/gocode/src/go.pedge.io/env/decoders.go is in golang-go.pedge-env-dev 0.0~git20171203.5f5a7de-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | package env
import (
"bufio"
"encoding/json"
"fmt"
"io"
"strings"
)
type envFileDecoder struct {
reader io.Reader
}
func newEnvFileDecoder(reader io.Reader) *envFileDecoder {
return &envFileDecoder{reader}
}
func (e *envFileDecoder) Decode() (map[string]string, error) {
bufReader := bufio.NewReader(e.reader)
env := make(map[string]string)
for line, err := bufReader.ReadString('\n'); true; line, err = bufReader.ReadString('\n') {
if len(line) > 0 {
trimmedLine := strings.TrimSpace(line)
if len(trimmedLine) > 0 {
split := strings.SplitN(line, "=", 2)
if len(split) == 2 {
env[split[0]] = strings.TrimSpace(split[1])
} else {
env[split[0]] = ""
}
}
}
if err == io.EOF {
break
}
if err != nil {
return nil, err
}
}
return env, nil
}
type jsonDecoder struct {
reader io.Reader
}
func newJSONDecoder(reader io.Reader) *jsonDecoder {
return &jsonDecoder{reader}
}
func (j *jsonDecoder) Decode() (map[string]string, error) {
data := make(map[string]interface{})
if err := json.NewDecoder(j.reader).Decode(&data); err != nil {
return nil, err
}
env := make(map[string]string)
for key, value := range data {
switch value.(type) {
case string:
env[key] = value.(string)
case int64:
env[key] = fmt.Sprintf("%d", value.(int64))
case float64:
env[key] = fmt.Sprintf("%d", int64(value.(float64)))
case bool:
env[key] = fmt.Sprintf("%v", value.(bool))
default:
return nil, fmt.Errorf("env: unhandled JSON type: %T", value)
}
}
return env, nil
}
|