LHAReader *lha_reader_new(LHAInputStream *stream) { LHABasicReader *basic_reader; LHAReader *reader; basic_reader = lha_basic_reader_new(stream); if (basic_reader == NULL) { return NULL; } reader = malloc(sizeof(LHAReader)); if (reader == NULL) { lha_basic_reader_free(basic_reader); return NULL; } reader->reader = basic_reader; reader->curr_file = NULL; reader->curr_file_type = CURR_FILE_START; reader->decoder = NULL; reader->inner_decoder = NULL; reader->dir_stack = NULL; reader->dir_policy = LHA_READER_DIR_END_OF_DIR; return reader; }
int main(int argc, char *argv[]) { LHAInputStream *stream; LHABasicReader *reader; LHAFileHeader *header; if (argc < 2) { printf("Usage: %s <filename>\n", argv[0]); exit(-1); } // Give output in binary mode for cross-platform consistency, // so that it can be compared correctly on Windows. lha_arch_set_binary(stdout); stream = lha_input_stream_from(argv[1]); if (stream == NULL) { fprintf(stderr, "Failed to open '%s'\n", argv[1]); exit(-1); } reader = lha_basic_reader_new(stream); for (;;) { header = lha_basic_reader_next_file(reader); if (header == NULL) { break; } print_header(header); printf("--\n"); } lha_basic_reader_free(reader); lha_input_stream_free(stream); return 0; }