summaryrefslogtreecommitdiff
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)
864 */ 864 */
865char *strip_extension(char* buffer, int buffer_size, const char *filename) 865char *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}