зеркало из https://github.com/github/ruby.git
* file.c (file_expand_path): ignore dname if it has different
drive letter or UNC. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26948 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
dcff8e84d3
Коммит
b215b9742e
|
@ -1,3 +1,8 @@
|
|||
Tue Mar 16 11:23:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* file.c (file_expand_path): ignore dname if it has different
|
||||
drive letter or UNC.
|
||||
|
||||
Tue Mar 16 07:16:56 2010 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* tool/transcode-tblgen.rb: redundant loop removed.
|
||||
|
|
21
file.c
21
file.c
|
@ -2518,6 +2518,12 @@ static const char file_alt_separator[] = {FILE_ALT_SEPARATOR, '\0'};
|
|||
# define CharNext(p) ((p) + 1)
|
||||
#endif
|
||||
|
||||
#if defined(DOSISH_UNC)
|
||||
#define has_unc(buf) (isdirsep((buf)[0]) && isdirsep((buf)[1]))
|
||||
#else
|
||||
#define has_unc(buf) 0
|
||||
#endif
|
||||
|
||||
#ifdef DOSISH_DRIVE_LETTER
|
||||
static inline int
|
||||
has_drive_letter(const char *buf)
|
||||
|
@ -2556,6 +2562,19 @@ getcwdofdrv(int drv)
|
|||
}
|
||||
return drvcwd;
|
||||
}
|
||||
|
||||
static inline int
|
||||
not_same_drive(VALUE path, int drive)
|
||||
{
|
||||
const char *p = RSTRING_PTR(path);
|
||||
if (RSTRING_LEN(path) < 2) return 0;
|
||||
if (has_drive_letter(p)) {
|
||||
return TOLOWER(p[0]) != TOLOWER(drive);
|
||||
}
|
||||
else {
|
||||
return has_unc(p);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline char *
|
||||
|
@ -2781,7 +2800,7 @@ file_expand_path(VALUE fname, VALUE dname, int abs_mode, VALUE result)
|
|||
else {
|
||||
/* specified drive, but not full path */
|
||||
int same = 0;
|
||||
if (!NIL_P(dname)) {
|
||||
if (!NIL_P(dname) || !not_same_drive(dname, s[0])) {
|
||||
file_expand_path(dname, Qnil, abs_mode, result);
|
||||
BUFINIT();
|
||||
if (has_drive_letter(p) && TOLOWER(p[0]) == TOLOWER(s[0])) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче