[#13087] importing forwardable — "Akinori MUSHA" <knu@...>

 石塚さんの forwardable.rb を標準添付ライブラリにするべく、

11 messages 2001/05/02

[#13169] SizedQueue#pop causes deadlock — "Okada Jun" <yun@...>

岡田です。

18 messages 2001/05/13
[#13171] Re: SizedQueue#pop causes deadlock — "Akinori MUSHA" <knu@...> 2001/05/13

At Sun, 13 May 2001 14:11:18 +0900,

[#13176] Re: SizedQueue#pop causes deadlock — matz@... (Yukihiro Matsumoto) 2001/05/13

まつもと ゆきひろです

[#13177] Re: SizedQueue#pop causes deadlock — "Akinori MUSHA" <knu@...> 2001/05/13

At Mon, 14 May 2001 00:24:45 +0900,

[#13187] Re: SizedQueue#pop causes deadlock — matz@... (Yukihiro Matsumoto) 2001/05/13

まつもと ゆきひろです

[#13202] Re: [ruby-list:29672] Re: Enumerator — "Akinori MUSHA" <knu@...>

 ruby-dev に移ります。

26 messages 2001/05/15
[#13208] Re: [ruby-list:29672] Re: Enumerator — matz@... (Yukihiro Matsumoto) 2001/05/15

まつもと ゆきひろです

[#13259] Enumerator -- Round 2 — "Akinori MUSHA" <knu@...>

 もう一度、 Enumerable/Enumerator についてみなさんのご意見を

29 messages 2001/05/20
[#13260] Re: Enumerator -- Round 2 — matz@... (Yukihiro Matsumoto) 2001/05/20

まつもと ゆきひろです

[#13265] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/21

At Mon, 21 May 2001 06:04:32 +0900,

[#13268] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/21

原です。

[#13270] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/21

At Mon, 21 May 2001 15:00:11 +0900,

[#13289] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/22

原です。

[#13290] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/22

At Tue, 22 May 2001 19:02:10 +0900,

[#13291] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/22

原です。

[#13293] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/22

At Tue, 22 May 2001 20:57:02 +0900,

[#13305] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/24

原です。

[#13322] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/24

At Thu, 24 May 2001 15:44:14 +0900,

[#13277] ext/dbm in ruby 1.7 — Kazuhiro NISHIYAMA <zn@...>

ruby 1.7のext/dbmですが、

16 messages 2001/05/21
[#13280] Re: ext/dbm in ruby 1.7 — matz@... (Yukihiro Matsumoto) 2001/05/21

まつもと ゆきひろです

[#13292] Integer("X") rescue -1 が parse error — YASUI Kentarow <kenyasui@...>

安井です。

18 messages 2001/05/22
[#13294] Re: Integer("X") rescue -1 が parse error — matz@... (Yukihiro Matsumoto) 2001/05/22

まつもと ゆきひろです

[#13295] Re: Integer("X") rescue -1 が parse error — "Akinori MUSHA" <knu@...> 2001/05/23

At Wed, 23 May 2001 08:59:50 +0900,

[#13300] 1.6.4 preview3 (Re: Re: Integer("X") rescue -1 が parse error) — matz@... (Yukihiro Matsumoto) 2001/05/24

[#13304] Re: 1.6.4 preview3 (Re: Re: Integer("X") rescue -1 が parse error) — "Akinori MUSHA" <knu@...> 2001/05/24

At Thu, 24 May 2001 14:15:04 +0900,

[#13428] mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

19 messages 2001/05/31
[#13435] Re: mswin32/ming32 system patch (experimental) — nobu.nakada@... 2001/06/01

なかだです。

[#13442] Re: mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...> 2001/06/01

こんにちは、なかむら(う)です。

[#13446] Re: mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...> 2001/06/02

こんにちは、なかむら(う)です。

[#13450] Re: mswin32/ming32 system patch (experimental) — nobu.nakada@... 2001/06/04

なかだです。

[ruby-dev:13356] trivial fixes for dir.c

From: "Akinori MUSHA" <knu@...>
Date: 2001-05-27 06:27:58 UTC
List: ruby-dev #13356
 dir.c の修正です。外からは見えないことですが、機能追加しようと
したときに見つけたので。

- PERIOD() マクロのバグを修正。FNM_PERIOD と FNM_PATHNAME を
  両方指定したときの foo/.bar の扱いがおかしかった。

- ISDIRSEP() マクロを用意してちょっと楽にした。

- has_magic() が flags を理解するようにし、 glob_helper() の
  フラグに FNM_NOESCAPE を与えたときちゃんと効くようにした。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"Freeze this moment a little bit longer, make each impression
  a little bit stronger..  Experience slips away -- Time stand still"

Index: dir.c
===================================================================
RCS file: /src/ruby/dir.c,v
retrieving revision 1.46
diff -u -r1.46 dir.c
--- dir.c	2001/05/16 09:05:49	1.46
+++ dir.c	2001/05/27 06:22:36
@@ -130,8 +130,9 @@
     return 0;
 }
 
+#define ISDIRSEP(c) (pathname && isdirsep(c))
 #define PERIOD(s) (period && *(s) == '.' && \
-		  ((s) == string || pathname && isdirsep(*(s))))
+		  ((s) == string || ISDIRSEP((s)[-1])))
 static int
 fnmatch(pat, string, flags)
     const char *pat;
@@ -149,7 +150,7 @@
     while (c = *pat++) {
 	switch (c) {
 	case '?':
-	    if (!*s || pathname && isdirsep(*s) || PERIOD(s))
+	    if (!*s || ISDIRSEP(*s) || PERIOD(s))
 		return FNM_NOMATCH;
 	    s++;
 	    break;
@@ -166,7 +167,7 @@
 		else
 		    return 0;
 	    }
-	    else if (pathname && isdirsep(c)) {
+	    else if (ISDIRSEP(c)) {
 		s = find_dirsep(s);
 		if (s)
 		    break;
@@ -180,14 +181,14 @@
 		if ((c == '[' || downcase(*s) == test) &&
 		    !fnmatch(pat, s, flags & ~FNM_PERIOD))
 		    return 0;
-		else if (pathname && isdirsep(*s))
+		else if (ISDIRSEP(*s))
 		    break;
 		s++;
 	    }
 	    return FNM_NOMATCH;
       
 	case '[':
-	    if (!*s || pathname && isdirsep(*s) || PERIOD(s))
+	    if (!*s || ISDIRSEP(*s) || PERIOD(s))
 		return FNM_NOMATCH;
 	    pat = range(pat, *s, flags);
 	    if (!pat)
@@ -211,7 +212,7 @@
 
 	default:
 #if defined DOSISH
-	    if (pathname && isdirsep(c) && isdirsep(*s))
+	    if (ISDIRSEP(c) && isdirsep(*s))
 		;
 	    else
 #endif
@@ -522,12 +523,14 @@
 
 /* Return nonzero if S has any special globbing chars in it.  */
 static int
-has_magic(s, send)
+has_magic(s, send, flags)
      char *s, *send;
+     int flags;
 {
     register char *p = s;
     register char c;
     int open = 0;
+    int escape = !(flags & FNM_NOESCAPE);
 
     while ((c = *p++) != '\0') {
 	switch (c) {
@@ -544,7 +547,7 @@
 	    continue;
 
 	  case '\\':
-	    if (*p++ == '\0')
+	    if (escape && *p++ == '\0')
 		return Qfalse;
 	}
 
@@ -610,16 +613,16 @@
 #endif
 
 static void
-glob_helper(path, flag, func, arg)
+glob_helper(path, flags, func, arg)
     char *path;
-    int flag;
+    int flags;
     void (*func)();
     VALUE arg;
 {
     struct stat st;
     char *p, *m;
 
-    if (!has_magic(path, 0)) {
+    if (!has_magic(path, 0, flags)) {
 	remove_backslashes(path);
 	if (stat(path, &st) == 0) {
 	    (*func)(path, arg);
@@ -636,7 +639,7 @@
     while (p) {
 	if (*p == '/') p++;
 	m = strchr(p, '/');
-	if (has_magic(p, m)) {
+	if (has_magic(p, m, flags)) {
 	    char *dir, *base, *magic, *buf;
 	    DIR *dirp;
 	    struct dirent *dp;
@@ -662,7 +665,7 @@
 		    recursive = 1;
 		    buf = ALLOC_N(char, strlen(base)+strlen(m)+3);
 		    sprintf(buf, "%s%s", base, *base ? m : m+1);
-		    glob_helper(buf, flag, func, arg);
+		    glob_helper(buf, flags, func, arg);
 		    free(buf);
 		}
 		dirp = opendir(dir);
@@ -696,12 +699,12 @@
 		    if (S_ISDIR(st.st_mode)) {
 		        strcat(buf, "/**");
 			strcat(buf, m);
-			glob_helper(buf, flag, func, arg);
+			glob_helper(buf, flags, func, arg);
 		    }
 		    free(buf);
 		    continue;
 		}
-		if (fnmatch(magic, dp->d_name, flag) == 0) {
+		if (fnmatch(magic, dp->d_name, flags) == 0) {
 		    buf = ALLOC_N(char, strlen(base)+NAMLEN(dp)+2);
 		    sprintf(buf, "%s%s%s", base, (BASE)?"/":"", dp->d_name);
 		    if (!m) {
@@ -727,7 +730,7 @@
 			    char *t = ALLOC_N(char, len+mlen+1);
 
 			    sprintf(t, "%s%s", link->path, m);
-			    glob_helper(t, flag, func, arg);
+			    glob_helper(t, flags, func, arg);
 			    free(t);
 			}
 			tmp = link;
@@ -849,7 +852,7 @@
     VALUE dir, str;
 {
     char *p, *pend;
-    char buffer[MAXPATHLEN], *buf = buffer;
+    char buffer[MAXPATHLEN], *buf;
     char *t;
     int nest;
     VALUE ary = 0;
@@ -860,6 +863,8 @@
     }
     if (RSTRING(str)->len >= MAXPATHLEN) {
 	buf = xmalloc(RSTRING(str)->len + 1);
+    } else {
+	buf = buffer;
     }
 
     p = RSTRING(str)->ptr;

In This Thread

Prev Next