diff options
author | Teruaki Kawashima <teru@rockbox.org> | 2010-07-06 13:46:32 +0000 |
---|---|---|
committer | Teruaki Kawashima <teru@rockbox.org> | 2010-07-06 13:46:32 +0000 |
commit | 851e06617bd3d4ec5427226b49e13ab2efba0cad (patch) | |
tree | 1431c73e36ac5f4692362a39c83075a7c08a41d2 | |
parent | 079e19491aa5a49d4ee992022601afde20ec0287 (diff) | |
download | rockbox-851e06617bd3d4ec5427226b49e13ab2efba0cad.tar.gz rockbox-851e06617bd3d4ec5427226b49e13ab2efba0cad.zip |
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
-rw-r--r-- | apps/plugins/lrcplayer.c | 31 |
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) | |||
1959 | if (!current.changed_lrc) | 1959 | if (!current.changed_lrc) |
1960 | return; | 1960 | return; |
1961 | rb->splash(HZ/2, "Saving changes..."); | 1961 | rb->splash(HZ/2, "Saving changes..."); |
1962 | if (current.type > NUM_TYPES) | 1962 | if (current.type == TXT || current.type > NUM_TYPES) |
1963 | { | ||
1964 | /* save changes to new .lrc8 file */ | ||
1965 | rb->strcpy(new_file, current.lrc_file); | ||
1966 | p = rb->strrchr(new_file, '.'); | ||
1967 | rb->strcpy(p, extentions[LRC8]); | ||
1968 | } | ||
1969 | else if (current.type == TXT) | ||
1970 | { | 1963 | { |
1971 | /* save changes to new .lrc file */ | 1964 | /* save changes to new .lrc file */ |
1972 | rb->strcpy(new_file, current.lrc_file); | 1965 | rb->strcpy(new_file, current.lrc_file); |
@@ -1994,7 +1987,10 @@ static void save_changes(void) | |||
1994 | } | 1987 | } |
1995 | current.offset = 0; | 1988 | current.offset = 0; |
1996 | if (current.type > NUM_TYPES) | 1989 | if (current.type > NUM_TYPES) |
1990 | { | ||
1997 | curr = -1; | 1991 | curr = -1; |
1992 | rb->write(fd, BOM, BOM_SIZE); | ||
1993 | } | ||
1998 | else | 1994 | else |
1999 | size = rb->filesize(fe); | 1995 | size = rb->filesize(fe); |
2000 | while (curr < size) | 1996 | while (curr < size) |
@@ -2005,8 +2001,7 @@ static void save_changes(void) | |||
2005 | temp_lrc; temp_lrc = temp_lrc->next) | 2001 | temp_lrc; temp_lrc = temp_lrc->next) |
2006 | { | 2002 | { |
2007 | offset = temp_lrc->file_offset; | 2003 | offset = temp_lrc->file_offset; |
2008 | if (offset == -1 || | 2004 | if (offset < next && temp_lrc->old_time_start == -1) |
2009 | (offset < next && temp_lrc->old_time_start == -1)) | ||
2010 | { | 2005 | { |
2011 | lrc_line = temp_lrc; | 2006 | lrc_line = temp_lrc; |
2012 | next = offset; | 2007 | next = offset; |
@@ -2014,7 +2009,7 @@ static void save_changes(void) | |||
2014 | } | 2009 | } |
2015 | } | 2010 | } |
2016 | offset = current.offset_file_offset; | 2011 | offset = current.offset_file_offset; |
2017 | if (offset >= curr && offset < next) | 2012 | if (offset >= 0 && offset < next) |
2018 | { | 2013 | { |
2019 | lrc_line = NULL; | 2014 | lrc_line = NULL; |
2020 | next = offset; | 2015 | next = offset; |
@@ -2073,16 +2068,11 @@ static void save_changes(void) | |||
2073 | 2068 | ||
2074 | if (success) | 2069 | if (success) |
2075 | { | 2070 | { |
2076 | if (current.type == TXT) | 2071 | if (current.type == TXT || current.type > NUM_TYPES) |
2077 | { | 2072 | { |
2078 | current.type = LRC; | 2073 | current.type = LRC; |
2079 | rb->strcpy(current.lrc_file, new_file); | 2074 | rb->strcpy(current.lrc_file, new_file); |
2080 | } | 2075 | } |
2081 | else if (current.type > NUM_TYPES) | ||
2082 | { | ||
2083 | current.type = LRC8; | ||
2084 | rb->strcpy(current.lrc_file, new_file); | ||
2085 | } | ||
2086 | else | 2076 | else |
2087 | { | 2077 | { |
2088 | rb->remove(current.lrc_file); | 2078 | rb->remove(current.lrc_file); |
@@ -2915,14 +2905,15 @@ enum plugin_status plugin_start(const void* parameter) | |||
2915 | return PLUGIN_ERROR; | 2905 | return PLUGIN_ERROR; |
2916 | } | 2906 | } |
2917 | ext = rb->strrchr(current.lrc_file, '.'); | 2907 | ext = rb->strrchr(current.lrc_file, '.'); |
2918 | for (current.type = 0; ext && current.type < NUM_TYPES; current.type++) | 2908 | if (!ext) ext = current.lrc_file; |
2909 | for (current.type = 0; current.type < NUM_TYPES; current.type++) | ||
2919 | { | 2910 | { |
2920 | if (!rb->strcmp(ext, extentions[current.type])) | 2911 | if (!rb->strcmp(ext, extentions[current.type])) |
2921 | break; | 2912 | break; |
2922 | } | 2913 | } |
2923 | if (!ext || current.type == NUM_TYPES) | 2914 | if (current.type == NUM_TYPES) |
2924 | { | 2915 | { |
2925 | rb->splashf(HZ, "%s is not supported", ext? ext: current.lrc_file); | 2916 | rb->splashf(HZ, "%s is not supported", ext); |
2926 | return PLUGIN_ERROR; | 2917 | return PLUGIN_ERROR; |
2927 | } | 2918 | } |
2928 | current.found_lrc = true; | 2919 | current.found_lrc = true; |