Fixed errors

This commit is contained in:
sloumdrone 2019-06-27 21:49:52 -07:00
parent 2dc20111e0
commit d6b686d325
1 changed files with 33 additions and 25 deletions

View File

@ -15,17 +15,17 @@ type Mailcap struct {
} }
func NewMailcap() *Mailcap { func NewMailcap() *Mailcap {
mc := Mailcap{Caps{}} mc := Mailcap{}
mc.getCaps() mc.getCaps()
return &mc return &mc
} }
(m *Mailcap) func ShowAll() { func (m *Mailcap) ShowAll() {
fmt.Print(m.Caps) fmt.Print(m.Caps)
} }
(m *Mailcap) func Show(mime string) { func (m *Mailcap) Show(mime string) {
if v, ok := m.Caps["mime"] { if v, ok := m.Caps[mime]; ok {
fmt.Println(mime + ":") fmt.Println(mime + ":")
fmt.Print(v) fmt.Print(v)
} else { } else {
@ -33,22 +33,25 @@ func NewMailcap() *Mailcap {
} }
} }
(m *Mailcap) func getCaps() { func (m *Mailcap) getCaps() {
lnNum := 0 lnNum := 0
for mailcapFile := range getMailcapFileList() { var moreCaps Cap
for _, mailcapFile := range getMailcapFileList() {
file, err := os.Open(mailcapFile) file, err := os.Open(mailcapFile)
if err != nil { if err != nil {
continue continue
} }
moreCaps, lnNum, err := readMailcapFile(file, lnNum) moreCaps, lnNum = readMailcapFile(file, lnNum)
for k, v := range moreCaps { for k, v := range moreCaps {
if v, ok := m.Caps[key]; ok { if _, ok := m.Caps[k]; ok {
m.Caps[key] = m.Caps[key] + value for _, item := range v {
m.Caps[k] = append(m.Caps[k], item)
}
} else { } else {
m.Caps[key] = value m.Caps[k] = v
} }
} }
file.close() file.Close()
} }
} }
@ -57,19 +60,20 @@ func NewMailcap() *Mailcap {
// found on the system. // found on the system.
func getMailcapFileList() (mCapSlice []string) { func getMailcapFileList() (mCapSlice []string) {
var home string = "." var home string = "."
if val, ok := os.LookupEnv('MAILCAPS'); ok { if val, ok := os.LookupEnv("MAILCAPS"); ok {
mCapSlice = strings.Split(val, string(os.PathListSeparator)) mCapSlice = strings.Split(val, string(os.PathListSeparator))
} else { } else {
if val, ok := os.LookupEnv('HOME'); ok { if val, ok := os.LookupEnv("HOME"); ok {
home = val home = val
} }
mCapSlice = []string{ mCapSlice = []string{
home + "/.mailcap", home + "/.mailcap",
"/etc/mailcap", "/etc/mailcap",
"/usr/etc/mailcap", "/usr/etc/mailcap",
"/usr/local/etc/mailcap" "/usr/local/etc/mailcap",
} }
} }
return
} }
func readMailcapFile(f *os.File,ln int) (Cap, int) { func readMailcapFile(f *os.File,ln int) (Cap, int) {
@ -84,6 +88,7 @@ func readMailcapFile(f *os.File,ln int) (Cap, int) {
// Handle continuations for long lines // Handle continuations for long lines
nxtLn := l nxtLn := l
for ;nxtLn[len(nxtLn)-3:] == "\\\n"; { for ;nxtLn[len(nxtLn)-3:] == "\\\n"; {
var er error
nxtLn, er = reader.ReadString('\n') nxtLn, er = reader.ReadString('\n')
if er != nil || strings.TrimSpace(nxtLn) == "" { if er != nil || strings.TrimSpace(nxtLn) == "" {
nxtLn = "\n" nxtLn = "\n"
@ -97,33 +102,36 @@ func readMailcapFile(f *os.File,ln int) (Cap, int) {
continue continue
} }
if ln >= 0 { if ln >= 0 {
fields["lineno"] = ln fields["lineno"] = string(ln)
ln += 1 ln += 1
} }
types := strings.Split(key, "/") types := strings.Split(key, "/")
for t := range types { for i, t := range types {
t = strings.TrimSpace(t) types[i] = strings.TrimSpace(t)
} }
key = strings.Join(types, "/") key = strings.Join(types, "/")
key = strings.ToLower(key) key = strings.ToLower(key)
if _, ok := caps[key] { if _, ok := caps[key]; ok {
append(caps[key], fields) caps[key] = append(caps[key], fields)
} else { } else {
caps[key] = fields var outputfield Fields
caps[key] = outputfield
caps[key] = append(caps[key], fields)
} }
return caps, ln return caps, ln
} }
} }
func parseLine(ln) (string, Entry, error) { func parseLine(ln string) (string, Entry, error) {
outputFields := Entry{} outputFields := Entry{}
i := 0 i := 0
n := len(ln) n := len(ln)
fields := make([]string, 0, 10) fields := make([]string, 0, 10)
var field string
for ;i < n; { for ;i < n; {
field, i = parseField(ln, i, n) field, i = parseField(ln, i, n)
append(fields, field) fields = append(fields, field)
i += 1 i += 1
} }
if len(fields) < 2 { if len(fields) < 2 {
@ -135,9 +143,9 @@ func parseLine(ln) (string, Entry, error) {
if len(fields) > 2 { if len(fields) > 2 {
rest = fields[2:] rest = fields[2:]
} }
for f := range rest { for _, f := range rest {
var fkey, fvalue string var fkey, fvalue string
i = string.Index(f, r"=") i = strings.Index(f, "=")
if i < 0 { if i < 0 {
fkey = f fkey = f
fvalue = "" fvalue = ""
@ -166,6 +174,6 @@ func parseField(ln string, i, n int) (string, int) {
i += 1 i += 1
} }
} }
return strings.TrimSpace(line[start:i]), i return strings.TrimSpace(ln[start:i]), i
} }