From 63184052be386dc2c683bb225aa08bcf92394f61 Mon Sep 17 00:00:00 2001 From: Hielke Morsink Date: Sun, 29 Nov 2015 16:00:05 +0100 Subject: [PATCH] minor optimizations and added comments to some util functions --- src/util/util.c | 60 +++++++++++++++++++------------------------------ 1 file changed, 23 insertions(+), 37 deletions(-) diff --git a/src/util/util.c b/src/util/util.c index 890423e0fd..fabf55f925 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -55,62 +55,48 @@ bool filename_valid_characters(const utf8 *filename) const char *path_get_filename(const utf8 *path) { - const char *result, *ch; + // Find last slash or backslash in the path + char *filename = strrchr(path, '/'); + if (filename == NULL) + filename = strrchr(path, '\\'); - result = path; - for (ch = path; *ch != 0; ch++) { - if (*ch == '/' || *ch == '\\') { - if (*(ch + 1) != 0) - result = ch + 1; - } - } + assert(filename != NULL); - return result; + // Increase pointer by one, to get rid of the slashes + filename++; + + return filename; } const char *path_get_extension(const utf8 *path) { - const char *extension = NULL; - const char *ch = path; - while (*ch != 0) { - if (*ch == '.') - extension = ch; + // Try to find the most-right dot in the path + char *extension = strrchr(path, '.'); - ch++; - } + // When NULL was returned, return a pointer to the null-terminator if (extension == NULL) - extension = ch; + extension = strrchr(path, '\0'); + return extension; } void path_set_extension(utf8 *path, const utf8 *newExtension) { - char *extension = NULL; - char *ch = path; - while (*ch != 0) { - if (*ch == '.') - extension = ch; - - ch++; - } - if (extension == NULL) - extension = ch; - + // Append a dot to the filename if the new extension doesn't start with it + char *endOfString = strrchr(path, '\0'); if (newExtension[0] != '.') - *extension++ = '.'; + *endOfString++ = '.'; - strcpy(extension, newExtension); + // Append the extension to the path + // No existing extensions should be removed ("ride.TD6" -> "ride.TD6.TD6") + safe_strncpy(endOfString, newExtension, MAX_PATH - (endOfString - path) - 1); } void path_remove_extension(utf8 *path) { - char *ch = path + strlen(path); - for (--ch; ch >= path; --ch) { - if (*ch == '.') { - *ch = '\0'; - break; - } - } + // Find last dot in filename, and replace it with a null-terminator + char *lastDot = strrchr(path, '.'); + if (*lastDot) *lastDot = '\0'; } bool readentirefile(const utf8 *path, void **outBuffer, int *outLength)