---
name: "zip_source"
section: "5"
platform: "linux"
package: "libzip"
version: "1.11.4-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/zip_source/5"
---

# zip\_source(5)

zip data source structure

## NAME

**zip\_source** – zip data source structure

## LIBRARY

libzip (-lzip)

## SYNOPSIS

**#include \<zip.h\>**

*zip\_source\_t* *\*source*;

## DESCRIPTION

A *zip\_source\_t* represents a data source (or destination when used for writing). [libzip(3)](/libzip/3.md) uses it for adding or replacing file contents for a file in a zip archive. If the source supports seeking, it can also be used to open zip archives from.

Data can come from a file on disk ((zip\_source\_file) 3, [zip\_source\_file\_create(3)](/zip_source_file_create/3.md), [zip\_source\_filep(3)](/zip_source_filep/3.md), or [zip\_source\_filep\_create(3)](/zip_source_filep_create/3.md)), memory ((zip\_source\_buffer) 3, [zip\_source\_buffer\_create(3)](/zip_source_buffer_create/3.md), [zip\_source\_buffer\_fragment(3)](/zip_source_buffer_fragment/3.md), or [zip\_source\_buffer\_fragment\_create(3)](/zip_source_buffer_fragment_create/3.md)), a file inside an archive ((zip\_source\_zip) 3), or provided via a callback function ((zip\_source\_function) 3 or [zip\_source\_function\_create(3)](/zip_source_function_create/3.md)). zip\_source\_window(3) or [zip\_source\_window\_create(3)](/zip_source_window_create/3.md) can be used restrict access to a part of the contained data.

It can also be used as a filter to process the data provided by an underlying *zip\_source\_t* (e.g., to compress it or compute a checksum), created with [zip\_source\_layered(3)](/zip_source_layered/3.md) or [zip\_source\_layered\_create(3)](/zip_source_layered_create/3.md)).

Sources are freed with [zip\_source\_free(3)](/zip_source_free/3.md).

Sources must support reading, and can optionally support seeking and writing.

*zip\_source\_t* is reference counted, and created with a reference count of 1. [zip\_open\_from\_source(3)](/zip_open_from_source/3.md), [zip\_file\_add(3)](/zip_file_add/3.md), and [zip\_file\_replace(3)](/zip_file_replace/3.md) will take ownership of the passed source (decrement the reference count when they are done using it), so [zip\_source\_free(3)](/zip_source_free/3.md) only needs to be called when these functions return an error. The underlying data (file or buffer) must remain valid until the archive is closed. Use [zip\_source\_keep(3)](/zip_source_keep/3.md) to increase the reference count, for example if you need the source after [zip\_close(3)](/zip_close/3.md).

## SEE ALSO

[libzip(3)](/libzip/3.md), [zip\_source\_buffer(3)](/zip_source_buffer/3.md), [zip\_source\_file(3)](/zip_source_file/3.md), [zip\_source\_filep(3)](/zip_source_filep/3.md), [zip\_source\_free(3)](/zip_source_free/3.md), [zip\_source\_function(3)](/zip_source_function/3.md), [zip\_source\_keep(3)](/zip_source_keep/3.md), zip\_source\_window(3), [zip\_source\_zip(3)](/zip_source_zip/3.md)

## AUTHORS

Dieter Baron ⟨*dillo@nih.at*⟩ and Thomas Klausner ⟨*wiz@gatalith.at*⟩
