▼スレッド
│
└◇381:LHA1.14 との相性? [BOK] 05/15 07:08
└◇383:Re:LHA1.14 との相性? [名無し] 05/15
└◇385:Re[2]:LHA1.14 との相性? [BOK] 05/16
└◇391:Re[3]:LHA1.14 との相性? [BOK] 05/20 <
初めての書き込みです。スレッド一覧
CygWinのいつのリリースからかLHA1.14でエラーが出るようになり使えなくなっていました(ヘッダー処理、ファイルI/O?)。
LHAのソースをいじくって解決しましたが、環境?に起因するのでしょうか。同様の問題ある方、他に居ます?
ソースをいじくったとのことですが、どのようにいじくったのでしょう?スレッド一覧
リスティングや、部分解凍でChecksumエラーが発生していました。ヘッダの取り込み部分を統一?して解消しました。スレッド一覧
以下、変更箇所です。オリジナルソースは1.14i
では。
*** lhlist.c 2002-05-16 09:05:32+09 1.1
--- lhlist.c 2002-05-16 09:04:50+09
***************
*** 325,331 ****
}
if (afp != stdin)
! fseek(afp, hdr.packed_size, SEEK_CUR);
else {
i = hdr.packed_size;
while (i--)
--- 325,331 ----
}
if (afp != stdin)
! fseek(afp, pos+hdr.packed_size, SEEK_SET);
else {
i = hdr.packed_size;
while (i--)
*** lhext.c 2002-05-14 09:31:25+09 1.1
--- lhext.c 2002-05-14 09:34:26+09
***************
*** 399,415 ****
/* extract each files */
while (get_header(afp, &hdr)) {
if (need_file(hdr.name)) {
- pos = ftell(afp);
extract_one(afp, &hdr);
fseek(afp, pos + hdr.packed_size, SEEK_SET);
! } else {
! if (afp != stdin)
! fseek(afp, hdr.packed_size, SEEK_CUR);
! else {
! int i = hdr.packed_size;
! while (i--)
! fgetc(afp);
! }
}
}
--- 399,415 ----
/* extract each files */
while (get_header(afp, &hdr)) {
if (need_file(hdr.name)) {
extract_one(afp, &hdr);
+ }
+
+ if (afp != stdin) {
+ pos = ftell(afp);
fseek(afp, pos + hdr.packed_size, SEEK_SET);
! }
! else {
! int i = hdr.packed_size;
! while (i--)
! fgetc(afp);
}
}
自己レスです。スレッド一覧
一部、不具合がありました。訂正します。すんません。
*** lhext.c 2002-05-14 09:31:25+09 1.1
--- lhext.c 2002-05-20 10:50:40+09
***************
*** 399,410 ****
/* extract each files */
while (get_header(afp, &hdr)) {
if (need_file(hdr.name)) {
- pos = ftell(afp);
extract_one(afp, &hdr);
! fseek(afp, pos + hdr.packed_size, SEEK_SET);
! } else {
! if (afp != stdin)
! fseek(afp, hdr.packed_size, SEEK_CUR);
else {
int i = hdr.packed_size;
while (i--)
--- 399,411 ----
/* extract each files */
while (get_header(afp, &hdr)) {
if (need_file(hdr.name)) {
extract_one(afp, &hdr);
! }
! else {
! if (afp != stdin) {
! pos = ftell(afp);
! fseek(afp, pos + hdr.packed_size, SEEK_SET);
! }
else {
int i = hdr.packed_size;
while (i--)