MCPcopy Index your code
hub / github.com/PatchMon/PatchMon / parseOSRelease

Method parseOSRelease

agent-source-code/internal/system/system.go:46–98  ·  view source on GitHub ↗

parseOSRelease parses /etc/os-release file and returns OS information

()

Source from the content-addressed store, hash-verified

44
45// parseOSRelease parses /etc/os-release file and returns OS information
46func (d *Detector) parseOSRelease() (*OSReleaseInfo, error) {
47 file, err := os.Open("/etc/os-release")
48 if err != nil {
49 return nil, fmt.Errorf("failed to open /etc/os-release: %w", err)
50 }
51 defer func() {
52 if err := file.Close(); err != nil {
53 // Log error but don't fail the function
54 fmt.Printf("Warning: failed to close file: %v\n", err)
55 }
56 }()
57
58 info := &OSReleaseInfo{}
59 scanner := bufio.NewScanner(file)
60
61 for scanner.Scan() {
62 line := strings.TrimSpace(scanner.Text())
63 if line == "" || strings.HasPrefix(line, "#") {
64 continue
65 }
66
67 parts := strings.SplitN(line, "=", 2)
68 if len(parts) != 2 {
69 continue
70 }
71
72 key := parts[0]
73 value := strings.Trim(parts[1], "\"'")
74
75 switch key {
76 case "NAME":
77 info.Name = value
78 case "PRETTY_NAME":
79 info.PrettyName = value
80 case "VERSION":
81 info.Version = value
82 case "VERSION_ID":
83 info.VersionID = value
84 case "ID":
85 info.ID = value
86 case "ID_LIKE":
87 info.IDLike = value
88 case "VERSION_CODENAME":
89 info.VersionCodename = value
90 }
91 }
92
93 if err := scanner.Err(); err != nil {
94 return nil, fmt.Errorf("failed to scan /etc/os-release: %w", err)
95 }
96
97 return info, nil
98}
99
100// isFreeBSD checks if running on FreeBSD using uname -s
101func (d *Detector) isFreeBSD() bool {

Callers 1

DetectOSMethod · 0.95

Calls 2

CloseMethod · 0.45
ScanMethod · 0.45

Tested by

no test coverage detected