Author: ak (ports committer)
Date: Sun Dec 13 21:31:45 2015
New Revision: 292172
URL: https://svnweb.freebsd.org/changeset/base/292172

Log:
  - Properly set mode and atime/ctime for symlinks
  
  Approved by:  des

Modified:
  head/usr.bin/unzip/unzip.c

Modified: head/usr.bin/unzip/unzip.c
==============================================================================
--- head/usr.bin/unzip/unzip.c  Sun Dec 13 21:15:56 2015        (r292171)
+++ head/usr.bin/unzip/unzip.c  Sun Dec 13 21:31:45 2015        (r292172)
@@ -127,7 +127,6 @@ errorx(const char *fmt, ...)
        exit(1);
 }
 
-#if 0
 /* non-fatal error message + errno */
 static void
 warning(const char *fmt, ...)
@@ -143,7 +142,6 @@ warning(const char *fmt, ...)
        va_end(ap);
        fprintf(stderr, ": %s\n", strerror(errno));
 }
-#endif
 
 /* non-fatal error message, no errno */
 static void
@@ -539,12 +537,21 @@ recheck:
                        return;
        }
 
+       ts[0].tv_sec = 0;
+       ts[0].tv_nsec = UTIME_NOW;
+       ts[1] = mtime;
+
        /* process symlinks */
        linkname = archive_entry_symlink(e);
        if (linkname != NULL) {
-               if (symlink(linkname, *path) < 0)
+               if (symlink(linkname, *path) != 0)
                        error("symlink('%s')", *path);
                info(" extracting: %s -> %s\n", *path, linkname);
+               if (lchmod(*path, mode) != 0)
+                       warning("Cannot set mode for '%s'", *path);
+               /* set access and modification time */
+               if (utimensat(AT_FDCWD, *path, ts, AT_SYMLINK_NOFOLLOW) != 0)
+                       warning("utimensat('%s')", *path);
                return;
        }
 
@@ -629,9 +636,6 @@ recheck:
        info("\n");
 
        /* set access and modification time */
-       ts[0].tv_sec = 0;
-       ts[0].tv_nsec = UTIME_NOW;
-       ts[1] = mtime;
        if (futimens(fd, ts) != 0)
                error("futimens('%s')", *path);
        if (close(fd) != 0)
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to