summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-02-09 15:02:14 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-02-09 15:02:14 +0000
commit08f8ab9c37e995d5a7e4060b0b1497c37a437750 (patch)
tree32a348c99c65875729f5f1f37f496cd15ac4811f /win32
parentb4ea8ddcdd86cdfaf48e3217ef02a7530827232f (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.c21
-rw-r--r--win32/win32.h2
2 files changed, 23 insertions, 0 deletions
diff --git a/win32/win32.c b/win32/win32.c
index 3fcef7c..dd6597e 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 ebffc5c..ffbe967 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__