mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 13:04:13 +02:00
* win32/win32.c (win32_stat): UNC support.
* dir.c (extract_path): fix "./*" problem. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1264 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1f904eed44
commit
a84d087d3c
5 changed files with 39 additions and 25 deletions
|
@ -2668,23 +2668,29 @@ myrename(const char *oldpath, const char *newpath)
|
|||
int
|
||||
win32_stat(const char *path, struct stat *st)
|
||||
{
|
||||
const char *p = path;
|
||||
int ret;
|
||||
const char *p;
|
||||
char *buf1 = ALLOCA_N(char, strlen(path) + 1);
|
||||
char *buf2 = ALLOCA_N(char, MAXPATHLEN);
|
||||
char *s;
|
||||
int len;
|
||||
|
||||
if ((isdirsep(*p) && (p++, TRUE)) || /* absolute path or UNC */
|
||||
(ISALPHA(*p) && p[1] == ':' && (p += 2, TRUE))) { /* has drive */
|
||||
if (isdirsep(*p)) p++;
|
||||
for (p = path, s = buf1; *p; p++, s++) {
|
||||
if (*p == '/')
|
||||
*s = '\\';
|
||||
else
|
||||
*s = *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;
|
||||
}
|
||||
RUBY_CRITICAL(ret = stat(path, st));
|
||||
return ret;
|
||||
*s = '\0';
|
||||
len = strlen(buf1);
|
||||
p = CharPrev(buf1, buf1 + len);
|
||||
if (*p == '\\' || *p == ':')
|
||||
strcat(buf1, ".");
|
||||
else if (buf1[0] == '\\' && buf1[1] == '\\')
|
||||
strcat(buf1, "\\.");
|
||||
if (_fullpath(buf2, buf1, MAXPATHLEN))
|
||||
return stat(buf2, st);
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
static long
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue