[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00282] Re: wildcard expansion problem



 しらいです。

In Message-Id <86hdu4lthr.knu@iDaemons.org>
        "Akinori MUSHA" <knu@iDaemons.org>さんwrites:
>  この一連の修正を当てたところ、エスケープのないグロブの展開が
> おかしくなりました。頭にワイルドカードがあってその後にスラッシュが
> 現れるときの挙動が変です。

 前者はともかく後者の壊れ方はひどいですね。前者は「/」で終
わる wild card の展開ミスで、後者は絶対パス表記でない場合の
不具合です。
 こんな感じの修正でどうでしょうか?[FDclone-users:00274] の
patch に対して当てて下さい。

---- Cut Here ----
diff -u old/pathname.c new/pathname.c
--- old/pathname.c	Sun May 23 02:14:10 2004
+++ new/pathname.c	Wed May 26 00:11:07 2004
@@ -1332,7 +1332,14 @@
 	char *cp;
 	int i, n, w, pc, quote, isdir;
 
-	if (!*(wp -> s)) return(argc);
+	if (!*(wp -> s)) {
+		if (!(wp -> fixed.len)) return(argc);
+		*argvp = (char **)realloc2(*argvp,
+			(argc + 2) * sizeof(char *));
+		(*argvp)[argc++] = wp -> fixed.s;
+		wp -> fixed.s = NULL;
+		return(argc);
+	}
 
 	flen = wp -> fixed.len;
 	plen = wp -> path.len;
@@ -1394,24 +1401,15 @@
 			(wp -> s)++;
 		}
 
-		if (*(wp -> s)) {
 #ifndef	NODIRLOOP
-			if (!w) {
-				wp -> ino = (devino_t *)realloc2(wp -> ino,
-					(wp -> nino + 1) * sizeof(devino_t));
-				wp -> ino[wp -> nino].dev = st.st_dev;
-				wp -> ino[(wp -> nino)++].ino = st.st_ino;
-			}
-#endif
-			return(_evalwild(argc, argvp, wp));
+		if (!w) {
+			wp -> ino = (devino_t *)realloc2(wp -> ino,
+				(wp -> nino + 1) * sizeof(devino_t));
+			wp -> ino[wp -> nino].dev = st.st_dev;
+			wp -> ino[(wp -> nino)++].ino = st.st_ino;
 		}
-
-		if (!(wp -> fixed.len)) return(argc);
-		*argvp = (char **)realloc2(*argvp,
-			(argc + 2) * sizeof(char *));
-		(*argvp)[argc++] = wp -> fixed.s;
-		wp -> fixed.s = NULL;
-		return(argc);
+#endif
+		return(_evalwild(argc, argvp, wp));
 	}
 
 	if (w != 2 || !isdir || strcmp(&(wp -> path.s[plen]), "**")) w = -1;
@@ -1447,7 +1445,8 @@
 		regexp_free(re);
 		return(argc);
 	}
-	addstrbuf(&(wp -> path), _SS_, 1);
+	if (wp -> path.len || wp -> fixed.len)
+		addstrbuf(&(wp -> path), _SS_, 1);
 
 	while ((dp = Xreaddir(dirp))) {
 		if (isdotdir(dp -> d_name)) continue;
---- Cut Here ----


>  FreeBSD port にパッチを追加してから気づいた... 戻さねば ;-)

 毎度ご迷惑をおかけしております。

# bash の tests みたいな shell 動作確認用の問題集を作って
#あったのですが、どさくさに紛れて紛失してしまいまして...。

                                               しらい たかし