aboutsummaryrefslogtreecommitdiffstats
path: root/src/output_state.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/output_state.c')
-rw-r--r--src/output_state.c47
1 files changed, 23 insertions, 24 deletions
diff --git a/src/output_state.c b/src/output_state.c
index c7e6c8579..5efae3626 100644
--- a/src/output_state.c
+++ b/src/output_state.c
@@ -49,35 +49,34 @@ saveAudioDevicesState(FILE *fp)
}
}
-void
-readAudioDevicesState(FILE *fp)
+bool
+readAudioDevicesState(const char *line)
{
- char buffer[1024];
-
- while (fgets(buffer, sizeof(buffer), fp)) {
- char *c, *name;
- struct audio_output *ao;
+ long value;
+ char *endptr;
+ const char *name;
+ struct audio_output *ao;
- g_strchomp(buffer);
+ if (!g_str_has_prefix(line, AUDIO_DEVICE_STATE))
+ return false;
- if (!g_str_has_prefix(buffer, AUDIO_DEVICE_STATE))
- continue;
+ line += sizeof(AUDIO_DEVICE_STATE) - 1;
- c = strchr(buffer, ':');
- if (!c || !(++c))
- goto errline;
+ value = strtol(line, &endptr, 10);
+ if (*endptr != ':' || (value != 0 && value != 1))
+ return false;
- name = strchr(c, ':');
- if (!name || !(++name))
- goto errline;
+ if (value != 0)
+ /* state is "enabled": no-op */
+ return true;
- ao = audio_output_find(name);
- if (ao != NULL && atoi(c) == 0)
- ao->enabled = false;
-
- continue;
-errline:
- /* nonfatal */
- g_warning("invalid line in state_file: %s\n", buffer);
+ name = endptr + 1;
+ ao = audio_output_find(name);
+ if (ao == NULL) {
+ g_debug("Ignoring device state for '%s'", name);
+ return true;
}
+
+ ao->enabled = false;
+ return true;
}