Rizin
unix-like reverse engineering framework and cli tools
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 <zip.h> 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:

See their man pages for instructions on how to replace them.

The most common affected use is zip_open. The new recommended usage is:

int err;
if ((za = zip_open(archive, flags, &err)) == NULL) {
fprintf(stderr, "can't open zip archive '%s': %s\n", archive, zip_error_strerror(&error));
}
static bool err
Definition: armass.c:435
#define NULL
Definition: cris-opc.c:27
ZIP_EXTERN void zip_error_init_with_code(zip_error_t *_Nonnull, int)
Definition: zip_error.c:66
ZIP_EXTERN void zip_error_fini(zip_error_t *_Nonnull)
Definition: zip_error.c:52
ZIP_EXTERN zip_t *_Nullable zip_open(const char *_Nonnull, int, int *_Nullable)
Definition: zip_open.c:54
ZIP_EXTERN const char *_Nonnull zip_error_strerror(zip_error_t *_Nonnull)
static struct sockaddr static addrlen static backlog const void static flags void flags
Definition: sfsocketcall.h:123
Definition: zipcmp.c:60
Definition: zip.h:284
void error(const char *msg)
Definition: untgz.c:593
zip_t * za
Definition: ziptool.c:79

more typedefs

The following typedefs have been added for better readability:

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;
Definition: zip.h:300
Definition: zipint.h:278

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_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:

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.