zip_open, zip_open_from_source
open zip archive

libzip (-lzip)

#include <zip.h>

zip_t *
zip_open(const char *path, int flags, int *errorp);

zip_t *
zip_open_from_source(zip_source_t *zs, int flags, zip_error_t *ze);

The zip_open() function opens the zip archive specified by path and returns a pointer to a struct zip, used to manipulate the archive. The flags are specified by or'ing the following values, or 0 for none of them.
Perform additional stricter consistency checks on the archive, and error if they fail.
Create the archive if it does not exist.
Error if archive already exists.
If archive exists, ignore its current contents. In other words, handle it the same way as an empty archive.
Open archive in read-only mode.

If an error occurs and errorp is non-NULL, it will be set to the corresponding error code.

The zip_open_from_source() function opens a zip archive encapsulated by the zip_source zs using the provided flags. In case of error, the zip_error ze is filled in.

Upon successful completion zip_open() and zip_open_from_source() return a struct zip pointer. Otherwise, NULL is returned and zip_open() sets *errorp to indicate the error, while zip_open_from(source) sets ze to indicate the error.

Here's an example of how you could report errors during zip_open:
    zip_t *za;
    int err;

    if ((za = zip_open(name, 0, &err)) == NULL) {
        zip_error_t error;
        zip_error_init_with_code(&error, err);
        fprintf(stderr, "%s: cannot open zip archive '%s': %s\n",
	        progname, name, zip_error_strerror(&error));
        return -1;

The archive specified by path is opened unless:
The file specified by path exists and ZIP_EXCL is set.
Inconsistencies were found in the file specified by path. This error is often caused by specifying ZIP_CHECKCONS but can also happen without it.
The path argument is NULL.
Required memory could not be allocated.
The file specified by path does not exist and ZIP_CREATE is not set.
The file specified by path is not a zip archive.
The file specified by path could not be opened.
A read error occurred; see errno for details.
The file specified by path does not allow seeks.
For newly created archives, zip_open() does not try to create the file; this is done when calling zip_close(3) and any errors, like missing write permissions, will be reported then.

libzip(3), zip_close(3), zip_error_strerror(3), zip_fdopen(3)

zip_open() and zip_open_from_source() were added in libzip 1.0.

Dieter Baron <> and Thomas Klausner <>