summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'file.c')
-rw-r--r--file.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/file.c b/file.c
index c6a0544cd9..94f1ecb628 100644
--- a/file.c
+++ b/file.c
@@ -1330,19 +1330,20 @@ rb_file_s_basename(argc, argv)
name = STR2CSTR(fname);
p = strrchr(name, '/');
if (!p) {
- if (!NIL_P(fext)) {
- f = rmext(name, ext);
- if (f) return rb_str_new(name, f);
- }
- return fname;
+ if (NIL_P(fext) || !(f = rmext(p, ext)))
+ return fname;
+ basename = rb_str_new(p, f);
}
- p++; /* skip last `/' */
- if (!NIL_P(fext)) {
- f = rmext(p, ext);
- if (f) return rb_str_new(p, f);
+ else {
+ p++; /* skip last `/' */
+ if (NIL_P(fext) || !(f = rmext(p, ext))) {
+ basename = rb_str_new2(p);
+ }
+ else {
+ basename = rb_str_new(p, f);
+ }
}
- basename = rb_str_new2(p);
- if (OBJ_TAINTED(fname)) OBJ_TAINT(basename);
+ OBJ_INFECT(basename, fname);
return basename;
}