1
0
Fork 0
forked from len0rd/rockbox

Bug fix: Longish .playlist_control files got corrupted when doing ON->resume after stop without rebooting first

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5033 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2004-09-01 21:34:20 +00:00
parent 25d162d6ce
commit ac9ad1a25d

View file

@ -245,6 +245,14 @@ static void new_playlist(struct playlist_info* playlist, const char *dir,
static void create_control(struct playlist_info* playlist) static void create_control(struct playlist_info* playlist)
{ {
playlist->control_fd = creat(playlist->control_filename, 0000200); playlist->control_fd = creat(playlist->control_filename, 0000200);
if (playlist->control_fd >= 0)
{
/* have to close and re-open without O_TRUNC, otherwise it may get
chopped on closing (the file pointer is not always at the end) */
close(playlist->control_fd);
playlist->control_fd = open(playlist->control_filename, O_RDWR);
}
if (playlist->control_fd < 0) if (playlist->control_fd < 0)
{ {
splash(HZ*2, true, "%s (%d)", str(LANG_PLAYLIST_CONTROL_ACCESS_ERROR), splash(HZ*2, true, "%s (%d)", str(LANG_PLAYLIST_CONTROL_ACCESS_ERROR),
@ -303,7 +311,7 @@ static void update_playlist_filename(struct playlist_info* playlist,
sep="/"; sep="/";
dirlen++; dirlen++;
} }
playlist->dirlen = dirlen; playlist->dirlen = dirlen;
snprintf(playlist->filename, sizeof(playlist->filename), snprintf(playlist->filename, sizeof(playlist->filename),
@ -1253,7 +1261,7 @@ int playlist_resume(void)
{ {
/* str1=version str2=dir str3=file */ /* str1=version str2=dir str3=file */
int version; int version;
if (!str1) if (!str1)
{ {
result = -1; result = -1;
@ -1311,7 +1319,7 @@ int playlist_resume(void)
last_position = atoi(str2); last_position = atoi(str2);
queue = (current_command == resume_add)?false:true; queue = (current_command == resume_add)?false:true;
/* seek position is based on str3's position in /* seek position is based on str3's position in
buffer */ buffer */
if (add_track_to_playlist(playlist, str3, position, if (add_track_to_playlist(playlist, str3, position,
@ -1403,7 +1411,7 @@ int playlist_resume(void)
/* to ignore any extra newlines */ /* to ignore any extra newlines */
current_command = resume_comment; current_command = resume_comment;
} }
else if(newline) else if(newline)
{ {
newline = false; newline = false;