Browse Source

REVIEW: GetDirectoryPath() and GetPrevDirectoryPath()

raysan5 6 years ago
parent
commit
740834bb83
2 changed files with 23 additions and 23 deletions
  1. 21 21
      src/core.c
  2. 2 2
      src/raylib.h

+ 21 - 21
src/core.c

@@ -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

+ 2 - 2
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)