components/gzip/6294656-6283819.patch
changeset 96 0cad26ba1671
equal deleted inserted replaced
95:bc205fa4b512 96:0cad26ba1671
       
     1 --- gzip-1.3.5.orig/gzip.c
       
     2 +++ gzip-1.3.5/gzip.c
       
     3 @@ -878,8 +878,11 @@
       
     4      }
       
     5  
       
     6      close(ifd);
       
     7 -    if (!to_stdout && close(ofd)) {
       
     8 -	write_error();
       
     9 +    if (!to_stdout) {
       
    10 +        /* Copy modes, times, ownership, and remove the input file */
       
    11 +        copy_stat(&istat);
       
    12 +	if (close(ofd))
       
    13 +		write_error();
       
    14      }
       
    15      if (method == -1) {
       
    16  	if (!to_stdout) xunlink (ofname);
       
    17 @@ -899,10 +902,6 @@
       
    18  	}
       
    19  	fprintf(stderr, "\n");
       
    20      }
       
    21 -    /* Copy modes, times, ownership, and remove the input file */
       
    22 -    if (!to_stdout) {
       
    23 -	copy_stat(&istat);
       
    24 -    }
       
    25  }
       
    26  
       
    27  /* ========================================================================
       
    28 @@ -1322,6 +1321,7 @@
       
    29  		/* Copy the base name. Keep a directory prefix intact. */
       
    30                  char *p = base_name (ofname);
       
    31                  char *base = p;
       
    32 +                char *base2;
       
    33  		for (;;) {
       
    34  		    *p = (char)get_char();
       
    35  		    if (*p++ == '\0') break;
       
    36 @@ -1329,6 +1329,8 @@
       
    37  			error("corrupted input -- file name too large");
       
    38  		    }
       
    39  		}
       
    40 +		base2 = base_name (base);
       
    41 +		strcpy(base, base2);
       
    42                  /* If necessary, adapt the name to local OS conventions: */
       
    43                  if (!list) {
       
    44                     MAKE_LEGAL_NAME(base);
       
    45 @@ -1730,7 +1732,7 @@
       
    46      reset_times(ofname, ifstat);
       
    47  #endif
       
    48      /* Copy the protection modes */
       
    49 -    if (chmod(ofname, ifstat->st_mode & 07777)) {
       
    50 +    if (fchmod(ofd, ifstat->st_mode & 07777)) {
       
    51  	int e = errno;
       
    52  	WARN((stderr, "%s: ", progname));
       
    53  	if (!quiet) {
       
    54 @@ -1739,7 +1741,7 @@
       
    55  	}
       
    56      }
       
    57  #ifndef NO_CHOWN
       
    58 -    chown(ofname, ifstat->st_uid, ifstat->st_gid);  /* Copy ownership */
       
    59 +    (void) fchown(ofd, ifstat->st_uid, ifstat->st_gid);  /* Copy ownership */
       
    60  #endif
       
    61      remove_ofname = 0;
       
    62      /* It's now safe to remove the input file: */