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