Akihiro Iriyama
iri****@bekko*****
2003年 12月 16日 (火) 23:54:53 JST
入山です。 CVS使ってみました。 >> 様子を見て commit しようかと思います。 > >と思ったのですが忘れるかも知れないのでもう commit してしまい >ました(^^;。 私の名前を入れるほどの事してないですよ。 アイデア提供だし…コードは新井さんの書き直したものの方が良いものになっ てますしね。 # メモリ食いすぎるコードでしたね。 私がWindowsで利用しているExpLzhなるシェアウェアで実現している機能を追 加してみました。 ・書庫ファイルの日付を、書庫内の最新の日付を持つファイルに合わせる。 ディレクトリとSYMLINKは対象から外しています。 この機能はオプションで有効/無効の指定が出来たほうが良いと思います。 私は常に有効にしたいところです。。 それと、一つwarnningが気になったので、"ULL"を追加してみました。 header.c: In function `wintime_to_unix_stamp':directory to DIR first. header.c:427: warning: integer constant is too large for "long" type. 定数のunsigned long long 代入部(日付です。) "ULL"ってGCC固有の定義じゃないか確認願います。 (自宅にはWin2000+gccしかないので…) # 英語苦手です。(苦笑) Index: src/header.c =================================================================== RCS file: /cvsroot/lha/lha/src/header.c,v retrieving revision 1.81 diff -u -p -r1.81 header.c --- src/header.c 21 Jul 2003 08:30:00 -0000 1.81 +++ src/header.c 16 Dec 2003 14:29:14 -0000 @@ -424,7 +424,7 @@ wintime_to_unix_stamp() { #if HAVE_UINT64_T uint64_t t; - uint64_t epoch = 0x019db1ded53e8000; /* 1970-01-01 00:00:00 (UTC) */ + uint64_t epoch = 0x019db1ded53e8000ULL; /* 1970-01-01 00:00:00 (UTC) */ t = (unsigned long)get_longword(); t |= (uint64_t)(unsigned long)get_longword() << 32; @@ -1594,6 +1594,14 @@ write_header(fp, hdr) if (fwrite(data, header_size, 1, fp) == 0) fatal_error("Cannot write to temporary file"); + + /* regist modtime */ + if (archive_file_modtime < hdr->unix_last_modified_stamp) { + if (((hdr->unix_mode & UNIX_FILE_DIRECTORY) != UNIX_FILE_DIRECTORY) || + ((hdr->unix_mode & UNIX_FILE_SYMLINK) != UNIX_FILE_SYMLINK)) { + archive_file_modtime = hdr->unix_last_modified_stamp; + } + } } #if MULTIBYTE_FILENAME Index: src/lha.h =================================================================== RCS file: /cvsroot/lha/lha/src/lha.h,v retrieving revision 1.48 diff -u -p -r1.48 lha.h --- src/lha.h 27 Jul 2003 08:37:33 -0000 1.48 +++ src/lha.h 16 Dec 2003 14:29:14 -0000 @@ -336,6 +336,7 @@ EXTERN char *reading_filename, *writ EXTERN int archive_file_mode; EXTERN int archive_file_gid; +EXTERN int archive_file_modtime; /* 2003.12.14 */ EXTERN int noconvertcase; /* 2000.10.6 */ Index: src/lhadd.c =================================================================== RCS file: /cvsroot/lha/lha/src/lhadd.c,v retrieving revision 1.38 diff -u -p -r1.38 lhadd.c --- src/lhadd.c 27 Jul 2003 08:37:33 -0000 1.38 +++ src/lhadd.c 16 Dec 2003 14:29:14 -0000 @@ -560,6 +560,13 @@ cmd_add() temporary_to_new_archive_file(new_archive_size); } + + /* set time stamp for archive file at most newer archive entry */ + if (nafp != stdout) { + struct utimbuf utimebuf; + utimebuf.actime = utimebuf.modtime = archive_file_modtime; + utime(new_archive_name, &utimebuf); + } } /* set new archive file mode/group */ -- Akihiro Iriyama mailto:iri****@bekko*****