diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-17 14:54:07 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-17 14:54:07 +0000 |
commit | 04351d95585db8baee7cbcf0cf6939cb3cbeaf6c (patch) | |
tree | 1ba779082e7eaf71fd0e8499847ae9513dcb4595 /file.c | |
parent | 9aceaa1129d18f03891521b6220addf7c9b5388a (diff) | |
download | ruby-04351d95585db8baee7cbcf0cf6939cb3cbeaf6c.tar.gz |
* file.c (file_expand_path): fix for short file name on Cygwin.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r-- | file.c | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -2827,15 +2827,20 @@ file_expand_path(VALUE fname, VALUE dname, VALUE result) #if USE_NTFS *p = '\0'; - if (!strpbrk(b = buf, "*?")) { + if (1 && +#ifdef __CYGWIN__ + !(buf[0] == '/' && !buf[1]) && +#endif + !strpbrk(b = buf, "*?")) { size_t len; WIN32_FIND_DATA wfd; #ifdef __CYGWIN__ - int lnk_added = 0; + int lnk_added = 0, is_symlink = 0; struct stat st; char w32buf[MAXPATHLEN], sep = 0; p = 0; if (lstat(buf, &st) == 0 && S_ISLNK(st.st_mode)) { + is_symlink = 1; p = strrdirsep(buf); if (!p) p = skipprefix(buf); if (p) { @@ -2848,8 +2853,7 @@ file_expand_path(VALUE fname, VALUE dname, VALUE result) } if (p) *p = sep; else p = buf; - if (b == w32buf) { - strlcat(w32buf, p, sizeof(w32buf)); + if (is_symlink && b == w32buf) { len = strlen(p); if (len > 4 && STRCASECMP(p + len - 4, ".lnk") != 0) { lnk_added = 1; |