mirror of
https://github.com/GTAmodding/re3.git
synced 2025-07-17 06:34:08 +00:00
Crossplatform work continues
This commit is contained in:
parent
6571715cb2
commit
c80403a2e0
15 changed files with 170 additions and 25 deletions
81
src/skel/crossplatform.cpp
Normal file
81
src/skel/crossplatform.cpp
Normal file
|
@ -0,0 +1,81 @@
|
|||
#include "common.h"
|
||||
#define USEALTERNATIVEWINFUNCS
|
||||
#include "crossplatform.h"
|
||||
|
||||
// For internal use
|
||||
// wMilliseconds is not needed
|
||||
void tmToSystemTime(const tm *tm, SYSTEMTIME *out) {
|
||||
out->wYear = tm->tm_year + 1900;
|
||||
out->wMonth = tm->tm_mon + 1;
|
||||
out->wDayOfWeek = tm->tm_wday;
|
||||
out->wDay = tm->tm_mday;
|
||||
out->wHour = tm->tm_hour;
|
||||
out->wMinute = tm->tm_min;
|
||||
out->wSecond = tm->tm_sec;
|
||||
}
|
||||
|
||||
void GetLocalTime_CP(SYSTEMTIME *out) {
|
||||
time_t timestamp = time(nil);
|
||||
tm *localTm = localtime(×tamp);
|
||||
tmToSystemTime(localTm, out);
|
||||
}
|
||||
|
||||
#if !defined _WIN32 || defined __MINGW32__
|
||||
HANDLE FindFirstFile(const char* pathname, WIN32_FIND_DATA* firstfile) {
|
||||
char newpathname[32];
|
||||
strncpy(newpathname, pathname, 32);
|
||||
char* path = strtok(newpathname, "\\*");
|
||||
strncpy(firstfile->folder, path, sizeof(firstfile->folder));
|
||||
|
||||
// Both w/ extension and w/o extension is ok
|
||||
if (strlen(path) + 2 != strlen(pathname))
|
||||
strncpy(firstfile->extension, strtok(NULL, "\\*"), sizeof(firstfile->extension));
|
||||
else
|
||||
strncpy(firstfile->extension, "", sizeof(firstfile->extension));
|
||||
|
||||
HANDLE d;
|
||||
if ((d = opendir(path)) == NULL || !FindNextFile(d, firstfile))
|
||||
return NULL;
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
bool FindNextFile(HANDLE d, WIN32_FIND_DATA* finddata) {
|
||||
dirent *file;
|
||||
static struct stat fileStats;
|
||||
static char path[PATH_MAX], relativepath[NAME_MAX + sizeof(finddata->folder) + 1];
|
||||
int extensionLen = strlen(finddata->extension);
|
||||
while ((file = readdir(d)) != NULL) {
|
||||
|
||||
// We only want "DT_REG"ular Files, but reportedly some FS and OSes gives DT_UNKNOWN as type.
|
||||
if ((file->d_type == DT_UNKNOWN || file->d_type == DT_REG) &&
|
||||
(extensionLen == 0 || strncmp(&file->d_name[strlen(file->d_name) - extensionLen], finddata->extension, extensionLen) == 0)) {
|
||||
|
||||
sprintf(relativepath, "%s/%s", finddata->folder, file->d_name);
|
||||
realpath(relativepath, path);
|
||||
stat(path, &fileStats);
|
||||
strncpy(finddata->cFileName, file->d_name, sizeof(finddata->cFileName));
|
||||
finddata->ftLastWriteTime = fileStats.st_mtime;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void GetDateFormat(int unused1, int unused2, SYSTEMTIME* in, int unused3, char* out, int size) {
|
||||
tm linuxTime;
|
||||
linuxTime.tm_year = in->wYear - 1900;
|
||||
linuxTime.tm_mon = in->wMonth - 1;
|
||||
linuxTime.tm_wday = in->wDayOfWeek;
|
||||
linuxTime.tm_mday = in->wDay;
|
||||
linuxTime.tm_hour = in->wHour;
|
||||
linuxTime.tm_min = in->wMinute;
|
||||
linuxTime.tm_sec = in->wSecond;
|
||||
strftime(out, size, nl_langinfo(D_FMT), &linuxTime);
|
||||
}
|
||||
|
||||
void FileTimeToSystemTime(time_t* writeTime, SYSTEMTIME* out) {
|
||||
tm *ptm = gmtime(writeTime);
|
||||
tmToSystemTime(ptm, out);
|
||||
}
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue