Fix mju_getfiledir when the path contains a mixture of / and \.

PiperOrigin-RevId: 529754511
Change-Id: Ifce2b86bc339a8cae584db639b7901b270e56384
This commit is contained in:
Saran Tunyasuvunakool
2023-05-05 10:35:04 -07:00
committed by Copybara-Service
parent 7998fc7fca
commit 496755a55d
3 changed files with 25 additions and 19 deletions
+18 -13
View File
@@ -175,7 +175,7 @@ void mju_getResourceDir(mjResource* resource, const char** dir, int* ndir) {
*dir = NULL;
*ndir = 0;
if (resource == NULL) {
if (!resource) {
return;
}
@@ -185,26 +185,31 @@ void mju_getResourceDir(mjResource* resource, const char** dir, int* ndir) {
resource->getdir(resource, dir, ndir);
}
} else {
mju_getfiledir(resource->name, dir, ndir);
*dir = resource->name;
*ndir = mju_dirnamelen(resource->name);
}
}
// get directory path of file in OS filesystem
void mju_getfiledir(const char* filename, const char** dir, int* ndir) {
*dir = NULL;
*ndir = 0;
char* ch;
if ((filename != NULL) &&
((ch = strrchr(filename, '/')) ||
(ch = strrchr(filename, '\\')))) {
*dir = filename;
*ndir = (int)(ch - filename) + 1;
// get the length of the dirname portion of a given path
int mju_dirnamelen(const char* path) {
if (!path) {
return 0;
}
int pos = -1;
for (int i = 0; path[i] && i >= 0; ++i) {
if (path[i] == '/' || path[i] == '\\') {
pos = i;
}
}
return pos + 1;
}
// read file into memory buffer (allocated here with mju_malloc)
void* mju_fileToMemory(const char* filename, int* filesize) {
// open file
+2 -2
View File
@@ -37,8 +37,8 @@ MJAPI int mju_readResource(mjResource* resource, const void** buffer);
// sets for a resource with a name partitioned as {dir}{filename}, the dir and ndir pointers
MJAPI void mju_getResourceDir(mjResource* resource, const char** dir, int* ndir);
// get directory of a file in the OS filesystem
void mju_getfiledir(const char* filename, const char** dir, int* ndir);
// get the length of the dirname portion of a given path
int mju_dirnamelen(const char* path);
// read file into memory buffer (allocated here with mju_malloc)
void* mju_fileToMemory(const char* filename, int* filesize);
+5 -4
View File
@@ -253,11 +253,12 @@ static void vfs_close_callback(mjResource* resource) {
// getdir callback for the VFS resource provider
static void vfs_getdir_callback(mjResource* resource, const char** dir, int* ndir) {
*dir = NULL;
*ndir = 0;
if (resource) {
mju_getfiledir(resource->name, dir, ndir);
*dir = resource->name;
*ndir = mju_dirnamelen(resource->name);
} else {
*dir = NULL;
*ndir = 0;
}
}