From f7cc5b2efddece7cdc4fc5b7fc5324d33b7dfa8f Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 15 Jul 2009 16:57:37 +0200 Subject: state_file: don't rewind the stream while reading the state file Parse the state file line by line, let each subsystem probe a line. Only the playlist_state code gets the FILE pointer to read the following lines. --- src/state_file.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/state_file.c') diff --git a/src/state_file.c b/src/state_file.c index 3791c057d..18548d03c 100644 --- a/src/state_file.c +++ b/src/state_file.c @@ -63,6 +63,8 @@ static void state_file_read(void) { FILE *fp; + char line[1024]; + bool success; assert(state_file_path != NULL); @@ -75,11 +77,15 @@ state_file_read(void) return; } - read_sw_volume_state(fp); - rewind(fp); - readAudioDevicesState(fp); - rewind(fp); - playlist_state_restore(fp, &g_playlist); + while (fgets(line, sizeof(line), fp) != NULL) { + g_strchomp(line); + + success = read_sw_volume_state(line) || + readAudioDevicesState(line) || + playlist_state_restore(line, fp, &g_playlist); + if (!success) + g_warning("Unrecognized line in state file: %s", line); + } while(fclose(fp) && errno == EINTR) /* nothing */; } -- cgit v1.2.3