diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-02-09 15:02:14 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-02-09 15:02:14 +0000 |
commit | 08f8ab9c37e995d5a7e4060b0b1497c37a437750 (patch) | |
tree | 32a348c99c65875729f5f1f37f496cd15ac4811f /win32 | |
parent | b4ea8ddcdd86cdfaf48e3217ef02a7530827232f (diff) |
* win32/win32.c (win32_stat): replace stat for enable when pathname
ends with '/' or '\' for mswin32 on Win9X / Win2k.
* win32/win32.h: ditto.
* ruby.h: ditto.
* dir.c (rb_glob_helper): ditto.
* file.c (rb_stat, rb_file_s_stat, eaccess, check3rdbyte): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1173 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'win32')
-rw-r--r-- | win32/win32.c | 21 | ||||
-rw-r--r-- | win32/win32.h | 2 |
2 files changed, 23 insertions, 0 deletions
diff --git a/win32/win32.c b/win32/win32.c index 3fcef7c771..dd6597ea1c 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) { diff --git a/win32/win32.h b/win32/win32.h index ebffc5c8ab..ffbe967703 100644 --- a/win32/win32.h +++ b/win32/win32.h @@ -162,6 +162,8 @@ extern "C++" { #define pclose _pclose #define strcasecmp _stricmp #define strncasecmp _strnicmp +#undef rb_sys_stat +#define rb_sys_stat win32_stat /* these are defined in nt.c */ #ifdef __MINGW32__ |