summaryrefslogtreecommitdiff
path: root/apps/plugins/lrcplayer.c
diff options
context:
space:
mode:
authorTeruaki Kawashima <teru@rockbox.org>2010-07-06 13:46:32 +0000
committerTeruaki Kawashima <teru@rockbox.org>2010-07-06 13:46:32 +0000
commit851e06617bd3d4ec5427226b49e13ab2efba0cad (patch)
tree1431c73e36ac5f4692362a39c83075a7c08a41d2 /apps/plugins/lrcplayer.c
parent079e19491aa5a49d4ee992022601afde20ec0287 (diff)
lrcplayer:
* fix possible infinite loop in save_changes(). hopefully fix FS#11457. * use .lrc file instead of .lrc8 file when saveing changes to the lyrics read from id3 tag. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27305 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/lrcplayer.c')
-rw-r--r--apps/plugins/lrcplayer.c31
1 files changed, 11 insertions, 20 deletions
diff --git a/apps/plugins/lrcplayer.c b/apps/plugins/lrcplayer.c
index 10af855d6c..7cc9f92b52 100644
--- a/apps/plugins/lrcplayer.c
+++ b/apps/plugins/lrcplayer.c
@@ -1959,14 +1959,7 @@ static void save_changes(void)
if (!current.changed_lrc)
return;
rb->splash(HZ/2, "Saving changes...");
- if (current.type > NUM_TYPES)
- {
- /* save changes to new .lrc8 file */
- rb->strcpy(new_file, current.lrc_file);
- p = rb->strrchr(new_file, '.');
- rb->strcpy(p, extentions[LRC8]);
- }
- else if (current.type == TXT)
+ if (current.type == TXT || current.type > NUM_TYPES)
{
/* save changes to new .lrc file */
rb->strcpy(new_file, current.lrc_file);
@@ -1994,7 +1987,10 @@ static void save_changes(void)
}
current.offset = 0;
if (current.type > NUM_TYPES)
+ {
curr = -1;
+ rb->write(fd, BOM, BOM_SIZE);
+ }
else
size = rb->filesize(fe);
while (curr < size)
@@ -2005,8 +2001,7 @@ static void save_changes(void)
temp_lrc; temp_lrc = temp_lrc->next)
{
offset = temp_lrc->file_offset;
- if (offset == -1 ||
- (offset < next && temp_lrc->old_time_start == -1))
+ if (offset < next && temp_lrc->old_time_start == -1)
{
lrc_line = temp_lrc;
next = offset;
@@ -2014,7 +2009,7 @@ static void save_changes(void)
}
}
offset = current.offset_file_offset;
- if (offset >= curr && offset < next)
+ if (offset >= 0 && offset < next)
{
lrc_line = NULL;
next = offset;
@@ -2073,16 +2068,11 @@ static void save_changes(void)
if (success)
{
- if (current.type == TXT)
+ if (current.type == TXT || current.type > NUM_TYPES)
{
current.type = LRC;
rb->strcpy(current.lrc_file, new_file);
}
- else if (current.type > NUM_TYPES)
- {
- current.type = LRC8;
- rb->strcpy(current.lrc_file, new_file);
- }
else
{
rb->remove(current.lrc_file);
@@ -2915,14 +2905,15 @@ enum plugin_status plugin_start(const void* parameter)
return PLUGIN_ERROR;
}
ext = rb->strrchr(current.lrc_file, '.');
- for (current.type = 0; ext && current.type < NUM_TYPES; current.type++)
+ if (!ext) ext = current.lrc_file;
+ for (current.type = 0; current.type < NUM_TYPES; current.type++)
{
if (!rb->strcmp(ext, extentions[current.type]))
break;
}
- if (!ext || current.type == NUM_TYPES)
+ if (current.type == NUM_TYPES)
{
- rb->splashf(HZ, "%s is not supported", ext? ext: current.lrc_file);
+ rb->splashf(HZ, "%s is not supported", ext);
return PLUGIN_ERROR;
}
current.found_lrc = true;