summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2021-08-17 08:28:23 -0400
committerWilliam Wilgus <wilgus.william@gmail.com>2021-08-17 08:28:23 -0400
commit3e37013218781f92ecacdfc01f1b958491a31d6b (patch)
tree7c2109319bfdd3a58b986fd882073ae96ae41a7f
parent5a4cc8da3fd4fa7cd3b89ac8d636fe8ef77ee9e0 (diff)
downloadrockbox-3e37013218781f92ecacdfc01f1b958491a31d6b.tar.gz
rockbox-3e37013218781f92ecacdfc01f1b958491a31d6b.zip
misc.c strip_extension() cleanup
optimize + add some error checking of inputO Change-Id: I88c476f5fa66847adc0b361df1a0dd4818dbfdc6
-rw-r--r--apps/misc.c22
1 files changed, 6 insertions, 16 deletions
diff --git a/apps/misc.c b/apps/misc.c
index 293154c942..7da86930ba 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -864,27 +864,17 @@ char* strrsplt(char* str, int c)
*/
char *strip_extension(char* buffer, int buffer_size, const char *filename)
{
- char *dot = strrchr(filename, '.');
- int len;
-
- if (buffer_size <= 0)
+ if (!buffer || !filename || buffer_size <= 0)
{
return NULL;
}
- buffer_size--; /* Make room for end nil */
-
- if (dot != 0 && filename[0] != '.')
- {
- len = dot - filename;
- len = MIN(len, buffer_size);
- }
- else
- {
- len = buffer_size;
- }
+ off_t dotpos = (strrchr(filename, '.') - filename) + 1;
- strlcpy(buffer, filename, len + 1);
+ /* no match on filename beginning with '.' or beyond buffer_size */
+ if(dotpos > 1 && dotpos < buffer_size)
+ buffer_size = dotpos;
+ strlcpy(buffer, filename, buffer_size);
return buffer;
}