<feed xmlns='http://www.w3.org/2005/Atom'>
<title>xavi/slcl/zip.c, branch v0.5.0</title>
<subtitle>Small and lightweight cloud storage written in C99 and POSIX.1-2008.
</subtitle>
<id>https://gitea.privatedns.org/xavi/slcl/atom?h=v0.5.0</id>
<link rel='self' href='https://gitea.privatedns.org/xavi/slcl/atom?h=v0.5.0'/>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/slcl/'/>
<updated>2026-09-27T21:13:06+00:00</updated>
<entry>
<title>zip.c: Add top-level directory</title>
<updated>2026-09-27T21:13:06+00:00</updated>
<author>
<name>Xavier Del Campo Romero</name>
<email>xavi92@disroot.org</email>
</author>
<published>2026-09-27T21:13:06+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/slcl/commit/?id=8233150b4ed2c4a6e1639e7d5e578f4b6b2a363a'/>
<id>urn:sha1:8233150b4ed2c4a6e1639e7d5e578f4b6b2a363a</id>
<content type='text'>
It is desirable to keep the contents of the generated file below a
directory, ideally named after the ZIP file itself, so that extraction
tools can extract the files to a subdirectory, rather than spilling its
contents to the working directory.
</content>
</entry>
<entry>
<title>zip.c: Const-qualify bn</title>
<updated>2026-09-27T21:11:08+00:00</updated>
<author>
<name>Xavier Del Campo Romero</name>
<email>xavi92@disroot.org</email>
</author>
<published>2026-09-27T21:11:08+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/slcl/commit/?id=ebf718f8be84c3785ed8744e214388ea556ebccb'/>
<id>urn:sha1:ebf718f8be84c3785ed8744e214388ea556ebccb</id>
<content type='text'>
Even if basename(3) does modify the input string [1], the returned
pointer is only used as a reference in this context.

[1]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/basename.html
</content>
</entry>
<entry>
<title>zip.c: Fix endless loop on empty archives</title>
<updated>2025-10-10T07:40:34+00:00</updated>
<author>
<name>Xavier Del Campo Romero</name>
<email>xavi92@disroot.org</email>
</author>
<published>2025-10-10T07:40:34+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/slcl/commit/?id=942559d321551e93cd6bae0b03de03e7cc13042c'/>
<id>urn:sha1:942559d321551e93cd6bae0b03de03e7cc13042c</id>
<content type='text'>
When an empty directory is to be downloaded, z-&gt;lread would always equal
zero because read_file is never called.

Therefore, it is more sensible not to assume any number of bytes, and
just dump as much data as possible into buf.
</content>
</entry>
<entry>
<title>zip.c: Remove unused variable</title>
<updated>2025-10-10T07:40:18+00:00</updated>
<author>
<name>Xavier Del Campo Romero</name>
<email>xavi92@disroot.org</email>
</author>
<published>2025-10-10T07:40:18+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/slcl/commit/?id=80d179f9fe013d727f571f4730ebbe4d228c9382'/>
<id>urn:sha1:80d179f9fe013d727f571f4730ebbe4d228c9382</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Use free function pointer for chunk/step</title>
<updated>2025-10-08T00:03:17+00:00</updated>
<author>
<name>Xavier Del Campo Romero</name>
<email>xavi92@disroot.org</email>
</author>
<published>2025-10-07T23:59:05+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/slcl/commit/?id=805630dbfcd409a5d49bc89102f4183b71f713f9'/>
<id>urn:sha1:805630dbfcd409a5d49bc89102f4183b71f713f9</id>
<content type='text'>
libweb now supports deallocating user-defined data whenever an error
occurs during a chunked transfer or an asynchronous HTTP response, thus
avoiding memory leaks.
</content>
</entry>
<entry>
<title>Implement directory download as ZIP</title>
<updated>2025-10-08T00:03:05+00:00</updated>
<author>
<name>Xavier Del Campo Romero</name>
<email>xavi92@disroot.org</email>
</author>
<published>2025-10-06T21:02:51+00:00</published>
<link rel='alternate' type='text/html' href='https://gitea.privatedns.org/xavi/slcl/commit/?id=00dd37604d50cbf3fb27ec0631b4d4b6d2ee893a'/>
<id>urn:sha1:00dd37604d50cbf3fb27ec0631b4d4b6d2ee893a</id>
<content type='text'>
Thanks to the fdzipstream library [1] and zlib [2], it is possible to
generate ZIP files on-the-fly, therefore requiring no extra disk space
usage and only a small amount of memory.

Unfortunately, as of the time of this writing fdzipstream is not
packaged by any distributions yet [3], so it had to be imported as a git
submodule as a workaround.

While libarchive [4] could be an interesting alternative, writing ZIP
files is only supported by very recent versions (&gt;= 3.8.0), which are
still not packaged by many distributions [5], either.

Moreover, libarchive is a package with several dependencies other than
zlib and is significantly larger compared to fdzipstreams, so
fdzipstreams was ultimately considered a better fit for this purpose.

[1]: https://github.com/CTrabant/fdzipstream.git
[2]: http://zlib.net/
[3]: https://repology.org/projects/?search=fdzipstream
[4]: https://www.libarchive.org/
[5]: https://repology.org/project/libarchive/versions
</content>
</entry>
</feed>
