#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