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
This commit is contained in:
parent
6325ef978b
commit
a3e6a865df
2 changed files with 19 additions and 16 deletions
|
@ -1188,33 +1188,36 @@ bool set_option(const char* string, const void* variable, enum optiontype type,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
void set_file(const char* filename, char* setting, int maxlen)
|
* Takes filename, removes the directory (assumed to be ROCKBOX_DIR) its in
|
||||||
|
* and the extension, and then copies the basename into setting
|
||||||
|
**/
|
||||||
|
void set_file(const char* filename, char* setting, const int maxlen)
|
||||||
{
|
{
|
||||||
const char* fptr = strrchr(filename,'/');
|
const char* fptr = strrchr(filename,'/');
|
||||||
|
const char* extptr;
|
||||||
int len;
|
int len;
|
||||||
int extlen = 0;
|
int extlen = 0;
|
||||||
const char* ptr;
|
|
||||||
|
|
||||||
if (!fptr)
|
if (!fptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fptr++;
|
fptr++;
|
||||||
|
|
||||||
len = strlen(fptr);
|
extptr = strrchr(fptr, '.');
|
||||||
ptr = fptr + len;
|
|
||||||
while ((*ptr != '.') && (ptr != fptr)) {
|
|
||||||
extlen++;
|
|
||||||
ptr--;
|
|
||||||
}
|
|
||||||
if(ptr == fptr) extlen = 0;
|
|
||||||
|
|
||||||
if (strncasecmp(ROCKBOX_DIR, filename, strlen(ROCKBOX_DIR)) ||
|
if (!extptr || extptr < fptr)
|
||||||
(len-extlen > maxlen))
|
extlen = 0;
|
||||||
|
else
|
||||||
|
extlen = strlen(extptr);
|
||||||
|
|
||||||
|
len = strlen(fptr) - extlen;
|
||||||
|
|
||||||
|
/* error if filename isn't in ROCKBOX_DIR */
|
||||||
|
if (strncasecmp(ROCKBOX_DIR, filename, ROCKBOX_DIR_LEN) || (len > maxlen))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
strlcpy(setting, fptr, len-extlen+1);
|
strlcpy(setting, fptr, len+1);
|
||||||
|
|
||||||
settings_save();
|
settings_save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ struct opt_items {
|
||||||
#ifndef ROCKBOX_DIR
|
#ifndef ROCKBOX_DIR
|
||||||
#error ROCKBOX_DIR not defined (should be in autoconf.h)
|
#error ROCKBOX_DIR not defined (should be in autoconf.h)
|
||||||
#endif
|
#endif
|
||||||
#define ROCKBOX_DIR_LEN sizeof(ROCKBOX_DIR)
|
#define ROCKBOX_DIR_LEN (sizeof(ROCKBOX_DIR)-1)
|
||||||
#endif /* def __PCTOOL__ */
|
#endif /* def __PCTOOL__ */
|
||||||
|
|
||||||
|
|
||||||
|
@ -288,7 +288,7 @@ bool set_int_ex(const unsigned char* string, const char* unit, int voice_unit,
|
||||||
const char* (*formatter)(char*, size_t, int, const char*),
|
const char* (*formatter)(char*, size_t, int, const char*),
|
||||||
int32_t (*get_talk_id)(int, int));
|
int32_t (*get_talk_id)(int, int));
|
||||||
|
|
||||||
void set_file(const char* filename, char* setting, int maxlen);
|
void set_file(const char* filename, char* setting, const int maxlen);
|
||||||
|
|
||||||
bool set_option(const char* string, const void* variable, enum optiontype type,
|
bool set_option(const char* string, const void* variable, enum optiontype type,
|
||||||
const struct opt_items* options, int numoptions, void (*function)(int));
|
const struct opt_items* options, int numoptions, void (*function)(int));
|
||||||
|
|
Loading…
Reference in a new issue