diff options
author | William Wilgus <wilgus.william@gmail.com> | 2021-08-17 08:28:23 -0400 |
---|---|---|
committer | William Wilgus <wilgus.william@gmail.com> | 2021-08-17 08:28:23 -0400 |
commit | 3e37013218781f92ecacdfc01f1b958491a31d6b (patch) | |
tree | 7c2109319bfdd3a58b986fd882073ae96ae41a7f | |
parent | 5a4cc8da3fd4fa7cd3b89ac8d636fe8ef77ee9e0 (diff) | |
download | rockbox-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.c | 22 |
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) | |||
864 | */ | 864 | */ |
865 | char *strip_extension(char* buffer, int buffer_size, const char *filename) | 865 | char *strip_extension(char* buffer, int buffer_size, const char *filename) |
866 | { | 866 | { |
867 | char *dot = strrchr(filename, '.'); | 867 | if (!buffer || !filename || buffer_size <= 0) |
868 | int len; | ||
869 | |||
870 | if (buffer_size <= 0) | ||
871 | { | 868 | { |
872 | return NULL; | 869 | return NULL; |
873 | } | 870 | } |
874 | 871 | ||
875 | buffer_size--; /* Make room for end nil */ | 872 | off_t dotpos = (strrchr(filename, '.') - filename) + 1; |
876 | |||
877 | if (dot != 0 && filename[0] != '.') | ||
878 | { | ||
879 | len = dot - filename; | ||
880 | len = MIN(len, buffer_size); | ||
881 | } | ||
882 | else | ||
883 | { | ||
884 | len = buffer_size; | ||
885 | } | ||
886 | 873 | ||
887 | strlcpy(buffer, filename, len + 1); | 874 | /* no match on filename beginning with '.' or beyond buffer_size */ |
875 | if(dotpos > 1 && dotpos < buffer_size) | ||
876 | buffer_size = dotpos; | ||
877 | strlcpy(buffer, filename, buffer_size); | ||
888 | 878 | ||
889 | return buffer; | 879 | return buffer; |
890 | } | 880 | } |