[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00282] Re: wildcard expansion problem
- Subject: [FDclone-users:00282] Re: wildcard expansion problem
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Wed, 26 May 2004 00:54:58 +0900
しらいです。
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 動作確認用の問題集を作って
#あったのですが、どさくさに紛れて紛失してしまいまして...。
しらい たかし