UTF-8-safe stat: wide API on Windows, regular stat on POSIX. */
| 731 | |
| 732 | /* UTF-8-safe stat: wide API on Windows, regular stat on POSIX. */ |
| 733 | static int wide_stat(const char *path, struct stat *st) { |
| 734 | #ifdef _WIN32 |
| 735 | wchar_t *wpath = cbm_path_to_wide(path); |
| 736 | if (!wpath) { |
| 737 | return CBM_NOT_FOUND; |
| 738 | } |
| 739 | struct _stat64 wst; |
| 740 | int ret = _wstat64(wpath, &wst); |
| 741 | free(wpath); |
| 742 | if (ret != 0) { |
| 743 | return CBM_NOT_FOUND; |
| 744 | } |
| 745 | st->st_mode = wst.st_mode; |
| 746 | st->st_size = wst.st_size; |
| 747 | st->st_mtime = wst.st_mtime; |
| 748 | return 0; |
| 749 | #else |
| 750 | return stat(path, st); |
| 751 | #endif |
| 752 | } |
| 753 | |
| 754 | /* Stat a path, skipping symlinks (POSIX) and junctions / reparse points |
| 755 | * (Windows). Returns 0 on success, -1 to skip. Skipping reparse points keeps |
no test coverage detected