summaryrefslogtreecommitdiff
path: root/apps/settings.c
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2010-07-25 22:45:57 +0000
committerThomas Martitz <kugel@rockbox.org>2010-07-25 22:45:57 +0000
commita3e6a865df7f40a01e38381881b29b0b16f6ca8c (patch)
tree1472620cae01a035010bfac7bf341359aee7dd2d /apps/settings.c
parent6325ef978b2c26445721cae14028c3d429b63b3e (diff)
downloadrockbox-a3e6a865df7f40a01e38381881b29b0b16f6ca8c.tar.gz
rockbox-a3e6a865df7f40a01e38381881b29b0b16f6ca8c.zip
Rewrite set_file() to be smaller and better readable, and a comment describing what it does.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27567 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/settings.c')
-rw-r--r--apps/settings.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/apps/settings.c b/apps/settings.c
index abc1d6af93..938281f4c2 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -1188,33 +1188,36 @@ bool set_option(const char* string, const void* variable, enum optiontype type,
1188 return true; 1188 return true;
1189} 1189}
1190 1190
1191 1191/*
1192void set_file(const char* filename, char* setting, int maxlen) 1192 * Takes filename, removes the directory (assumed to be ROCKBOX_DIR) its in
1193 * and the extension, and then copies the basename into setting
1194 **/
1195void set_file(const char* filename, char* setting, const int maxlen)
1193{ 1196{
1194 const char* fptr = strrchr(filename,'/'); 1197 const char* fptr = strrchr(filename,'/');
1198 const char* extptr;
1195 int len; 1199 int len;
1196 int extlen = 0; 1200 int extlen = 0;
1197 const char* ptr;
1198 1201
1199 if (!fptr) 1202 if (!fptr)
1200 return; 1203 return;
1201 1204
1202 fptr++; 1205 fptr++;
1203 1206
1204 len = strlen(fptr); 1207 extptr = strrchr(fptr, '.');
1205 ptr = fptr + len;
1206 while ((*ptr != '.') && (ptr != fptr)) {
1207 extlen++;
1208 ptr--;
1209 }
1210 if(ptr == fptr) extlen = 0;
1211 1208
1212 if (strncasecmp(ROCKBOX_DIR, filename, strlen(ROCKBOX_DIR)) || 1209 if (!extptr || extptr < fptr)
1213 (len-extlen > maxlen)) 1210 extlen = 0;
1214 return; 1211 else
1212 extlen = strlen(extptr);
1213
1214 len = strlen(fptr) - extlen;
1215 1215
1216 strlcpy(setting, fptr, len-extlen+1); 1216 /* error if filename isn't in ROCKBOX_DIR */
1217 if (strncasecmp(ROCKBOX_DIR, filename, ROCKBOX_DIR_LEN) || (len > maxlen))
1218 return;
1217 1219
1220 strlcpy(setting, fptr, len+1);
1218 settings_save(); 1221 settings_save();
1219} 1222}
1220 1223