From sakai @ fan.gr.jp Thu Dec 12 23:48:52 2002 From: sakai @ fan.gr.jp (Hiroto Sakai) Date: Thu, 12 Dec 2002 23:48:52 +0900 Subject: [Lha-users] Ignore dot-files patch Message-ID: <20021212144857.24572@ms-ma.neweb.ne.jp> 坂井と申します。 書庫格納時にドットファイルを無視するオプション(X)を 付加するパッチを書いてみました。 ac20020903 版への差分になっています。 GNU tar の -X のように除外したいファイルを指定できれば よいのでしょうが、面倒だったのでドットファイルを 無視するにとどめています。 Mac OS X では、各ディレクトリにドットファイルが作られます。 また、UFS パーティションではリソースフォークがドット付きの ファイル名で作られるため、アーカイブしてほかのシステムへ データを渡す時にうっとうしい思いをします。 そんなところから作ったものです。 よろしければお使いください。 //// 坂井 浩人 sakai @ fan.gr.jp //////// -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: ac20020903-xopt.diff.gz 型: application/x-gzip サイズ: 813 バイト 説明: 無し URL: http://lists.sourceforge.jp/mailman/archives/lha-users/attachments/20021212/64cdc224/attachment.bin From JCA02266 @ nifty.ne.jp Sat Dec 14 06:56:40 2002 From: JCA02266 @ nifty.ne.jp (Koji Arai) Date: Sat, 14 Dec 2002 06:56:40 +0900 (JST) Subject: [Lha-users] Ignore dot-files patch In-Reply-To: <20021212144857.24572@ms-ma.neweb.ne.jp> References: <20021212144857.24572@ms-ma.neweb.ne.jp> Message-ID: <20021214.065640.109321774.JCA02266@nifty.ne.jp> 新井です。 In message "[Lha-users] Ignore dot-files patch" on Thu, 12 Dec 2002 23:48:52 +0900, Hiroto Sakai wrote: > 坂井と申します。 > > 書庫格納時にドットファイルを無視するオプション(X)を > 付加するパッチを書いてみました。 > ac20020903 版への差分になっています。 ありがとうございます。が、やはりこのまま取り込むには用途が 限定されすぎているように思います。やはり、 > GNU tar の -X のように除外したいファイルを指定できれば っという方向にすべきでしょうか?(fnmatch(3) 使えばいいかな?) あるいは、 find . ! -name '.*' | lha c foo.lzh のような機能を復活させるか。(LHa for *UNIX* ですから;-) # この場合は、00readme.autoconf に書いてるように標準入力が # tty かどうかで挙動を変更するのはじゃまくさいので、オプショ # ンを追加します。 > Mac OS X では、各ディレクトリにドットファイルが作られます。 > また、UFS パーティションではリソースフォークがドット付きの > ファイル名で作られるため、アーカイブしてほかのシステムへ > データを渡す時にうっとうしい思いをします。 > そんなところから作ったものです。 そういえば(話はちょっと変わりますが)、Mac のファイルの先頭 128 byte を切る機能って簡単に作れるなあとか思ってたんですが 需要はありますかねえ?現行の LHa for UNIX は、拡張子が .exe とかの場合にSelf Extract なアーカイブかもしれないと判断して lha ヘッダを検索するのですが、lha ヘッダを無条件に検索するオ プションがあってもいいかなあっと(でも、旧Macな場合にしか用が なさそうですが) -- 新井康司 (Koji Arai) From sakai @ fan.gr.jp Sat Dec 14 14:00:49 2002 From: sakai @ fan.gr.jp (Hiroto Sakai) Date: Sat, 14 Dec 2002 14:00:49 +0900 Subject: [Lha-users] Ignore dot-files patch In-Reply-To: <20021214.065640.109321774.JCA02266@nifty.ne.jp> References: <20021212144857.24572@ms-ma.neweb.ne.jp> <20021214.065640.109321774.JCA02266@nifty.ne.jp> Message-ID: <20021214050054.27226@ms-ma.neweb.ne.jp> 坂井です。 In Sat, 14 Dec 2002 06:56:40 +0900, Koji Arai wrote: >> GNU tar の -X のように除外したいファイルを指定できれば > っという方向にすべきでしょうか?(fnmatch(3) 使えばいいかな?) そう思います。 ただ、Windows エクスプローラーではドットファイルは 作ることを許してくれないなど、あちらでもイレギュラーな 存在なので、一律に無視するのもありかなあとも思います。 そういう意味では、毎回除外ファイルを指定するよりも Windows で都合の悪い/使わなさそうなファイルを一括して 無視してくれるオプションがあれば便利でよいですねえ ^_^; もちろん、任意のファイルを除外する機能もあれば素敵です。 # lha -a hoge.lzh --windows -X huyo.txt hoge みたいな? > そういえば(話はちょっと変わりますが)、Mac のファイルの先頭 > 128 byte を切る機能って簡単に作れるなあとか思ってたんですが > 需要はありますかねえ? MacLHA で MacBinary を指定した書庫でしか発生しないので 需要はあまり無いと思います。そうやって作った書庫を活用するのは きっと Mac ユーザですから MacLHA などで解凍するでしょうし。 Mac OS X 用に LHa for UNIX のフロントエンド(DropUnLHa)を 作ったんですが、リクエストは今のところありません。 //// 坂井 浩人 sakai @ fan.gr.jp //////// From JCA02266 @ nifty.ne.jp Sun Dec 15 23:12:28 2002 From: JCA02266 @ nifty.ne.jp (Koji Arai) Date: Sun, 15 Dec 2002 23:12:28 +0900 (JST) Subject: [Lha-users] Ignore dot-files patch In-Reply-To: <20021214050054.27226@ms-ma.neweb.ne.jp> References: <20021212144857.24572@ms-ma.neweb.ne.jp> <20021214.065640.109321774.JCA02266@nifty.ne.jp> <20021214050054.27226@ms-ma.neweb.ne.jp> Message-ID: <20021215.231228.65039700.JCA02266@nifty.ne.jp> 新井です。 In message "Re: [Lha-users] Ignore dot-files patch" on Sat, 14 Dec 2002 14:00:49 +0900, Hiroto Sakai wrote: > 坂井です。 > > In Sat, 14 Dec 2002 06:56:40 +0900, Koji Arai wrote: > >> GNU tar の -X のように除外したいファイルを指定できれば > > っという方向にすべきでしょうか?(fnmatch(3) 使えばいいかな?) > > そう思います。 一応、実装してみました。(まだ CVS に commit してません)tar の -X はファイルに除外ファイル(パターン)をリストしてそのファ イルを指定するオプションなので、-x にしました。(-x は、GNU diff にあるオプション)ちょっと eXtract と紛らわしい ですが。 また、明示的に圧縮対象のファイルとして指定した場合は、パター ンの方は無視されます。 つまり、 lha cx'*.o' src.lzh src/*.o とかだとすべての .o は圧縮されます。(意図してそうなったので はない^^;) > ただ、Windows エクスプローラーではドットファイルは > 作ることを許してくれないなど、あちらでもイレギュラーな > 存在なので、一律に無視するのもありかなあとも思います。 .始まりなファイルは隠しファイルだとみなして-x で、パターンを 書かない場合に . で始まるファイルを無視(つまり、-x のデフォ ルトパターンは、'.*')でもいいかもしれませんね。 Mac OS X での需要が高いのなら再度検討します。 > そういう意味では、毎回除外ファイルを指定するよりも > Windows で都合の悪い/使わなさそうなファイルを一括して > 無視してくれるオプションがあれば便利でよいですねえ ^_^; > もちろん、任意のファイルを除外する機能もあれば素敵です。 > # lha -a hoge.lzh --windows -X huyo.txt hoge みたいな? これはおそらくエクスプローラで扱えないファイルを無視するので はなく、DOSでファイル名として無効な文字を置換してあげる機能 の方が便利ではないかと思います。他にも文字の大小の違いだけの ファイルとか warning 出しつつ変えてあげるとか。 > MacLHA で MacBinary を指定した書庫でしか発生しないので > 需要はあまり無いと思います。そうやって作った書庫を活用するのは > きっと Mac ユーザですから MacLHA などで解凍するでしょうし。 > > Mac OS X 用に LHa for UNIX のフロントエンド(DropUnLHa)を > 作ったんですが、リクエストは今のところありません。 りょっかい。 以下、-x オプションのパッチ。まだ、autoconf とかは考慮されてません。 (GNU でない free な fnmatch() を探さなきゃ) realloc してる部分はとてもカッコ悪いのですが、lha のソースに 付属されたstring pool を使えばいいかなあっと思いつつ使い方を 調べてないので放置してます。 ま、仕様の方向性の検討が先ですから。 Index: src/lha.h =================================================================== RCS file: /cvsroot/lha/lha/src/lha.h,v retrieving revision 1.34 diff -u -u -p -r1.34 lha.h --- src/lha.h 24 Nov 2002 18:16:14 -0000 1.34 +++ src/lha.h 15 Dec 2002 13:54:18 -0000 @@ -141,6 +141,15 @@ int utime(const char *, struct utimbuf * # endif #endif +#if HAVE_FNMATCH_H +# include +#else +int fnmatch(const char *pattern, const char *string, int flags); +# define FNM_PATHNAME 1 +# define FNM_NOESCAPE 2 +# define FNM_PERIOD 4 +#endif + #ifndef SEEK_SET #define SEEK_SET 0 #define SEEK_CUR 1 @@ -296,6 +305,7 @@ EXTERN boolean recover_archive_when_int EXTERN boolean remove_extracting_file_when_interrupt; EXTERN boolean get_filename_from_stdin; EXTERN boolean ignore_directory; +EXTERN char **exclude_files; EXTERN boolean verify_mode; /* Indicator flag */ Index: src/lharc.c =================================================================== RCS file: /cvsroot/lha/lha/src/lharc.c,v retrieving revision 1.54 diff -u -u -p -r1.54 lharc.c --- src/lharc.c 16 Nov 2002 19:03:23 -0000 1.54 +++ src/lharc.c 15 Dec 2002 13:54:18 -0000 @@ -90,6 +90,7 @@ init_variable() /* Added N.Watazaki remove_extracting_file_when_interrupt = FALSE; get_filename_from_stdin = FALSE; ignore_directory = FALSE; + exclude_files = NULL; verify_mode = FALSE; noconvertcase = FALSE; @@ -147,6 +148,7 @@ commands: opti c re-Construct new archive w= specify extract directory (a/u/m/x/e)\n\ p Print to STDOUT from archive d delete FILES after (a/u/c)\n\ t Test file CRC in archive i ignore directory path (x/e)\n\ + x= eXclude files (a/u)\n\ z files not compress (a/u)\n\ g Generic format (for compatibility)\n\ or not convert case when extracting\n\ @@ -336,6 +338,23 @@ main(argc, argv) case 'i': ignore_directory = TRUE; break; + case 'x': + if (*p == '=') + p++; + if (!exclude_files) { + exclude_files = (char**)xmalloc(sizeof(char*) * 1); + exclude_files[0] = 0; + } + + for (i = 0; exclude_files[i]; i++) + ; + exclude_files = (char**)xrealloc(exclude_files, + sizeof(char*) * (i+1)); + exclude_files[i] = xstrdup(p); + exclude_files[i+1] = 0; + + p += strlen(p); + break; case 'w': if (*p == '=') p++; @@ -844,7 +863,7 @@ find_files(name, v_filec, v_filev) { struct string_pool sp; char newname[FILENAME_LENGTH]; - int len, n; + int len, n, i; DIR *dirp; struct dirent *dp; struct stat tmp_stbuf, arc_stbuf, fil_stbuf; @@ -864,6 +883,12 @@ find_files(name, v_filec, v_filev) GETSTAT(archive_name, &arc_stbuf); for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) { + for (i = 0; exclude_files && exclude_files[i]; i++) { + if (fnmatch(exclude_files[i], dp->d_name, + FNM_PATHNAME|FNM_NOESCAPE|FNM_PERIOD) == 0) + goto next; + } + n = NAMLEN(dp); strncpy(newname + len, dp->d_name, n); newname[len + n] = '\0'; @@ -890,6 +915,7 @@ find_files(name, v_filec, v_filev) add_sp(&sp, newname, len + n + 1); } #endif + next: } closedir(dirp); finish_sp(&sp, v_filec, v_filev); From JCA02266 @ nifty.ne.jp Mon Dec 16 00:05:15 2002 From: JCA02266 @ nifty.ne.jp (Koji Arai) Date: Mon, 16 Dec 2002 00:05:15 +0900 (JST) Subject: [Lha-users] Ignore dot-files patch In-Reply-To: <20021215.231228.65039700.JCA02266@nifty.ne.jp> References: <20021214.065640.109321774.JCA02266@nifty.ne.jp> <20021214050054.27226@ms-ma.neweb.ne.jp> <20021215.231228.65039700.JCA02266@nifty.ne.jp> Message-ID: <20021216.000515.131559886.JCA02266@nifty.ne.jp> 新井です。 In message "Re: [Lha-users] Ignore dot-files patch" on Sun, 15 Dec 2002 23:12:28 +0900 (JST), Koji Arai wrote: > 新井です。 > 一応、実装してみました。(まだ CVS に commit してません)tar > の -X はファイルに除外ファイル(パターン)をリストしてそのファ > イルを指定するオプションなので、-x にしました。(-x > は、GNU diff にあるオプション)ちょっと eXtract と紛らわしい > ですが。 うーん、現状の lha のオプション解析部は 第一引数がコマンド兼 オプション指定部っと決め打ちなので、複数の -x オプションが指 定できませんでした。 lha -c -x '*.o' -x '*.a' foo.lzh src とかできない。このオプション解析部分も作り直しかなあ -- 新井康司 (Koji Arai) From sakai @ fan.gr.jp Mon Dec 16 00:50:17 2002 From: sakai @ fan.gr.jp (Hiroto Sakai) Date: Mon, 16 Dec 2002 00:50:17 +0900 Subject: [Lha-users] Ignore dot-files patch In-Reply-To: <20021215.231228.65039700.JCA02266@nifty.ne.jp> References: <20021212144857.24572@ms-ma.neweb.ne.jp> <20021214.065640.109321774.JCA02266@nifty.ne.jp> <20021214050054.27226@ms-ma.neweb.ne.jp> <20021215.231228.65039700.JCA02266@nifty.ne.jp> Message-ID: <20021215155022.31921@ms-ma.neweb.ne.jp> 坂井です。 In Sun, 15 Dec 2002 23:12:28 +0900, Koji Arai wrote: > 一応、実装してみました。 すばらしいです。 fnmatch() というのがあるんですね… 知りませんでした。 > (-x は、GNU diff にあるオプション)ちょっと eXtract と > 紛らわしいですが。 d や t もそうなのでいいんじゃないでしょうか? # 一応気にして X だったり > .始まりなファイルは隠しファイルだとみなして-x で、パターンを > 書かない場合に . で始まるファイルを無視(つまり、-x のデフォ > ルトパターンは、'.*')でもいいかもしれませんね。 大変ありがたいです。 個人的にはこれでもういうことは何もありません。 > (GNU でない free な fnmatch() を探さなきゃ) fnmatch() は、BSD 由来なのですね。 ちょうど fnmatch.{c,h} の両方があるのを発見しました。 http://gridengine.sunsource.net/source/browse/gridengine/source/3rdparty/fnmatch/ //// 坂井 浩人 sakai @ fan.gr.jp //////// From JCA02266 @ nifty.ne.jp Mon Dec 16 01:40:29 2002 From: JCA02266 @ nifty.ne.jp (Koji Arai) Date: Mon, 16 Dec 2002 01:40:29 +0900 (JST) Subject: [Lha-users] Ignore dot-files patch In-Reply-To: <20021216.000515.131559886.JCA02266@nifty.ne.jp> References: <20021214050054.27226@ms-ma.neweb.ne.jp> <20021215.231228.65039700.JCA02266@nifty.ne.jp> <20021216.000515.131559886.JCA02266@nifty.ne.jp> Message-ID: <20021216.014029.09838255.JCA02266@nifty.ne.jp> 新井です。 In message "Re: [Lha-users] Ignore dot-files patch" on 16 Dec 2002 00:05:15 +0900, Koji Arai wrote: > 新井です。 > うーん、現状の lha のオプション解析部は 第一引数がコマンド兼 > オプション指定部っと決め打ちなので、複数の -x オプションが指 > 定できませんでした。 > > lha -c -x '*.o' -x '*.a' foo.lzh src > > とかできない。このオプション解析部分も作り直しかなあ この部分も考慮してパッチを作り直しました。 lha の usage は、 usage: lha [-]