unzip: shorter code for date/time generation
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 18 Apr 2016 00:34:29 +0000 (02:34 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 18 Apr 2016 00:38:32 +0000 (02:38 +0200)
function                                             old     new   delta
unzip_main                                          2426    2414     -12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/unzip.c

index a7532e0ffdfda63ebecc8628bc5e6f977872986d..be32e60e23473c726ac5942c9d8486baf7768af8 100644 (file)
@@ -642,14 +642,14 @@ int unzip_main(int argc, char **argv)
                } else {
                        if (listing) {
                                /* List entry */
-                               unsigned dostime = zip_header.formatted.modtime | (zip_header.formatted.moddate << 16);
                                char dtbuf[sizeof("mm-dd-yyyy hh:mm")];
                                sprintf(dtbuf, "%02u-%02u-%04u %02u:%02u",
-                                               (dostime & 0x01e00000) >> 21,
-                                               (dostime & 0x001f0000) >> 16,
-                                               ((dostime & 0xfe000000) >> 25) + 1980,
-                                               (dostime & 0x0000f800) >> 11,
-                                               (dostime & 0x000007e0) >> 5
+                                       (zip_header.formatted.moddate >> 5) & 0xf,  // mm: 0x01e0
+                                       (zip_header.formatted.moddate)      & 0x1f, // dd: 0x001f
+                                       (zip_header.formatted.moddate >> 9) + 1980, // yy: 0xfe00
+                                       (zip_header.formatted.modtime >> 11),       // hh: 0xf800
+                                       (zip_header.formatted.modtime >> 5) & 0x3f  // mm: 0x07e0
+                                       // seconds/2 are not shown, encoded in ----------- 0x001f
                                );
                                if (!verbose) {
                                        //      "  Length      Date    Time    Name\n"