diff options
Diffstat (limited to 'win32/win32.c')
-rw-r--r-- | win32/win32.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/win32/win32.c b/win32/win32.c index 3fcef7c77..dd6597ea1 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -29,6 +29,7 @@ #ifndef index #define index(x, y) strchr((x), (y)) #endif +#define isdirsep(x) ((x) == '/' || (x) == '\\') #ifndef bool #define bool int @@ -2612,6 +2613,26 @@ myrename(const char *oldpath, const char *newpath) return res; } +int +win32_stat(const char *path, struct stat *st) +{ + const char *p = path; + + if ((isdirsep(*p) && (p++, TRUE)) || /* absolute path or UNC */ + (ISALPHA(*p) && p[1] == ':' && (p += 2, TRUE))) { /* has drive */ + if (isdirsep(*p)) p++; + } + if (*p && (p = CharPrev(p, p + strlen(p)), isdirsep(*p))) { + /* Win95/2000 fail with trailing path separator? */ + int len = p - path; + char *s = ALLOCA_N(char, len + 1); + memcpy(s, path, len); + s[len] = '\0'; + path = s; + } + return stat(path, st); +} + static long filetime_to_clock(FILETIME *ft) { |