Restore inner-loop error handling; optimize variable detection

This commit is contained in:
2025-10-18 15:01:57 -04:00
parent a47a1823c7
commit 3e3341ac1a
+10 -3
View File
@@ -36,6 +36,7 @@ func (c *Client) Close() error {
return c.conn.Close() return c.conn.Close()
} }
// GetListVar updates NutKeyValMap with the current status of all variables from <upsID>.
func (c *Client) GetListVar(upsID string) error { func (c *Client) GetListVar(upsID string) error {
cmd := "LIST VAR \"" + upsID + "\"" cmd := "LIST VAR \"" + upsID + "\""
if err := c.write(cmd); err != nil { if err := c.write(cmd); err != nil {
@@ -50,13 +51,19 @@ func (c *Client) GetListVar(upsID string) error {
return fmt.Errorf("pre-loop error: expected %q, got %q", expected, l) return fmt.Errorf("pre-loop error: expected %q, got %q", expected, l)
} }
outer:
for { for {
l, _ := c.read() l, err := c.read()
if !strings.HasPrefix(l, "VAR \""+upsID+"\" ") { if err != nil {
break return fmt.Errorf("in-loop error: %w", err)
} }
lSplit := strings.Split(l, " ") lSplit := strings.Split(l, " ")
switch lSplit[0] {
case "VAR":
NutKeyValMap[strings.Trim(lSplit[2], "\"")] = strings.Trim(strings.Join(lSplit[3:], " "), "\"") NutKeyValMap[strings.Trim(lSplit[2], "\"")] = strings.Trim(strings.Join(lSplit[3:], " "), "\"")
default:
break outer
}
} }
return nil return nil
} }