From: "Juan Manuel Guerrero" Organization: Darmstadt University of Technology To: eliz AT is DOT elta DOT co DOT il Date: Mon, 11 Dec 2000 13:40:12 +0200 MIME-Version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT Subject: Re: A bugfix for djtar CC: djgpp-workers AT delorie DOT com References: <116197B1031 AT HRZ1 DOT hrz DOT tu-darmstadt DOT de> In-reply-to: X-mailer: Pegasus Mail for Windows (v2.54DE) Message-ID: <11BEE872B12@HRZ1.hrz.tu-darmstadt.de> Reply-To: djgpp-workers AT delorie DOT com On Mon, 11 Dec 2000, Eli Zaretskii wrote: > Please change the new variable's name to error_message_printed, > initialize it to zero, and set to 1 after the message is printed. > Double negation such as this: > > error_message_not_printed = 0; /* Yes, we have printed it. */ > > confuses programmers and is a source of many programmatic errors > (althought your code is correct). OK. Done. Regards, Guerrero, Juan Manuel diff -acprNC5 djgpp.orig/src/utils/djtar/untar.c djgpp/src/utils/djtar/untar.c *** djgpp.orig/src/utils/djtar/untar.c Tue Nov 28 21:20:44 2000 --- djgpp/src/utils/djtar/untar.c Sun Dec 10 18:37:16 2000 *************** typedef struct { *** 42,51 **** --- 42,52 ---- char flags[1]; char filler[355]; } TARREC; static TARREC header; + static int error_message_printed; static int looking_for_header; static char *changed_name; static int first_block = 1; static File_type file_type = DOS_BINARY; static long perm, uid, gid, size; *************** tarread(char *buf, long buf_size) *** 121,131 **** head_csum -= j; } if (head_csum && !ignore_csum) { /* Probably corrupted archive. Bail out. */ ! fprintf(log_out, "--- !!Directory checksum error!! ---\n"); bytes_out += buf_size; return EOF; } changed_name = get_new_name(header.name, &should_be_written); --- 122,140 ---- head_csum -= j; } if (head_csum && !ignore_csum) { /* Probably corrupted archive. Bail out. */ ! if (!error_message_printed) ! { ! error_message_printed = 1; ! fprintf(log_out, "--- !!Directory checksum error!! ---\n"); ! } ! /* We have still not found a valid tar header in this buf[], ! so we MUST continue looking for a header next time that ! tarread() is called with a new buf[]. */ ! looking_for_header = 1; bytes_out += buf_size; return EOF; } changed_name = get_new_name(header.name, &should_be_written); *************** tar_gz_read(char *fname) *** 342,351 **** --- 351,361 ---- fname, method > MAX_METHODS ? "corrupted (?)" : zip_description[method], method == DEFLATED ? (pkzip ? "PKZip" : "GZip") : ""); bytes_out = 0; + error_message_printed = 0; looking_for_header = 1; posn = 0; if ((*decompressor)(f) != OK) {