| /** | |
| * This file has no copyright assigned and is placed in the Public Domain. | |
| * This file is part of the mingw-w64 runtime package. | |
| * No warranty is given; refer to the file DISCLAIMER.PD within this package. | |
| */ | |
| #include "filetime_to_time64.h" | |
| #define win32_find_data_to_crt_find_data(success, win32_find_data, crt_find_data) do { \ | |
| if (!(success)) { \ | |
| switch (GetLastError()) { \ | |
| case ERROR_FILE_NOT_FOUND: \ | |
| case ERROR_PATH_NOT_FOUND: \ | |
| case ERROR_NO_MORE_FILES: \ | |
| errno = ENOENT; \ | |
| break; \ | |
| case ERROR_NOT_ENOUGH_MEMORY: \ | |
| errno = ENOMEM; \ | |
| break; \ | |
| default: \ | |
| errno = EINVAL; \ | |
| break; \ | |
| } \ | |
| } else { \ | |
| (crt_find_data)->attrib = (win32_find_data)->dwFileAttributes == FILE_ATTRIBUTE_NORMAL ? 0 : (win32_find_data)->dwFileAttributes; \ | |
| (crt_find_data)->time_create = filetime_to_time64(&(win32_find_data)->ftCreationTime); \ | |
| (crt_find_data)->time_access = filetime_to_time64(&(win32_find_data)->ftLastAccessTime); \ | |
| (crt_find_data)->time_write = filetime_to_time64(&(win32_find_data)->ftLastWriteTime); \ | |
| (crt_find_data)->size = ((unsigned long long)(win32_find_data)->nFileSizeHigh << 32) | (win32_find_data)->nFileSizeLow; \ | |
| _Static_assert(sizeof((crt_find_data)->name) == sizeof((win32_find_data)->cFileName), "mismatch size of CRT finddata's name and WIN32_FIND_DATA's cFileName"); \ | |
| memcpy((crt_find_data)->name, (win32_find_data)->cFileName, sizeof((crt_find_data)->name)); \ | |
| } \ | |
| } while (0) |