Minor platform cleanup.
This commit is contained in:
parent
1affec7e8c
commit
4600f3e631
2 changed files with 55 additions and 50 deletions
|
|
@ -1403,42 +1403,6 @@ void platformLogCrashDetail(int sig, PlatformLogFnT logFn) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Creates a directory and all parent directories that don't exist.
|
|
||||||
// Works by walking the path from left to right, creating each
|
|
||||||
// component. mkdir() on an existing directory returns EEXIST which
|
|
||||||
// is silently ignored.
|
|
||||||
|
|
||||||
int32_t platformMkdirRecursive(const char *path) {
|
|
||||||
char buf[DVX_MAX_PATH];
|
|
||||||
strncpy(buf, path, sizeof(buf) - 1);
|
|
||||||
buf[sizeof(buf) - 1] = '\0';
|
|
||||||
|
|
||||||
for (char *p = buf; *p; p++) {
|
|
||||||
// Skip drive letter (e.g. "C:\")
|
|
||||||
if (p == buf + 1 && *p == ':') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*p == '/' || *p == '\\') {
|
|
||||||
*p = '\0';
|
|
||||||
|
|
||||||
if (buf[0] != '\0') {
|
|
||||||
mkdir(buf, 0755);
|
|
||||||
}
|
|
||||||
|
|
||||||
*p = '/';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the final directory
|
|
||||||
if (mkdir(buf, 0755) != 0 && errno != EEXIST) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Initializes the INT 33h mouse driver. The mouse driver is a TSR
|
// Initializes the INT 33h mouse driver. The mouse driver is a TSR
|
||||||
// (or emulated by the DOS environment) that tracks position and
|
// (or emulated by the DOS environment) that tracks position and
|
||||||
// buttons independently of the application.
|
// buttons independently of the application.
|
||||||
|
|
@ -1871,20 +1835,6 @@ void platformSplashShutdown(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t platformStripLineEndings(char *buf, int32_t len) {
|
|
||||||
int32_t dst = 0;
|
|
||||||
|
|
||||||
for (int32_t src = 0; src < len; src++) {
|
|
||||||
if (buf[src] != '\r') {
|
|
||||||
buf[dst++] = buf[src];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
buf[dst] = '\0';
|
|
||||||
return dst;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// DOS 8.3 filename validation.
|
// DOS 8.3 filename validation.
|
||||||
//
|
//
|
||||||
// Validates that a filename conforms to DOS 8.3 conventions:
|
// Validates that a filename conforms to DOS 8.3 conventions:
|
||||||
|
|
|
||||||
|
|
@ -33,10 +33,12 @@
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#ifdef __DJGPP__
|
#ifdef __DJGPP__
|
||||||
|
|
@ -180,6 +182,59 @@ char *platformPathDirEnd(const char *path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Creates a directory and all parent directories that don't exist.
|
||||||
|
// Walks the path left-to-right, creating each component. mkdir() on
|
||||||
|
// an existing directory returns EEXIST, which we silently ignore.
|
||||||
|
// DJGPP-style "C:\" drive letters are handled by skipping the colon
|
||||||
|
// so we don't try to mkdir("C:") -- harmless on POSIX paths that
|
||||||
|
// don't start with "X:".
|
||||||
|
int32_t platformMkdirRecursive(const char *path) {
|
||||||
|
char buf[DVX_MAX_PATH];
|
||||||
|
strncpy(buf, path, sizeof(buf) - 1);
|
||||||
|
buf[sizeof(buf) - 1] = '\0';
|
||||||
|
|
||||||
|
for (char *p = buf; *p; p++) {
|
||||||
|
// Skip drive letter (e.g. "C:\")
|
||||||
|
if (p == buf + 1 && *p == ':') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*p == '/' || *p == '\\') {
|
||||||
|
*p = '\0';
|
||||||
|
|
||||||
|
if (buf[0] != '\0') {
|
||||||
|
mkdir(buf, 0755);
|
||||||
|
}
|
||||||
|
|
||||||
|
*p = '/';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the final directory
|
||||||
|
if (mkdir(buf, 0755) != 0 && errno != EEXIST) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Remove carriage returns in-place. Used when reading DOS-format
|
||||||
|
// text files on hosts that don't auto-strip them.
|
||||||
|
int32_t platformStripLineEndings(char *buf, int32_t len) {
|
||||||
|
int32_t dst = 0;
|
||||||
|
|
||||||
|
for (int32_t src = 0; src < len; src++) {
|
||||||
|
if (buf[src] != '\r') {
|
||||||
|
buf[dst++] = buf[src];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buf[dst] = '\0';
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
char *platformReadFile(const char *path, int32_t *outLen) {
|
char *platformReadFile(const char *path, int32_t *outLen) {
|
||||||
if (outLen) {
|
if (outLen) {
|
||||||
*outLen = 0;
|
*outLen = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue