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.
This commit is contained in:
Max Kellermann
2009-07-15 16:57:37 +02:00
parent df7d7732c6
commit f7cc5b2efd
7 changed files with 68 additions and 61 deletions

View File

@@ -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 */;
}