1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* dir.c (has_magic): glob names contain alphabets to enable case fold

search also for directories.  fixed: [ruby-talk:201917]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10534 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2006-07-14 16:27:51 +00:00
parent aae4100998
commit 6e2de67565
2 changed files with 32 additions and 5 deletions

View file

@ -1,3 +1,8 @@
Sat Jul 15 01:27:13 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
* dir.c (has_magic): glob names contain alphabets to enable case fold
search also for directories. fixed: [ruby-talk:201917]
Fri Jul 14 13:08:13 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk.rb: add methods for new features of latest Tcl/Tk8.5.
@ -21,7 +26,7 @@ Fri Jul 14 00:10:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
Thu Jul 13 22:23:56 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk/composite.rb: improve handling of the classname on the
* ext/tk/lib/tk/composite.rb: improve handling of the classname on the
option database for the widget class which includes TkComposite.
Thu Jul 13 20:32:19 2006 Kouhei Sutou <kou@cozmixng.org>
@ -40,7 +45,7 @@ Tue Jul 11 20:58:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
Tue Jul 11 19:13:33 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/multi-tk.rb: remove restriction on the class of
* ext/tk/lib/multi-tk.rb: remove restriction on the class of
pseudo-toplevel.
Tue Jul 11 18:00:57 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
@ -98,7 +103,7 @@ Mon Jul 10 13:58:40 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* signal.c (ruby_nativethread_signal, posix_nativethread_signal,
sigsend_to_ruby_thread, install_nativethread_sighandler):
nativethread-support on signal handler. RE-backport from 1.9.
nativethread-support on signal handler. RE-backport from 1.9.
* ruby.h (HAVE_NATIVETHREAD_KILL): ditto.

26
dir.c
View file

@ -67,10 +67,23 @@ char *strchr _((char*,char));
#define lstat stat
#endif
#ifndef CASEFOLD_FILESYSTEM
# if defined DOSISH || defined __VMS
# define CASEFOLD_FILESYSTEM 1
# else
# define CASEFOLD_FILESYSTEM 0
# endif
#endif
#define FNM_NOESCAPE 0x01
#define FNM_PATHNAME 0x02
#define FNM_DOTMATCH 0x04
#define FNM_CASEFOLD 0x08
#if CASEFOLD_FILESYSTEM
#define FNM_SYSCASE FNM_CASEFOLD
#else
#define FNM_SYSCASE 0
#endif
#define FNM_NOMATCH 1
#define FNM_ERROR 2
@ -806,7 +819,7 @@ sys_warning_1(mesg)
rb_sys_warning("%s", mesg);
}
#define GLOB_VERBOSE (1 << (sizeof(int) * CHAR_BIT - 1))
#define GLOB_VERBOSE (1U << (sizeof(int) * CHAR_BIT - 1))
#define sys_warning(val) \
((flags & GLOB_VERBOSE) && rb_protect((VALUE (*)_((VALUE)))sys_warning_1, (VALUE)(val), 0))
@ -819,7 +832,8 @@ has_magic(s, send, flags)
register const char *p = s;
register char c;
int open = 0;
int escape = !(flags & FNM_NOESCAPE);
const int escape = !(flags & FNM_NOESCAPE);
const int nocase = flags & FNM_CASEFOLD;
while ((c = *p++) != '\0') {
switch (c) {
@ -838,6 +852,11 @@ has_magic(s, send, flags)
case '\\':
if (escape && *p++ == '\0')
return Qfalse;
break;
default:
if (!FNM_SYSCASE && ISALPHA(c) && nocase)
return Qtrue;
}
if (send && p >= send) break;
@ -1103,6 +1122,7 @@ ruby_glob(path, flags, func, arg)
int (*func) _((const char *, VALUE));
VALUE arg;
{
flags |= FNM_SYSCASE;
return glob_helper(path, 0, flags & ~GLOB_VERBOSE, func, arg);
}
@ -1143,6 +1163,7 @@ rb_glob2(path, flags, func, arg)
args.func = func;
args.v = arg;
flags |= FNM_SYSCASE;
return glob_helper(path, 0, flags | GLOB_VERBOSE, rb_glob_caller, (VALUE)&args);
}
@ -1582,4 +1603,5 @@ Init_Dir()
rb_file_const("FNM_PATHNAME", INT2FIX(FNM_PATHNAME));
rb_file_const("FNM_DOTMATCH", INT2FIX(FNM_DOTMATCH));
rb_file_const("FNM_CASEFOLD", INT2FIX(FNM_CASEFOLD));
rb_file_const("FNM_SYSCASE", INT2FIX(FNM_SYSCASE));
}