Нет описания

zip.c 1.1KB

    // Utilities for getting entries from ZIP files. // // Uses libzip, alternatives are minizip (from zlib) and zziplib. #include <stdio.h> #include <stdlib.h> #include "zip.h" void print_zip_err(char *prefix, zip_t *zip); char *get_contents_zip(char *path, char *name) { zip_t *archive = zip_open(path, ZIP_RDONLY, NULL); if (archive == NULL) { print_zip_err("zip_open", archive); return NULL; } zip_stat_t stat; if (zip_stat(archive, name, 0, &stat) < 0) { print_zip_err("zip_stat", archive); goto close_archive; } zip_file_t *f = zip_fopen(archive, name, 0); if (f == NULL) { print_zip_err("zip_fopen", archive); goto close_archive; } char *buf = malloc(stat.size + 1); if (zip_fread(f, buf, stat.size) < 0) { print_zip_err("zip_fread", archive); goto free_buf; } buf[stat.size] = '\0'; zip_fclose(f); zip_close(archive); return buf; free_buf: free(buf); close_file: zip_fclose(f); close_archive: zip_close(archive); return NULL; } void print_zip_err(char *prefix, zip_t *zip) { zip_error_t *err = zip_get_error(zip); printf("%s: %s\n", prefix, zip_error_strerror(err)); zip_error_fini(err); }