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:
@@ -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 */;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user