Add Archive timestamp decoding master
authorTJ <hacker@iam.tj>
Sat, 14 Nov 2015 05:16:42 +0000 (05:16 +0000)
committerTJ <hacker@iam.tj>
Sat, 14 Nov 2015 05:16:42 +0000 (05:16 +0000)
installshield_main.c
installshield_z.h

index bb6654a..4369421 100644 (file)
@@ -60,8 +60,10 @@ headers_decode(int z_fd)
                offset = lseek(z_fd, offset, SEEK_SET);
                if ((qty = read(z_fd, header, Z_FILE_HEADER_BYTES))< Z_FILE_HEADER_BYTES)
                        fprintf(stderr, "Warning: Tried to read %ld header bytes but only got %ld. Will do my best\n", Z_FILE_HEADER_BYTES, qty);
+               time_t timestamp = msdos2unixtime(header->timestamp, header->datestamp);
+               char *datetime = ctime(&timestamp);
                printf("Magic               %08x\n", header->magic);
-               printf("CRC32               %08x\n", header->__crc32);
+               printf("Timestamp           %s"  , datetime);
                printf("File size           %08x\n", header->file_bytes);
                printf("Payload size        %08x\n", header->payload_bytes);
                printf("Directories offset  %08x\n", header->directories_offset);
@@ -97,8 +99,8 @@ headers_decode(int z_fd)
                                printf("File entries: %d ( %08x bytes @ 0x%08x)\n", header->files_entries, header->files_bytes, header->files_offset);
 
                                for (int i = 0; i < header->files_entries; ++i) {
-                                       time_t timestamp = msdos2unixtime(q->timestamp, q->datestamp);
-                                       char *datetime = ctime(&timestamp);
+                                       timestamp = msdos2unixtime(q->timestamp, q->datestamp);
+                                       datetime = ctime(&timestamp);
                                        printf(" Entry %4d uses %06x bytes @ %08x. Date %s File-size %08x (payload %08x @ %08x)", i, q->entry_bytes, header->files_offset +(uint32_t)((void *)q - (void *)fileent), datetime, q->file_bytes, q->payload_bytes, q->payload_offset);
 
                                        if (debug) {
index e49b7a4..f054f7e 100644 (file)
@@ -20,7 +20,8 @@ struct __attribute__((packed)) archive_header {
        uint16_t                __flags;                                        // 0x06
        uint32_t                __unknown08;                            // 0x08
        uint16_t                files_entries;                          // 0x0C
-       uint32_t                __crc32;                                        // 0x0E
+       uint16_t                datestamp;                                      // 0x0E
+       uint16_t                timestamp;                                      // 0x10
        uint32_t                file_bytes;                                     // 0x12
        uint32_t                payload_bytes;                          // 0x16
        uint8_t                 __known1A;                                      // 0x1A