delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2000/12/11/07:41:03

From: "Juan Manuel Guerrero" <ST001906 AT HRZ1 DOT HRZ DOT TU-Darmstadt DOT De>
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
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: <Pine.SUN.3.91.1001211093659.11147J-100000@is>
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)
    {

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019