From 09e1383bcf4cb28a9a55e7d25277194b0222d051 Mon Sep 17 00:00:00 2001 From: usa Date: Wed, 7 Jul 2010 04:22:30 +0000 Subject: * file.c (ruby_find_basename): set correct baselen. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28565 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- file.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'file.c') diff --git a/file.c b/file.c index 63a6ebe61f..94c2468179 100644 --- a/file.c +++ b/file.c @@ -3430,9 +3430,9 @@ rmext(const char *p, long l1, const char *e) } const char * -ruby_find_basename(const char *name, long *len, long *ext) +ruby_find_basename(const char *name, long *baselen, long *alllen) { - const char *p; + const char *p, *q, *e; #if defined DOSISH_DRIVE_LETTER || defined DOSISH_UNC const char *root; #endif @@ -3476,12 +3476,18 @@ ruby_find_basename(const char *name, long *len, long *ext) #else n = chompdirsep(p) - p; #endif + for (q = p; q - p < n && *q == '.'; q++); + for (e = 0; q - p < n; q = CharNext(q)) { + if (*q == '.') e = q; + } + if (e) f = e - p; + else f = n; } - if (len) - *len = f; - if (ext) - *ext = n; + if (baselen) + *baselen = f; + if (alllen) + *alllen = n; return p; } -- cgit v1.2.3