# libzip API changes This file describes changes in the libzip API and how to adapt your code for them. You can define `ZIP_DISABLE_DEPRECATED` before including `` to hide prototypes for deprecated functions, to find out about functions that might be removed at some point. ## Changed in libzip-1.0 ### new type `zip_error_t` Error information is stored in the newly public type `zip_error_t`. Use this to access information about an error, instead of the deprecated functions that operated on two ints. deprecated functions: - `zip_error_get_sys_type()` - `zip_error_get()` - `zip_error_to_str()` - `zip_file_error_get()` See their man pages for instructions on how to replace them. The most common affected use is `zip_open`. The new recommended usage is: ```c int err; if ((za = zip_open(archive, flags, &err)) == NULL) { zip_error_t error; zip_error_init_with_code(&error, err); fprintf(stderr, "can't open zip archive '%s': %s\n", archive, zip_error_strerror(&error)); zip_error_fini(&error); } ``` ### more typedefs The following typedefs have been added for better readability: ```c typedef struct zip zip_t; typedef struct zip_file zip_file_t; typedef struct zip_source zip_source_t; typedef struct zip_stat zip_stat_t; ``` This means you can use "`zip_t`" instead of "`struct zip`", etc. ### torrentzip support removed torrentzip depends on a particular zlib version which is by now quite old. ## Changed in libzip-0.11 ### new type `zip_flags_t` The functions which have flags now use the `zip_flags_t` type for this. All old flags fit; you need only to adapt code if you were saving flags in a local variable. Use `zip_flags_t` for such a variable. This affects: - `zip_fopen()` - `zip_fopen_encrypted()` - `zip_fopen_index()` - `zip_fopen_index_encrypted()` - `zip_get_archive_comment()` - `zip_get_archive_flag()` - `zip_get_num_entries()` - `zip_get_name()` - `zip_name_locate()` - `zip_set_archive_flag()` - `zip_source_zip()` - `zip_stat()` - `zip_stat_index()` #### `ZIP_FL_*`, `ZIP_AFL_*`, `ZIP_STAT_*` are now unsigned constants To match the new `zip_flags_t` type. #### `zip_add()`, `zip_add_dir()` These functions were replaced with `zip_file_add()` and `zip_dir_add()`, respectively, to add a flags argument. #### `zip_rename()`, `zip_replace()` These functions were replaced with `zip_file_rename()` and `zip_file_replace()`, respectively, to add a flags argument. #### `zip_get_file_comment()` This function was replaced with `zip_file_get_comment()`; one argument was promoted from `int` to `zip_uint32_t`, the other is now a `zip_flags_t`. #### `zip_set_file_comment()` This function was replaced with `zip_file_set_comment()`; an argument was promoted from `int` to `zip_uint16_t`, and a `zip_flags_t` argument was added. ### integer type size changes Some argument and return values were not the right size or sign. #### `zip_name_locate()` The return value was `int`, which can be too small. The function now returns `zip_int64_t`. #### `zip_get_num_entries()` The return type is now signed, to allow signaling errors. #### `zip_set_archive_comment()` The last argument changed from `int` to `zip_uint16_t`. ### extra field handling rewritten The `zip_get_file_extra()` and `zip_set_file_extra()` functions were removed. They only worked on the whole extra field set. Instead, you can now set, get, count, and delete each extra field separately, using the functions: - `zip_file_extra_field_delete()` - `zip_file_extra_field_delete_by_id()` - `zip_file_extra_field_get()` - `zip_file_extra_field_get_by_id()` - `zip_file_extra_fields_count()` - `zip_file_extra_fields_count_by_id()` - `zip_file_extra_field_set()` Please read the corresponding man pages for details. ### new functions #### `zip_discard()` The new `zip_discard()` function closes an archive without committing the scheduled changes. #### `zip_set_file_compression()` The new `zip_set_file_compression()` function allows setting compression levels for files. ### argument changes #### file names File names arguments are now allowed to be `NULL` to have an empty file name. This mostly affects `zip_file_add()`, `zip_dir_add()`, and `zip_file_rename()`. For `zip_get_name()`, `zip_file_get_comment()`, and `zip_get_archive_comment()`, if the file name or comment is empty, a string of length 0 is returned. `NULL` is returned for errors only. Previously, `NULL` was returned for empty/unset file names and comments and errors, leaving no way to differentiate between the two.