summaryrefslogtreecommitdiff
path: root/archivers/unzip/patches/patch-ac
blob: 062be0cbd3e5228843dc2da8ab5f95bb31197c44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
$NetBSD: patch-ac,v 1.1 2005/08/04 14:20:35 tron Exp $

--- unix/unix.c.orig	2005-02-26 19:43:42.000000000 +0000
+++ unix/unix.c	2005-08-04 15:15:17.000000000 +0100
@@ -1042,8 +1042,6 @@
     ush z_uidgid[2];
     int have_uidgid_flg;
 
-    fclose(G.outfile);
-
 /*---------------------------------------------------------------------------
     If symbolic links are supported, allocate storage for a symlink control
     structure, put the uncompressed "data" and other required info in it, and
@@ -1059,6 +1057,8 @@
                                 strlen(G.filename);
         slinkentry *slnk_entry;
 
+        fclose(G.outfile);
+
         if ((unsigned)slnk_entrysize < ucsize) {
             Info(slide, 0x201, ((char *)slide,
               "warning:  symbolic link (%s) failed: mem alloc overflow\n",
@@ -1107,6 +1107,11 @@
     }
 #endif /* SYMLINKS */
 
+#ifndef NO_CHMOD
+    if (fchmod(fileno(G.outfile), filtattr(__G__ G.pInfo->file_attr)))
+        perror("chmod (file attributes) error");
+#endif
+
 #ifdef QLZIP
     if (G.extra_field) {
         static void qlfix OF((__GPRO__ uch *ef_ptr, unsigned ef_len));
@@ -1120,7 +1125,7 @@
     /* if -X option was specified and we have UID/GID info, restore it */
     if (have_uidgid_flg) {
         TTrace((stderr, "close_outfile:  restoring Unix UID/GID info\n"));
-        if (chown(G.filename, (uid_t)z_uidgid[0], (gid_t)z_uidgid[1]))
+        if (fchown(fileno(G.outfile), (uid_t)z_uidgid[0], (gid_t)z_uidgid[1]))
         {
             if (uO.qflag)
                 Info(slide, 0x201, ((char *)slide,
@@ -1133,6 +1138,8 @@
         }
     }
 
+    fclose(G.outfile);
+
     /* set the file's access and modification times */
     if (utime(G.filename, &(zt.t2))) {
 #ifdef AOS_VS
@@ -1156,11 +1163,6 @@
     zipfile.
   ---------------------------------------------------------------------------*/
 
-#ifndef NO_CHMOD
-    if (chmod(G.filename, filtattr(__G__ G.pInfo->file_attr)))
-        perror("chmod (file attributes) error");
-#endif
-
 } /* end function close_outfile() */
 
 #endif /* !MTS */