diff options
Diffstat (limited to 'file.c')
-rw-r--r-- | file.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -2367,9 +2367,8 @@ rb_path_last_separator(const char *path) return last; } -#define chompdirsep rb_path_end -char * -rb_path_end(const char *path) +static char * +chompdirsep(const char *path) { while (*path) { if (isdirsep(*path)) { @@ -2384,6 +2383,13 @@ rb_path_end(const char *path) return (char *)path; } +char * +rb_path_end(const char *path) +{ + if (isdirsep(*path)) path++; + return chompdirsep(path); +} + #define BUFCHECK(cond) do {\ long bdiff = p - buf;\ while (cond) {\ @@ -2752,7 +2758,7 @@ rb_file_s_basename(int argc, VALUE *argv) static VALUE rb_file_s_dirname(VALUE klass, VALUE fname) { - char *name, *root, *p; + const char *name, *root, *p; VALUE dirname; name = StringValueCStr(fname); @@ -2772,8 +2778,9 @@ rb_file_s_dirname(VALUE klass, VALUE fname) return rb_str_new2("."); #ifdef DOSISH_DRIVE_LETTER if (has_drive_letter(name) && isdirsep(*(name + 2))) { + const char *top = skiproot(name + 2); dirname = rb_str_new(name, 3); - rb_str_cat(dirname, skiproot(name + 2), p - skiproot(name + 2)); + rb_str_cat(dirname, top, p - top); } else #endif |