summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-12-24 20:08:12 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-12-24 20:08:12 +0000
commitdaef2a1df2ff7924ee8be3e1fabc5203fca0f649 (patch)
treed61b28bca38ae81ec3c9ad8f62a786150124c054 /eval.c
parentcecdab3bf0e8b03cfdccb20fb5ae82c31fae623b (diff)
* eval.c (search_required): search actual file name once when no
extension specified. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/eval.c b/eval.c
index 839c0c0dd3..72d0641fb5 100644
--- a/eval.c
+++ b/eval.c
@@ -6084,6 +6084,7 @@ search_required(fname, featurep, path)
{
VALUE tmp;
char *ext, *ftptr;
+ int type;
*featurep = fname;
*path = 0;
@@ -6116,24 +6117,22 @@ search_required(fname, featurep, path)
if (*path = rb_find_file(fname)) return 's';
}
}
- if ((ext = rb_feature_p(ftptr, 0, Qfalse)) != 0) {
- return strcmp(ext, ".rb") == 0 ? 'r' : 's';
- }
tmp = fname;
- switch (rb_find_file_ext(&tmp, loadable_ext)) {
+ switch (type = rb_find_file_ext(&tmp, loadable_ext)) {
case 0:
+ if ((ext = rb_feature_p(ftptr, 0, Qfalse))) {
+ type = strcmp(".rb", ext);
+ break;
+ }
return 0;
- case 1:
- *featurep = tmp;
- *path = rb_find_file(tmp);
- return 'r';
-
default:
*featurep = tmp;
+ ext = strrchr(ftptr = RSTRING(tmp)->ptr, '.');
+ if (rb_feature_p(ftptr, ext, !--type)) break;
*path = rb_find_file(tmp);
- return 's';
}
+ return type ? 's' : 'r';
}
static void