ruby-changes:5286
From: nobu <ko1@a...>
Date: Tue, 3 Jun 2008 16:06:46 +0900 (JST)
Subject: [ruby-changes:5286] Ruby:r16785 (trunk, ruby_1_8): * file.c (file_expand_path): fix for non-existent files and SFN of
nobu 2008-06-03 16:06:23 +0900 (Tue, 03 Jun 2008)
New Revision: 16785
Modified files:
branches/ruby_1_8/ChangeLog
branches/ruby_1_8/file.c
trunk/ChangeLog
trunk/file.c
Log:
* file.c (file_expand_path): fix for non-existent files and SFN of
symlinks. [ruby-talk:303736]
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/file.c?r1=16785&r2=16784&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=16785&r2=16784&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16785&r2=16784&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/file.c?r1=16785&r2=16784&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 16784)
+++ ChangeLog (revision 16785)
@@ -1,3 +1,8 @@
+Tue Jun 3 16:06:09 2008 Nobuyoshi Nakada <nobu@r...>
+
+ * file.c (file_expand_path): fix for non-existent files and SFN of
+ symlinks. [ruby-talk:303736]
+
Tue Jun 3 15:12:01 2008 Akinori MUSHA <knu@i...>
* lib/set.rb (Set#classify): Back out the `group_by' alias.
Index: file.c
===================================================================
--- file.c (revision 16784)
+++ file.c (revision 16785)
@@ -2830,57 +2830,54 @@
#if USE_NTFS
*p = '\0';
- if (1 &&
-#ifdef __CYGWIN__
- !(buf[0] == '/' && !buf[1]) &&
-#endif
- !strpbrk(b = buf, "*?")) {
+ if (*(s = skipprefix(b = buf)) && !strpbrk(s, "*?")) {
size_t len;
WIN32_FIND_DATA wfd;
#ifdef __CYGWIN__
int lnk_added = 0, is_symlink = 0;
struct stat st;
- char w32buf[MAXPATHLEN], sep = 0;
- p = 0;
+ char w32buf[MAXPATHLEN];
+ p = strrdirsep(s);
if (lstat(buf, &st) == 0 && S_ISLNK(st.st_mode)) {
is_symlink = 1;
- p = strrdirsep(buf);
- if (!p) p = skipprefix(buf);
- if (p) {
- sep = *p;
- *p = '\0';
- }
+ *p = '\0';
}
- if (cygwin_conv_to_win32_path(buf, w32buf) == 0) {
+ if (cygwin_conv_to_win32_path((*buf ? buf : "/"), w32buf) == 0) {
b = w32buf;
}
- if (p) *p = sep;
- else p = buf;
if (is_symlink && b == w32buf) {
+ *p = '\\';
+ strlcat(w32buf, p, sizeof(w32buf));
len = strlen(p);
if (len > 4 && STRCASECMP(p + len - 4, ".lnk") != 0) {
lnk_added = 1;
strlcat(w32buf, ".lnk", sizeof(w32buf));
}
}
+ *p = '/';
#endif
HANDLE h = FindFirstFile(b, &wfd);
if (h != INVALID_HANDLE_VALUE) {
FindClose(h);
- p = strrdirsep(buf);
len = strlen(wfd.cFileName);
#ifdef __CYGWIN__
if (lnk_added && len > 4 &&
STRCASECMP(wfd.cFileName + len - 4, ".lnk") == 0) {
wfd.cFileName[len -= 4] = '\0';
}
+#else
+ p = strrdirsep(s);
#endif
- if (!p) p = buf;
- else ++p;
+ ++p;
BUFCHECK(bdiff + len >= buflen);
memcpy(p, wfd.cFileName, len + 1);
p += len;
}
+#ifdef __CYGWIN__
+ else {
+ p += strlen(p);
+ }
+#endif
}
#endif
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog (revision 16784)
+++ ruby_1_8/ChangeLog (revision 16785)
@@ -1,3 +1,8 @@
+Tue Jun 3 16:06:09 2008 Nobuyoshi Nakada <nobu@r...>
+
+ * file.c (file_expand_path): fix for non-existent files and SFN of
+ symlinks. [ruby-talk:303736]
+
Tue Jun 3 15:06:33 2008 Akinori MUSHA <knu@i...>
* lib/set.rb (Set#delete_if, Set#collect!, Set#reject!)
Index: ruby_1_8/file.c
===================================================================
--- ruby_1_8/file.c (revision 16784)
+++ ruby_1_8/file.c (revision 16785)
@@ -2746,57 +2746,54 @@
#if USE_NTFS
*p = '\0';
- if (1 &&
-#ifdef __CYGWIN__
- !(buf[0] == '/' && !buf[1]) &&
-#endif
- !strpbrk(b = buf, "*?")) {
+ if (*(s = skipprefix(b = buf)) && !strpbrk(s, "*?")) {
size_t len;
WIN32_FIND_DATA wfd;
#ifdef __CYGWIN__
int lnk_added = 0, is_symlink = 0;
struct stat st;
- char w32buf[MAXPATHLEN], sep = 0;
- p = 0;
+ char w32buf[MAXPATHLEN];
+ p = strrdirsep(s);
if (lstat(buf, &st) == 0 && S_ISLNK(st.st_mode)) {
is_symlink = 1;
- p = strrdirsep(buf);
- if (!p) p = skipprefix(buf);
- if (p) {
- sep = *p;
- *p = '\0';
- }
+ *p = '\0';
}
- if (cygwin_conv_to_win32_path(buf, w32buf) == 0) {
+ if (cygwin_conv_to_win32_path((*buf ? buf : "/"), w32buf) == 0) {
b = w32buf;
}
- if (p) *p = sep;
- else p = buf;
if (is_symlink && b == w32buf) {
+ *p = '\\';
+ strlcat(w32buf, p, sizeof(w32buf));
len = strlen(p);
if (len > 4 && strcasecmp(p + len - 4, ".lnk") != 0) {
lnk_added = 1;
strlcat(w32buf, ".lnk", sizeof(w32buf));
}
}
+ *p = '/';
#endif
HANDLE h = FindFirstFile(b, &wfd);
if (h != INVALID_HANDLE_VALUE) {
FindClose(h);
- p = strrdirsep(buf);
len = strlen(wfd.cFileName);
#ifdef __CYGWIN__
if (lnk_added && len > 4 &&
strcasecmp(wfd.cFileName + len - 4, ".lnk") == 0) {
wfd.cFileName[len -= 4] = '\0';
}
+#else
+ p = strrdirsep(s);
#endif
- if (!p) p = buf;
++p;
BUFCHECK(bdiff + len >= buflen);
memcpy(p, wfd.cFileName, len + 1);
p += len;
}
+#ifdef __CYGWIN__
+ else {
+ p += strlen(p);
+ }
+#endif
}
#endif
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/