diff --git a/client/loclass/fileutils.c b/client/loclass/fileutils.c index 5e3b423f7..a592e7dfc 100644 --- a/client/loclass/fileutils.c +++ b/client/loclass/fileutils.c @@ -73,24 +73,19 @@ static char *filenamemcopy(const char *preferredName, const char *suffix) { static char *newfilenamemcopy(const char *preferredName, const char *suffix) { if (preferredName == NULL) return NULL; if (suffix == NULL) return NULL; - char *preferredNameTmp = (char *) calloc(strlen(preferredName) + 1, sizeof(uint8_t)); - if (preferredNameTmp == NULL) - return NULL; - strcpy(preferredNameTmp, preferredName); - if (str_endswith(preferredNameTmp, suffix)) - preferredNameTmp[strlen(preferredNameTmp) - strlen(suffix)] = '\0'; - char *fileName = (char *) calloc(strlen(preferredNameTmp) + strlen(suffix) + 1 + 10, sizeof(uint8_t)); // 10: room for filenum to ensure new filename + uint16_t preferredNameLen = strlen(preferredName); + if (str_endswith(preferredName, suffix)) + preferredNameLen -= strlen(suffix); + char *fileName = (char *) calloc(preferredNameLen + strlen(suffix) + 1 + 10, sizeof(uint8_t)); // 10: room for filenum to ensure new filename if (fileName == NULL) { - free(preferredNameTmp); return NULL; } int num = 1; - sprintf(fileName, "%s%s", preferredNameTmp, suffix); + sprintf(fileName, "%.*s%s", preferredNameLen, preferredName, suffix); while (fileExists(fileName)) { - sprintf(fileName, "%s-%d%s", preferredNameTmp, num, suffix); + sprintf(fileName, "%.*s-%d%s", preferredNameLen, preferredName, num, suffix); num++; } - free(preferredNameTmp); return fileName; }