diff --git a/internal.go b/internal.go index d5a7c71..95b2a62 100644 --- a/internal.go +++ b/internal.go @@ -145,42 +145,6 @@ func hasSurroundingQuotes(value string) bool { return first == last && (first == '"' || first == '\'' || first == '`') } -func (ini *GoINI) save(data string) error { - if ini.filename == "" { - return errFilenameRequired - } - info, err := os.Stat(ini.filename) - if err != nil { - return err - } - return ini.saveFile(ini.filename, data, info.Mode().Perm()) -} - -func (ini *GoINI) saveFile(filename string, data string, perm os.FileMode) error { - if filename == "" { - return errFilenameRequired - } - perm = perm.Perm() - writePerm := perm | 0o200 - if info, err := os.Stat(filename); err == nil { - if info.Mode().IsRegular() { - if err := os.Chmod(filename, writePerm); err != nil { - return err - } - } - } else if !errors.Is(err, os.ErrNotExist) { - return err - } - if err := os.WriteFile(filename, []byte(data), writePerm); err != nil { - return err - } - if err := os.Chmod(filename, perm); err != nil { - return err - } - ini.filename = filename - return nil -} - func (ini *GoINI) rebuildIndexes() { ini.sectionKeys = make(map[string][]string) ini.sectionOrder = nil @@ -245,9 +209,6 @@ func (ini *GoINI) findSectionLineIndex(sectionName string) (int, bool) { } func (ini *GoINI) findSectionKeyLineIndex(sectionName string, keyName string) (int, bool) { - if ini.sectionKeyLineIndexes[sectionName] == nil { - return 0, false - } index, ok := ini.sectionKeyLineIndexes[sectionName][keyName] return index, ok } @@ -375,7 +336,7 @@ func commentLines(comment string) []iniLine { func formatComment(comment string) string { trimmed := strings.TrimLeftFunc(comment, unicode.IsSpace) - if strings.HasPrefix(trimmed, "#") || strings.HasPrefix(trimmed, ";") { + if isComment(trimmed) { return comment } if comment == "" { @@ -469,6 +430,42 @@ func formatINIComment(comment string) string { return "# " + comment } +func (ini *GoINI) save(data string) error { + if ini.filename == "" { + return errFilenameRequired + } + info, err := os.Stat(ini.filename) + if err != nil { + return err + } + return ini.saveFile(ini.filename, data, info.Mode().Perm()) +} + +func (ini *GoINI) saveFile(filename string, data string, perm os.FileMode) error { + if filename == "" { + return errFilenameRequired + } + perm = perm.Perm() + writePerm := perm | 0o200 + if info, err := os.Stat(filename); err == nil { + if info.Mode().IsRegular() { + if err := os.Chmod(filename, writePerm); err != nil { + return err + } + } + } else if !errors.Is(err, os.ErrNotExist) { + return err + } + if err := os.WriteFile(filename, []byte(data), writePerm); err != nil { + return err + } + if err := os.Chmod(filename, perm); err != nil { + return err + } + ini.filename = filename + return nil +} + func matchStrings(items []string, match string) []string { if match == "" { return cloneStrings(items)