diff options
| author | raysan5 <[email protected]> | 2019-08-11 12:04:54 +0200 |
|---|---|---|
| committer | raysan5 <[email protected]> | 2019-08-11 12:04:54 +0200 |
| commit | 740834bb83734d436ba4c5324a4ccb026ebf5c6c (patch) | |
| tree | 394b518c7e26bc5f115c6ce1c25f56a662a8e8ec /src | |
| parent | 2c2ccadd32df75af312a32f2d07ca1d29e83f42b (diff) | |
| download | raylib-740834bb83734d436ba4c5324a4ccb026ebf5c6c.tar.gz raylib-740834bb83734d436ba4c5324a4ccb026ebf5c6c.zip | |
REVIEW: GetDirectoryPath() and GetPrevDirectoryPath()
Diffstat (limited to 'src')
| -rw-r--r-- | src/core.c | 42 | ||||
| -rw-r--r-- | src/raylib.h | 4 |
2 files changed, 23 insertions, 23 deletions
@@ -1814,43 +1814,43 @@ const char *GetFileNameWithoutExt(const char *filePath) return fileName; } -// Get directory for a given fileName (with path) -const char *GetDirectoryPath(const char *fileName) +// Get directory for a given filePath +const char *GetDirectoryPath(const char *filePath) { const char *lastSlash = NULL; - static char filePath[MAX_FILEPATH_LENGTH]; - memset(filePath, 0, MAX_FILEPATH_LENGTH); + static char dirPath[MAX_FILEPATH_LENGTH]; + memset(dirPath, 0, MAX_FILEPATH_LENGTH); - lastSlash = strprbrk(fileName, "\\/"); + lastSlash = strprbrk(filePath, "\\/"); if (!lastSlash) return NULL; // NOTE: Be careful, strncpy() is not safe, it does not care about '\0' - strncpy(filePath, fileName, strlen(fileName) - (strlen(lastSlash) - 1)); - filePath[strlen(fileName) - strlen(lastSlash)] = '\0'; // Add '\0' manually + strncpy(dirPath, filePath, strlen(filePath) - (strlen(lastSlash) - 1)); + dirPath[strlen(filePath) - strlen(lastSlash)] = '\0'; // Add '\0' manually - return filePath; + return dirPath; } // Get previous directory path for a given path -const char *GetPrevDirectoryPath(const char *path) +const char *GetPrevDirectoryPath(const char *dirPath) { - static char prevDir[MAX_FILEPATH_LENGTH]; - memset(prevDir, 0, MAX_FILEPATH_LENGTH); - int pathLen = strlen(path); - - for (int i = (pathLen - 1); i >= 0; i--) + static char prevDirPath[MAX_FILEPATH_LENGTH]; + memset(prevDirPath, 0, MAX_FILEPATH_LENGTH); + int pathLen = strlen(dirPath); + + if (pathLen <= 3) strcpy(prevDirPath, dirPath); + + for (int i = (pathLen - 1); (i > 0) && (pathLen > 3); i--) { - if ((path[i] == '\\') || (path[i] == '/')) + if ((dirPath[i] == '\\') || (dirPath[i] == '/')) { - if ((i != (pathLen - 1)) && (path[pathLen - 2] != ':')) - { - strncpy(prevDir, path, i); - break; - } + if (i == 2) i++; // Check for root: "C:\" + strncpy(prevDirPath, dirPath, i); + break; } } - return prevDir; + return prevDirPath; } // Get current working directory diff --git a/src/raylib.h b/src/raylib.h index 1bf0afd5..3cb8d327 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -940,8 +940,8 @@ RLAPI bool DirectoryExists(const char *dirPath); // Check if a RLAPI const char *GetExtension(const char *fileName); // Get pointer to extension for a filename string RLAPI const char *GetFileName(const char *filePath); // Get pointer to filename for a path string RLAPI const char *GetFileNameWithoutExt(const char *filePath); // Get filename string without extension (memory should be freed) -RLAPI const char *GetDirectoryPath(const char *fileName); // Get full path for a given fileName (uses static string) -RLAPI const char *GetPrevDirectoryPath(const char *path); // Get previous directory path for a given path (uses static string) +RLAPI const char *GetDirectoryPath(const char *filePath); // Get full path for a given fileName with path (uses static string) +RLAPI const char *GetPrevDirectoryPath(const char *dirPath); // Get previous directory path for a given path (uses static string) RLAPI const char *GetWorkingDirectory(void); // Get current working directory (uses static string) RLAPI char **GetDirectoryFiles(const char *dirPath, int *count); // Get filenames in a directory path (memory should be freed) RLAPI void ClearDirectoryFiles(void); // Clear directory files paths buffers (free memory) |
