From 46774a8167b061c5f438ed4ddf607669d9e9f322 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 26 Jan 2020 13:01:35 +0100 Subject: [PATCH] REVIEWED: GetDirectoryPath() --- src/core.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/core.c b/src/core.c index f1016c361..e865a5202 100644 --- a/src/core.c +++ b/src/core.c @@ -1941,16 +1941,31 @@ const char *GetFileNameWithoutExt(const char *filePath) // Get directory for a given filePath const char *GetDirectoryPath(const char *filePath) { +/* + // NOTE: Directory separator is different in Windows and other platforms, + // fortunately, Windows also support the '/' separator, that's the one should be used + #if defined(_WIN32) + char separator = '\\'; + #else + char separator = '/'; + #endif +*/ const char *lastSlash = NULL; static char dirPath[MAX_FILEPATH_LENGTH]; memset(dirPath, 0, MAX_FILEPATH_LENGTH); + + // For security, we set starting path to current directory, + // obtained path will be concated to this + dirPath[0] = '.'; + dirPath[1] = '/'; lastSlash = strprbrk(filePath, "\\/"); - if (!lastSlash) return NULL; - - // NOTE: Be careful, strncpy() is not safe, it does not care about '\0' - strncpy(dirPath, filePath, strlen(filePath) - (strlen(lastSlash) - 1)); - dirPath[strlen(filePath) - strlen(lastSlash)] = '\0'; // Add '\0' manually + if (lastSlash) + { + // NOTE: Be careful, strncpy() is not safe, it does not care about '\0' + strncpy(dirPath + 2, filePath, strlen(filePath) - (strlen(lastSlash) - 1)); + dirPath[2 + strlen(filePath) - strlen(lastSlash)] = '\0'; // Add '\0' manually + } return dirPath; }