REVIEW: GetDirectoryPath() and GetPrevDirectoryPath()

This commit is contained in:
raysan5 2019-08-11 12:04:54 +02:00
parent 2c2ccadd32
commit 740834bb83
2 changed files with 23 additions and 23 deletions

View file

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