mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* file.c (rb_realpath_internal, realpath_rec): skip UNC share root
on DOSISH platforms. http://pc12.2ch.net/test/read.cgi/tech/1272248179/600 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
12b76ec890
commit
e2f4729d42
2 changed files with 22 additions and 4 deletions
|
@ -1,3 +1,9 @@
|
|||
Tue Jun 29 14:18:21 2010 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||
|
||||
* file.c (rb_realpath_internal, realpath_rec): skip UNC share root
|
||||
on DOSISH platforms.
|
||||
http://pc12.2ch.net/test/read.cgi/tech/1272248179/600
|
||||
|
||||
Tue Jun 29 11:52:33 2010 Narihiro Nakamura <authorNari@gmail.com>
|
||||
|
||||
* gc.c (unlink_heap_slot, slot_sweep): unlink heaps_slot of
|
||||
|
|
20
file.c
20
file.c
|
@ -2699,6 +2699,18 @@ rb_path_skip_prefix(const char *path)
|
|||
return (char *)path;
|
||||
}
|
||||
|
||||
static inline char *
|
||||
skipprefixroot(const char *path)
|
||||
{
|
||||
#if defined(DOSISH_UNC) || defined(DOSISH_DRIVE_LETTER)
|
||||
char *p = skipprefix(path);
|
||||
while (isdirsep(*p)) p++;
|
||||
return p;
|
||||
#else
|
||||
return skiproot(path);
|
||||
#endif
|
||||
}
|
||||
|
||||
#define strrdirsep rb_path_last_separator
|
||||
char *
|
||||
rb_path_last_separator(const char *path)
|
||||
|
@ -3247,7 +3259,7 @@ realpath_rec(long *prefixlenp, VALUE *resolvedp, char *unresolved, VALUE loopche
|
|||
rb_hash_aset(loopcheck, testpath, ID2SYM(resolving));
|
||||
link = rb_file_s_readlink(rb_cFile, testpath);
|
||||
link_prefix = RSTRING_PTR(link);
|
||||
link_names = skiproot(link_prefix);
|
||||
link_names = skipprefixroot(link_prefix);
|
||||
link_prefixlen = link_names - link_prefix;
|
||||
if (link_prefixlen == 0) {
|
||||
realpath_rec(prefixlenp, resolvedp, link_names, loopcheck, strict, *unresolved_firstsep == '\0');
|
||||
|
@ -3294,7 +3306,7 @@ rb_realpath_internal(VALUE basedir, VALUE path, int strict)
|
|||
}
|
||||
|
||||
ptr = RSTRING_PTR(unresolved_path);
|
||||
path_names = skiproot(ptr);
|
||||
path_names = skipprefixroot(ptr);
|
||||
if (ptr != path_names) {
|
||||
resolved = rb_enc_str_new(ptr, path_names - ptr,
|
||||
rb_enc_get(unresolved_path));
|
||||
|
@ -3303,7 +3315,7 @@ rb_realpath_internal(VALUE basedir, VALUE path, int strict)
|
|||
|
||||
if (!NIL_P(basedir)) {
|
||||
ptr = RSTRING_PTR(basedir);
|
||||
basedir_names = skiproot(ptr);
|
||||
basedir_names = skipprefixroot(ptr);
|
||||
if (ptr != basedir_names) {
|
||||
resolved = rb_enc_str_new(ptr, basedir_names - ptr,
|
||||
rb_enc_get(basedir));
|
||||
|
@ -3313,7 +3325,7 @@ rb_realpath_internal(VALUE basedir, VALUE path, int strict)
|
|||
|
||||
curdir = rb_dir_getwd();
|
||||
ptr = RSTRING_PTR(curdir);
|
||||
curdir_names = skiproot(ptr);
|
||||
curdir_names = skipprefixroot(ptr);
|
||||
resolved = rb_enc_str_new(ptr, curdir_names - ptr, rb_enc_get(curdir));
|
||||
|
||||
root_found:
|
||||
|
|
Loading…
Add table
Reference in a new issue