From 60f09721d8a1b6a989572415eed463ec539c2521 Mon Sep 17 00:00:00 2001 From: TJ Date: Sat, 14 Nov 2015 05:16:42 +0000 Subject: [PATCH] Add Archive timestamp decoding --- installshield_main.c | 8 +++++--- installshield_z.h | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/installshield_main.c b/installshield_main.c index bb6654a..4369421 100644 --- a/installshield_main.c +++ b/installshield_main.c @@ -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(×tamp); 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(×tamp); + timestamp = msdos2unixtime(q->timestamp, q->datestamp); + datetime = ctime(×tamp); 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) { diff --git a/installshield_z.h b/installshield_z.h index e49b7a4..f054f7e 100644 --- a/installshield_z.h +++ b/installshield_z.h @@ -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 -- 2.17.1