diff --git a/src/myzip/myzip.c b/src/myzip/myzip.c index 808bb4bfb4453a6bddb09878756f8605557971c9..2a7ba1d64ee1c0ae8e3ea228d530ecd4a8f2baad 100644 --- a/src/myzip/myzip.c +++ b/src/myzip/myzip.c @@ -51,7 +51,7 @@ int main(int argc, char *argv[]) const char *output_file_name = argv[1]; const char *input_file_name = argv[2]; FILE *input_file = fopen(input_file_name, "r"); - FILE *output_file = fopen(output_file_name, "w"); + FILE *output_file = fopen(output_file_name, "w+"); if (input_file == NULL) { @@ -75,11 +75,11 @@ int main(int argc, char *argv[]) write_u32(output_file, 0x04034b50); /* local file signature */ write_u16(output_file, 20); /* extract version */ write_u16(output_file, 0); /* general purpose flag */ - write_u16(output_file, 0); /* compression method */ + write_u16(output_file, 8); /* compression method */ write_u16(output_file, 0); /* last mod file time */ write_u16(output_file, 0); /* last mod file date */ write_u32(output_file, 0xDEADBEEF); /* crc */ - size_t compressed_size_loc = ftell(input_file); + size_t compressed_size_loc = ftell(output_file); write_u32(output_file, 0); /* compressed file size */ write_u32(output_file, input_file_size); /* uncompressed file size */ write_u16(output_file, strlen(input_file_name)); /* file name len */ @@ -88,12 +88,12 @@ int main(int argc, char *argv[]) /* extra field */ /* copy input file to output */ uint32_t compressed_size = write_lz77_stream(input_file, output_file); + printf("Compressed size = %d\n", compressed_size); - - size_t central_directory_start = ftell(input_file); /* save location */ - fseek(input_file, compressed_size_loc, SEEK_SET); /* move back */ + size_t central_directory_start = ftell(output_file); /* save location */ + fseek(output_file, compressed_size_loc, SEEK_SET); /* move back */ write_u32(output_file, compressed_size); /* write compressed size */ - fseek(input_file, central_directory_start, SEEK_SET); /* return to writing */ + fseek(output_file, central_directory_start, SEEK_SET); /* return to writing */ /* (2) CENTRAL DIRECTORY RECORD */ write_u32(output_file, 0x02014b50); /* central directory signature */ @@ -101,7 +101,7 @@ int main(int argc, char *argv[]) write_u8 (output_file, 65); /* made by */ write_u16(output_file, 20); /* extract version */ write_u16(output_file, 0); /* general purpose bit flag */ - write_u16(output_file, 0); /* compression method */ + write_u16(output_file, 8); /* compression method */ write_u16(output_file, 0); /* last mod file time */ write_u16(output_file, 0); /* last mod file date */ write_u32(output_file, 0xdeadbeef); /* crc */