ruby-changes:8679
From: nobu <ko1@a...>
Date: Tue, 11 Nov 2008 23:54:39 +0900 (JST)
Subject: [ruby-changes:8679] Ruby:r20214 (ruby_1_8): * eval.c (rb_feature_p): returns found feature name if loading.
nobu 2008-11-11 23:54:14 +0900 (Tue, 11 Nov 2008) New Revision: 20214 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20214 Log: * eval.c (rb_feature_p): returns found feature name if loading. [ruby-core:19798] * eval.c (search_required): ditto. Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/eval.c Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 20213) +++ ruby_1_8/ChangeLog (revision 20214) @@ -1,3 +1,10 @@ +Tue Nov 11 23:54:12 2008 Nobuyoshi Nakada <nobu@r...> + + * eval.c (rb_feature_p): returns found feature name if loading. + [ruby-core:19798] + + * eval.c (search_required): ditto. + Tue Nov 11 17:51:30 2008 NAKAMURA Usaku <usa@r...> * win32/win32.c (rb_w32_accept): secure fd before accept because if Index: ruby_1_8/eval.c =================================================================== --- ruby_1_8/eval.c (revision 20213) +++ ruby_1_8/eval.c (revision 20214) @@ -7123,16 +7123,16 @@ 0 }; -static int rb_feature_p _((const char *, const char *, int)); +static int rb_feature_p _((const char **, const char *, int)); static int search_required _((VALUE, VALUE *, VALUE *)); static int -rb_feature_p(feature, ext, rb) - const char *feature, *ext; +rb_feature_p(ftptr, ext, rb) + const char **ftptr, *ext; int rb; { VALUE v; - const char *f, *e; + const char *f, *e, *feature = *ftptr; long i, len, elen; if (ext) { @@ -7150,18 +7150,21 @@ continue; if (!*(e = f + len)) { if (ext) continue; + *ftptr = 0; return 'u'; } if (*e != '.') continue; if ((!rb || !ext) && (IS_SOEXT(e) || IS_DLEXT(e))) { + *ftptr = 0; return 's'; } if ((rb || !ext) && (strcmp(e, ".rb") == 0)) { + *ftptr = 0; return 'r'; } } if (loading_tbl) { - if (st_lookup(loading_tbl, (st_data_t)feature, 0)) { + if (st_lookup(loading_tbl, (st_data_t)feature, (st_data_t *)ftptr)) { if (!ext) return 'u'; return strcmp(ext, ".rb") ? 's' : 'r'; } @@ -7173,7 +7176,7 @@ MEMCPY(buf, feature, char, len); for (i = 0; (e = loadable_ext[i]) != 0; i++) { strncpy(buf + len, e, DLEXT_MAXLEN + 1); - if (st_lookup(loading_tbl, (st_data_t)buf, 0)) { + if (st_lookup(loading_tbl, (st_data_t)buf, (st_data_t *)ftptr)) { return i ? 's' : 'r'; } } @@ -7181,6 +7184,7 @@ } return 0; } +#define rb_feature_p(feature, ext, rb) rb_feature_p(&feature, ext, rb) int rb_provided(feature) @@ -7289,7 +7293,7 @@ VALUE fname, *featurep, *path; { VALUE tmp; - char *ext, *ftptr; + const char *ext, *ftptr; int type; *featurep = fname; @@ -7297,12 +7301,18 @@ ext = strrchr(ftptr = RSTRING_PTR(fname), '.'); if (ext && !strchr(ext, '/')) { if (strcmp(".rb", ext) == 0) { - if (rb_feature_p(ftptr, ext, Qtrue)) return 'r'; + if (rb_feature_p(ftptr, ext, Qtrue)) { + if (ftptr) *path = rb_str_new2(ftptr); + return 'r'; + } if ((*path = rb_find_file(fname)) != 0) return 'r'; return 0; } else if (IS_SOEXT(ext)) { - if (rb_feature_p(ftptr, ext, Qfalse)) return 's'; + if (rb_feature_p(ftptr, ext, Qfalse)) { + if (ftptr) *path = rb_str_new2(ftptr); + return 's'; + } tmp = rb_str_new(RSTRING_PTR(fname), ext-RSTRING_PTR(fname)); *featurep = tmp; #ifdef DLEXT2 @@ -7321,7 +7331,10 @@ #endif } else if (IS_DLEXT(ext)) { - if (rb_feature_p(ftptr, ext, Qfalse)) return 's'; + if (rb_feature_p(ftptr, ext, Qfalse)) { + if (ftptr) *path = rb_str_new2(ftptr); + return 's'; + } if ((*path = rb_find_file(fname)) != 0) return 's'; } } @@ -7330,13 +7343,16 @@ *featurep = tmp; switch (type) { case 0: - ftptr = RSTRING_PTR(tmp); - return rb_feature_p(ftptr, 0, Qfalse); + type = rb_feature_p(ftptr, 0, Qfalse); + if (type && ftptr) *path = rb_str_new2(ftptr); + return type; default: ext = strrchr(ftptr = RSTRING(tmp)->ptr, '.'); - if (rb_feature_p(ftptr, ext, !--type)) break; - *path = rb_find_file(tmp); + if (!rb_feature_p(ftptr, ext, !--type)) + *path = rb_find_file(tmp); + else if (ftptr) + *path = rb_str_new2(ftptr); } return type ? 's' : 'r'; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/