mirror of
https://github.com/wiiu-env/RPXLoadingModule.git
synced 2024-11-13 05:35:07 +01:00
80 lines
1.7 KiB
C++
80 lines
1.7 KiB
C++
#include "FileUtils.h"
|
|
#include "utils/logger.h"
|
|
#include <coreinit/cache.h>
|
|
#include <sys/stat.h>
|
|
|
|
int32_t CheckFile(const char *filepath) {
|
|
if (!filepath) {
|
|
return 0;
|
|
}
|
|
|
|
struct stat filestat {};
|
|
|
|
char dirnoslash[strlen(filepath) + 2];
|
|
snprintf(dirnoslash, sizeof(dirnoslash), "%s", filepath);
|
|
|
|
while (dirnoslash[strlen(dirnoslash) - 1] == '/') {
|
|
dirnoslash[strlen(dirnoslash) - 1] = '\0';
|
|
}
|
|
|
|
char *notRoot = strrchr(dirnoslash, '/');
|
|
if (!notRoot) {
|
|
strcat(dirnoslash, "/");
|
|
}
|
|
|
|
if (stat(dirnoslash, &filestat) == 0) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int32_t CreateSubfolder(const char *fullpath) {
|
|
if (!fullpath)
|
|
return 0;
|
|
|
|
int32_t result = 0;
|
|
|
|
char dirnoslash[strlen(fullpath) + 1];
|
|
strcpy(dirnoslash, fullpath);
|
|
|
|
int32_t pos = strlen(dirnoslash) - 1;
|
|
while (dirnoslash[pos] == '/') {
|
|
dirnoslash[pos] = '\0';
|
|
pos--;
|
|
}
|
|
|
|
if (CheckFile(dirnoslash)) {
|
|
return 1;
|
|
} else {
|
|
char parentpath[strlen(dirnoslash) + 2];
|
|
strcpy(parentpath, dirnoslash);
|
|
char *ptr = strrchr(parentpath, '/');
|
|
|
|
if (!ptr) {
|
|
//!Device root directory (must be with '/')
|
|
strcat(parentpath, "/");
|
|
struct stat filestat {};
|
|
if (stat(parentpath, &filestat) == 0) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
ptr++;
|
|
ptr[0] = '\0';
|
|
|
|
result = CreateSubfolder(parentpath);
|
|
}
|
|
|
|
if (!result) {
|
|
return 0;
|
|
}
|
|
|
|
if (mkdir(dirnoslash, 0777) == -1) {
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
} |