{"record":{"id":"da72d44f8997e58f","repo":"JanDeDobbeleer/oh-my-posh","slug":"unable-to-parse-or-invalid-status","errorCode":null,"errorMessage":"unable to parse or invalid status","messagePattern":"unable to parse or invalid status","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/runtime/battery/battery_linux.go","lineNumber":128,"sourceCode":"\t\t}\n\t\tb.Voltage /= 1000\n\t\tif currentDoesNotExist {\n\t\t\tif b.Current, err = readAmp(path, \"charge_now\", b.Voltage); err != nil {\n\t\t\t\treturn nil, errors.New(\"unable to parse charge_now\")\n\t\t\t}\n\t\t\tif b.Full, err = readAmp(path, \"charge_full\", b.Voltage); err != nil {\n\t\t\t\treturn nil, errors.New(\"unable to parse charge_full\")\n\t\t\t}\n\t\t} else {\n\t\t\tif b.Full, err = readFloat(path, \"energy_full\"); err != nil {\n\t\t\t\treturn nil, errors.New(\"unable to parse energy_full\")\n\t\t\t}\n\t\t}\n\t}\n\n\tstate, err := os.ReadFile(filepath.Join(path, \"status\"))\n\tif err != nil || len(state) == 0 {\n\t\treturn nil, errors.New(\"unable to parse or invalid status\")\n\t}\n\tif b.State, err = newState(string(state[:len(state)-1])); err != nil {\n\t\treturn nil, errors.New(\"unable to map to new state\")\n\t}\n\n\treturn b, nil\n}\n\nfunc systemGetAll() ([]*battery, error) {\n\tbFiles, err := getBatteryFiles()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar batteries []*battery\n\tvar errs Errors\n\n\tfor _, bFile := range bFiles {","sourceCodeStart":110,"sourceCodeEnd":146,"githubUrl":"https://github.com/JanDeDobbeleer/oh-my-posh/blob/0976794618c5ed95de0985dded50de1b4dc914cb/src/runtime/battery/battery_linux.go#L110-L146","documentation":"Every Linux battery must expose a status file whose content is mapped to a State. If the status file cannot be read or is empty, getByPath returns 'unable to parse or invalid status'.","triggerScenarios":"battery.Get()/systemGetAll -> getByPath where os.ReadFile(<bat>/status) errors or returns zero bytes.","commonSituations":"Driver hides or never populates status; sysfs permissions/container restrictions; empty status read from a flaky embedded controller.","solutions":["Verify: cat /sys/class/power_supply/BAT0/status (expect e.g. 'Discharging'); check permissions if it fails","Update the kernel/driver so status is populated","Exclude the non-conforming power_supply node","Handle the error as unknown/absent battery state in the caller"],"exampleFix":"// before\n$ cat /sys/class/power_supply/BAT0/status\n(empty)\n// after\n$ cat /sys/class/power_supply/BAT0/status\nDischarging","handlingStrategy":"validation","validationCode":"status=$(cat /sys/class/power_supply/BAT0/status 2>/dev/null); [ -n \"$status\" ] || echo \"status missing - battery segment will fail\"","typeGuard":"func hasStatus(dir string) bool {\n  b, err := os.ReadFile(filepath.Join(dir, \"status\"))\n  return err == nil && len(b) > 0\n}","tryCatchPattern":"bat, err := battery.Get()\nif err != nil {\n  log.Printf(\"battery status unavailable: %v\", err)\n  return nil\n}","preventionTips":["Confirm status is populated before enabling the battery segment","Update kernel/driver when status is never written","Exclude power_supply nodes that do not conform to the standard ABI"],"tags":["linux","sysfs","battery","status"],"backgroundTag":"sysfs-battery-file-missing","analyzedSha":"0976794618c5ed95de0985dded50de1b4dc914cb","analyzedAt":"2026-08-31T23:41:19.708Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}