diff options
author | Jens Arnold <amiconn@rockbox.org> | 2009-07-08 23:29:41 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2009-07-08 23:29:41 +0000 |
commit | 96f2a9dad198eee48a7bbb0614e1e668eb21a6d3 (patch) | |
tree | d79a19926d9fa023d3fff543a94b9484051bdc99 /firmware | |
parent | 408213f2633236690ba76f9c9d76e061c3c51237 (diff) | |
download | rockbox-96f2a9dad198eee48a7bbb0614e1e668eb21a6d3.tar.gz rockbox-96f2a9dad198eee48a7bbb0614e1e668eb21a6d3.zip |
Numbered filename creation: Make the search for pre-existing files independent of the requested number length. This way it will also increment properly if the requested number length changes or overflows (more than 99 files for numberlen == 2).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21732 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/general.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/firmware/general.c b/firmware/general.c index 1ff3340d27..14b2b55bf9 100644 --- a/firmware/general.c +++ b/firmware/general.c | |||
@@ -106,6 +106,7 @@ char *create_numbered_filename(char *buffer, const char *path, | |||
106 | int max_num; | 106 | int max_num; |
107 | int pathlen; | 107 | int pathlen; |
108 | int prefixlen = strlen(prefix); | 108 | int prefixlen = strlen(prefix); |
109 | int suffixlen = strlen(suffix); | ||
109 | char fmtstring[12]; | 110 | char fmtstring[12]; |
110 | 111 | ||
111 | if (buffer != path) | 112 | if (buffer != path) |
@@ -131,10 +132,14 @@ char *create_numbered_filename(char *buffer, const char *path, | |||
131 | 132 | ||
132 | while ((entry = readdir(dir))) | 133 | while ((entry = readdir(dir))) |
133 | { | 134 | { |
134 | int curr_num; | 135 | int curr_num, namelen; |
135 | 136 | ||
136 | if (strncasecmp((char *)entry->d_name, prefix, prefixlen) | 137 | if (strncasecmp((char *)entry->d_name, prefix, prefixlen)) |
137 | || strcasecmp((char *)entry->d_name + prefixlen + numberlen, suffix)) | 138 | continue; |
139 | |||
140 | namelen = strlen((char *)entry->d_name); | ||
141 | if ((namelen <= prefixlen + suffixlen) | ||
142 | || strcasecmp((char *)entry->d_name + namelen - suffixlen, suffix)) | ||
138 | continue; | 143 | continue; |
139 | 144 | ||
140 | curr_num = atoi((char *)entry->d_name + prefixlen); | 145 | curr_num = atoi((char *)entry->d_name + prefixlen); |