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 | 0095a86b0da752010703b4c97e16a35418a82d69 (patch) | |
tree | 32a348c99c65875729f5f1f37f496cd15ac4811f /win32/win32.c | |
parent | 44ef524a269a50429225bf454868c6b829977334 (diff) | |
download | ruby-0095a86b0da752010703b4c97e16a35418a82d69.tar.gz ruby-0095a86b0da752010703b4c97e16a35418a82d69.tar.xz ruby-0095a86b0da752010703b4c97e16a35418a82d69.zip |
* 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: http://svn.ruby-lang.org/repos/ruby/trunk@1173 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
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) { |