misc.c strip_extension() cleanup

optimize +
add some error checking of inputO

Change-Id: I88c476f5fa66847adc0b361df1a0dd4818dbfdc6
This commit is contained in:
William Wilgus 2021-08-17 08:28:23 -04:00
parent 5a4cc8da3f
commit 3e37013218
1 changed files with 6 additions and 16 deletions

View File

@ -864,27 +864,17 @@ char* strrsplt(char* str, int c)
*/ */
char *strip_extension(char* buffer, int buffer_size, const char *filename) char *strip_extension(char* buffer, int buffer_size, const char *filename)
{ {
char *dot = strrchr(filename, '.'); if (!buffer || !filename || buffer_size <= 0)
int len;
if (buffer_size <= 0)
{ {
return NULL; return NULL;
} }
buffer_size--; /* Make room for end nil */ off_t dotpos = (strrchr(filename, '.') - filename) + 1;
if (dot != 0 && filename[0] != '.') /* no match on filename beginning with '.' or beyond buffer_size */
{ if(dotpos > 1 && dotpos < buffer_size)
len = dot - filename; buffer_size = dotpos;
len = MIN(len, buffer_size); strlcpy(buffer, filename, buffer_size);
}
else
{
len = buffer_size;
}
strlcpy(buffer, filename, len + 1);
return buffer; return buffer;
} }