]> granicus.if.org Git - zziplib/commitdiff
This commit was generated by cvs2svn to compensate for changes in r117,
authorGuido Draheim <guidod@gmx.de>
Mon, 18 Aug 2003 17:12:51 +0000 (17:12 +0000)
committerGuido Draheim <guidod@gmx.de>
Mon, 18 Aug 2003 17:12:51 +0000 (17:12 +0000)
which included commits to RCS files with non-trunk default branches.

docs/body.htm [new file with mode: 0644]
docs/manpages.ar [new file with mode: 0644]
docs/zzip-file.htm [new file with mode: 0644]
docs/zziplib.html [new file with mode: 0644]

diff --git a/docs/body.htm b/docs/body.htm
new file mode 100644 (file)
index 0000000..fb8be6a
--- /dev/null
@@ -0,0 +1,84 @@
+<html><head><title>zziplib</title>
+  <style>
+   a:link          { text-decoration : none ; color : #000080 ; }
+   a:visited       { text-decoration : none ; color : #200060 ; }
+   .justify        { text-align : justify ; }
+  </style>
+</head><body>
+
+<table width="100%"><tr valign="top"><td bgcolor="#F0F0F0" width="145">
+<center>
+     <big><big><big><b>
+     <font color="#800080"><sup>Z</sup>ZIP<sub>lib</sub></font>
+     </b></big></big></big>
+<br><big><b> <!--VERSION--> </b></big>
+</center>
+<hr>
+
+<br> <a alt="zzip-index - Overview"
+       href="zzip-index.html">Library</a>
+<br>-<a alt="zzip-zip - Accessing Zip Archives with ZLib Decompression"
+       href="zzip-zip.html">ZIP Access</a>
+<br>-<a alt="zzip-file - Using Zipped Files Transparently"
+       href="zzip-file.html">Transparently</a>
+<br>-<a alt="zzip-sdl-rwops - Example to make an SDL_rwops Inteface" 
+       href="zzip-sdl-rwops.html">SDLrwops Example</a>
+<br>-<a alt="zzip-extio - Customizing the file access" 
+       href="zzip-extio.html">ext/io Customization</a>
+<br>-<a alt="zzip-xor - Using obfuscations like xor"  
+       href="zzip-xor.html">xor/io Obfuscation</a>
+<br>-<a alt="zzip-api - The complete API description"
+       href="zzip-api.html">Library API</a>
+<br>-<a alt="zzip-parse - About zip parsing internals" 
+       href="zzip-parse.html">Parsing ZIPs</a>
+<br>-<a alt="64on32 - About largefile problems" 
+       href="64on32.html">64on32 extras</a>
+<br>-<a alt="future - What next to come" 
+       href="future.html">Next To Come</a>
+<br>-<a alt="configs - To Configure Your zziplib-based software"
+       href="configs.html">Config Helpers</a>
+<br>-<a alt="sfx-make - to combine an EXE with a ZIP archive"
+       href="sfx-make.html">Making a zip/exe</a>
+<br>-<a alt="history - Hints And Links" 
+       href="history.html">Hints And Links</a>
+<br>-<a alt="referentials - Where it is used" 
+       href="referentials.html">Referentials</a>
+<br>-<a alt="zziplib - The Functions List (autogenerated)"
+       href="zziplib.html">Functions List #</a>
+<!--START-->
+<br>-<a alt="zzip/man - The Manual Pages (autogenerated)"
+       href="man/index.html">The Manual Pages #</a>
+<!--ENDS-->
+
+<br>&nbsp&nbsp&nbsp <small>(#&nbsp;autogenerated)</small>
+
+<br>&nbsp;<hr>
+
+<br><b><a alt="Tarballs, RPM-archive and windll-ZIPs can be downloaded from" 
+  href="http://sourceforge.net/project/showfiles.php?group_id=6389">
+ Download Area *</a></b>
+<br><a alt="Sourceforge Project Index Page"
+     href="http://sourceforge.net/projects/zziplib">Sourceforge Project</a>
+<br><a alt="the zziplib webpage at sourceforge"
+     href="http://zziplib.sourceforge.net">zziplib.sf.net 
+                                  <small><i>Home</i></small></a>
+
+<br><small><a alt="zziplib - license details"
+       href="copying.html">LGPL/MPL license</a></small>
+<br>&nbsp;
+<hr>
+<center><!--START-->
+     <a href="http://sourceforge.net/project/?group_id=6389">
+        <img src="http://sourceforge.net/sflogo.php?group_id=6389&type=2"
+            border="0" alt="sourceforge.net" width="125" height="37">
+     </a>
+</center><!--ENDS-->
+
+<p align="right"><small>
+generated <!--DATE-->
+</small>
+<br> <small>(C)</small> Guido Draheim
+<br><i> guidod<small>@</small>gmx.de</i>
+</p>
+
+</td><td> 
diff --git a/docs/manpages.ar b/docs/manpages.ar
new file mode 100644 (file)
index 0000000..2e4426d
--- /dev/null
@@ -0,0 +1,3295 @@
+!<arch>
+//                                              584       `
+zzip_compr_str.3/
+zzip_createdir.3/
+zzip_dir_alloc.3/
+zzip_dir_alloc_ext_io.3/
+zzip_dir_close.3/
+zzip_dir_creat.3/
+zzip_dir_creat_ext_io.3/
+zzip_dir_fdopen.3/
+zzip_dir_fdopen_ext_io.3/
+zzip_dirhandle.3/
+zzip_dir_open_ext_io.3/
+zzip_file_close.3/
+zzip_file_creat.3/
+zzip_file_mkdir.3/
+zzip_file_open.3/
+zzip_file_read.3/
+zzip_file_real.3/
+zzip_file_write.3/
+__zzip_find_disk_trailer.3/
+zzip_get_default_io.3/
+zzip_inflate_init.3/
+zzip_opendir_ext_io.3/
+zzip_open_ext_io.3/
+zzip_open_shared_io.3/
+__zzip_parse_root_directory.3/
+zzip_rewinddir.3/
+zzip_strerror_of.3/
+__zzip_try_open.3/
+
+zzip_close.3/   1061226771  500   0     100664  23        `
+.so man3/zzip_fclose.3
+
+zzip_closedir.3/1061226771  500   0     100664  1236      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_CLOSEDIR" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_closedir \- (zzip/dir.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 19
+int\ \fBzzip_closedir\fR\ (ZZIP_DIR*\ dir);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_closedir\fR function is the equivalent of \fBclosedir\fR(3) for a realdir or zipfile.
+
+.PP
+The \fBzzip_closedir\fR function is magic - if the given arg-ZZIP_DIR is a real directory, it will call the real \fBclosedir\fR(3) and then free the wrapping ZZIP_DIR structure. Otherwise it will divert to \fBzzip_dir_close\fR which will free the ZZIP_DIR structure.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+/0              1061226771  500   0     100664  981       `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_COMPR_STR" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_compr_str \- (zzip/info.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 29
+zzip_char_t*\ \fBzzip_compr_str\fR\ (int\ compr);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+return static const string of the known compression methods, otherwise just "zipped" is returned
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+zzip_creat.3/   1061226771  500   0     100664  22        `
+.so man3/zzip_mkdir.3
+/18             1061226771  500   0     100664  2592      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_CREATEDIR" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_createdir \- create a new archive area for writing
+.SH "SYNOPSIS"
+
+
+ #include <zzip/zzip.h>
+
+.sp
+.ad l
+.hy 0
+.HP 26
+ZZIP_DIR*\ \fBzzip_createdir\fR\ (zzip_char_t*\ name, int\ o_mode);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+
+
+.PP
+The \fBzzip_createdir\fR function will create a new archive area. This may either be a a new zip archive or a new directory in the filesystem. The returned parameter is a new "zzip dir" handle that should be saved to a variable so it can be used a base argument for \fBzzip_file_mkdir\fR and \fBzzip_file_creat\fR calls. The returned handle wraps both possibilities, it can be representing a zip central directory that must be saved to disk using \fBzzip_closedir\fR or it is just a handle for the name of the real directory that still must be run through \fBzzip_closedir\fR to release the wrapper around the directory name.
+
+.PP
+The magic is pushed through the o_mode argument. Using a mode that has no group-write bit set (S_IWGRP = 0040) then the file is created as a zip directory. Note that this is unabridged of any umask value in the system where the argument to the \fBzzip_createdir\fR function could be 0775 but with an umask of 0755 it turns out as 0755 for a real directory. Using 0755 directly would not create it as a real directory but as a zip archive handle.
+
+.PP
+The \fBzzip_createdir\fR function is not yet implemented, check for #def ZZIP_NO_CREAT Write-support will extend \fBzzip_closedir\fR with semantics to finalize the zip-archive by writing the zip-trailer and closing the archive file.
+
+.PP
+Returns null on error and sets errno. Remember, according to posix the \fBcreat\fR(2) call is equivalent to 
+
+.IP
+.nf
+  open (path, O_WRONLY | O_CREAT | O_TRUNC, o_mode) 
+.fi
+ so any previous zip-archive will be overwritten unconditionally and EEXIST errors from \fBmkdir\fR(2) are suppressed. (fixme: delete the given subtree? like suggested by O_TRUNC? not done so far!)
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+/36             1061226771  500   0     100664  33        `
+.so man3/zzip_dir_alloc_ext_io.3
+
+/54             1061226771  500   0     100664  1656      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_DIR_ALLOC_EXT_IO" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_dir_alloc_ext_io, zzip_dir_alloc \- (zzip/zip.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>                                  // archive handling 
+
+
+.sp
+.ad l
+.hy 0
+.HP 33
+ZZIP_DIR*\ \fBzzip_dir_alloc_ext_io\fR\ (zzip_strings_t*\ ext, const\ zzip_plugin_io_t\ io);
+.HP 26
+ZZIP_DIR*\ \fBzzip_dir_alloc\fR\ (zzip_strings_t*\ fileext);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+allocate a new ZZIP_DIR handle and do basic initializations before usage by \fBzzip_dir_fdopen\fR  \fBzzip_dir_open\fR  \fBzzip_file_open\fR or through \fBzzip_open\fR (ext==null flags uses { ".zip" , ".ZIP" } ) (io ==null flags use of posix io defaults)
+
+.PP
+the \fBzzip_dir_alloc\fR function is obsolete - it was generally used for implementation and exported to let other code build on it. It is now advised to use \fBzzip_dir_alloc_ext_io\fR now on explicitly, just set that second argument to zero to achieve the same functionality as the old style.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <too@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the  
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+/79             1061226771  500   0     100664  1087      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_DIR_CLOSE" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_dir_close \- (zzip/zip.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>                                  // archive handling 
+
+
+.sp
+.ad l
+.hy 0
+.HP 20
+int\ \fBzzip_dir_close\fR\ (ZZIP_DIR\ *\ dir);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+It will also \fBfree\fR(2) the \fBZZIP_DIR\fR-handle given. the counterpart for \fBzzip_dir_open\fR see also \fBzzip_dir_free\fR 
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <too@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the  
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/97             1061226771  500   0     100664  2505      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_DIR_CREAT" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_dir_creat, zzip_dir_creat_ext_io \- create a new zip archive for writing
+.SH "SYNOPSIS"
+
+
+ #include <zzip/zzip.h>
+
+.sp
+.ad l
+.hy 0
+.HP 26
+ZZIP_DIR*\ \fBzzip_dir_creat\fR\ (zzip_char_t*\ name, int\ o_mode);
+.HP 33
+ZZIP_DIR*\ \fBzzip_dir_creat_ext_io\fR\ (zzip_char_t*\ name, int\ o_mode, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+
+
+.PP
+The \fBzzip_dir_creat\fR function will create a new zip archive. The returned parameter is a new "zzip dir" handle that should be saved to a variable so it can be used a base argument for \fBzzip_mkdir\fR and \fBzzip_creat\fR calls. The returned handle represents a zip central directory that must be saved to disk using \fBzzip_closedir\fR.
+
+.PP
+Returns null on error and sets errno. Remember, according to posix the \fBcreat\fR(2) call is equivalent to 
+
+.IP
+.nf
+  open (path, O_WRONLY | O_CREAT | O_TRUNC, o_mode) 
+.fi
+ so any previous zip-archive will be overwritten unconditionally and EEXIST errors from \fBmkdir\fR(2) are suppressed. (fixme: delete the given subtree? like suggested by O_TRUNC? not done so far!)
+
+.PP
+
+
+.PP
+If the third argument "ext" has another special meaning here, as it is used to ensure that a given zip-file is created with the first entry of the ext-list appended as an extension unless the file-path already ends with a file-extension registered in the list. Therefore {"",0} matches all files and creates them as zip-archives under the given nonmodified name. (Some magic here? If the path ends in the path separator then make a real directory even in the presence of ext-list?)
+
+.PP
+The \fBzzip_dir_creat_ext_io\fR function is not yet implemented, check for #def ZZIP_NO_CREAT Write-support will extend \fBzzip_closedir\fR with semantics to finalize the zip-archive by writing the zip-trailer and closing the archive file.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/115            1061226771  500   0     100664  26        `
+.so man3/zzip_dir_creat.3
+zzip_dirfd.3/   1061226771  500   0     100664  26        `
+.so man3/zzip_dirhandle.3
+/140            1061226771  500   0     100664  1637      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_DIR_FDOPEN" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_dir_fdopen, zzip_dir_fdopen_ext_io \- (zzip/zip.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>                                  // archive handling 
+
+
+.sp
+.ad l
+.hy 0
+.HP 29
+ZZIP_DIR\ *\ \fBzzip_dir_fdopen\fR\ (int\ fd, zzip_error_t\ *\ errcode_p);
+.HP 36
+ZZIP_DIR\ *\ \fBzzip_dir_fdopen_ext_io\fR\ (int\ fd, zzip_error_t\ *\ errcode_p, zzip_strings_t*\ ext, const\ zzip_plugin_io_t\ io);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+used by the \fBzzip_dir_open\fR and zzip_opendir(2) call. Opens the zip-archive as specified with the fd which points to an already openend file. The \fBzzip_dir_fdopen\fR function then search and parse the zip's central directory.
+
+.PP
+NOTE: refcount is zero, so an _open/_close pair will also delete this _dirhandle
+
+.PP
+the \fBzzip_dir_fdopen_ext_io\fR function uses explicit ext and io instead of the internal defaults, setting these to zero is equivalent to \fBzzip_dir_fdopen\fR 
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <too@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the  
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/159            1061226771  500   0     100664  27        `
+.so man3/zzip_dir_fdopen.3
+
+zzip_dir_free.3/1061226771  500   0     100664  1284      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_DIR_FREE" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_dir_free \- (zzip/zip.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>                                  // archive handling 
+
+
+.sp
+.ad l
+.hy 0
+.HP 19
+int\ \fBzzip_dir_free\fR\ (ZZIP_DIR\ *\ dir);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+will free the zzip_dir handle unless there are still zzip_files attached (that may use its cache buffer). This is the inverse of \fBzzip_dir_alloc\fR , and both are helper functions used implicitly in other zzipcalls e.g. \fBzzip_dir_close\fR = zzip_close
+
+.PP
+returns zero on sucess returns the refcount when files are attached.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <too@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the  
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+/185            1061226771  500   0     100664  1426      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_DIRHANDLE" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_dirhandle, zzip_dirfd \- (zzip/info.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 28
+ZZIP_DIR\ *\ \fBzzip_dirhandle\fR\ (ZZIP_FILE\ *\ fp);
+.HP 16
+int\ \fBzzip_dirfd\fR\ (ZZIP_DIR*\ dir);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_dirhandle\fR function will just return fp->dir
+
+.PP
+If a ZZIP_FILE is contained within a zip-file that one will be a valid pointer, otherwise a NULL is returned and the ZZIP_FILE wraps a real file.
+
+.PP
+The \fBzzip_dirfd\fR function will just return dir->fd
+
+.PP
+If a ZZIP_DIR does point to a zipfile then the file-descriptor of that zipfile is returned, otherwise a NULL is returned and the ZZIP_DIR wraps a real directory DIR (if you have dirent on your system).
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+zzip_dir_open.3/1061226771  500   0     100664  1463      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_DIR_OPEN" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_dir_open, zzip_dir_open_ext_io \- (zzip/zip.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>                                  // archive handling 
+
+
+.sp
+.ad l
+.hy 0
+.HP 25
+ZZIP_DIR*\ \fBzzip_dir_open\fR\ (zzip_char_t*\ filename, zzip_error_t*\ e);
+.HP 32
+ZZIP_DIR*\ \fBzzip_dir_open_ext_io\fR\ (zzip_char_t*\ filename, zzip_error_t*\ e, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+Opens the zip-archive (if available). the two ext_io arguments will default to use posix io and a set of default fileext that can atleast add .zip ext itself.
+
+.PP
+the \fBzzip_dir_open_ext_io\fR function uses explicit ext and io instead of the internal defaults. Setting these to zero is equivalent to \fBzzip_dir_open\fR 
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <too@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the  
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/203            1061226771  500   0     100664  25        `
+.so man3/zzip_dir_open.3
+
+zzip_dir_read.3/1061226771  500   0     100664  1112      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_DIR_READ" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_dir_read \- (zzip/zip.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>                                  // archive handling 
+
+
+.sp
+.ad l
+.hy 0
+.HP 19
+int\ \fBzzip_dir_read\fR\ (ZZIP_DIR\ *\ dir, ZZIP_DIRENT\ *\ d);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+fills the dirent-argument with the values and increments the read-pointer of the dir-argument.
+
+.PP
+returns 0 if there no entry (anymore).
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <too@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the  
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+zzip_dir_real.3/1061226771  500   0     100664  26        `
+.so man3/zzip_file_real.3
+zzip_dir_stat.3/1061226771  500   0     100664  1151      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_DIR_STAT" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_dir_stat \- (zzip/stat.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 19
+int\ \fBzzip_dir_stat\fR\ (ZZIP_DIR\ *\ dir, zzip_char_t*\ name, ZZIP_STAT\ *\ zs, int\ flags);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+obtain information about a filename in an opened zip-archive without opening that file first. Mostly used to obtain the uncompressed size of a file inside a zip-archive. see \fBzzip_dir_open\fR.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+zzip_errno.3/   1061226771  500   0     100664  1189      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_ERRNO" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_errno \- (zzip/err.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 16
+int\ \fBzzip_errno\fR\ (int\ errcode);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+map the error code to a system error code. This is used for the drop-in replacement functions to return a value that can be interpreted correctly by code sections that are unaware of the fact they their \fBopen\fR(2) call had been diverted to a file inside a zip-archive.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim
+           All rights reserved,
+           use under the restrictions of the
+           Lesser GNU General Public License
+           or alternatively the restrictions 
+           of the Mozilla Public License 1.1
+.fi
+
+
+zzip_error.3/   1061226771  500   0     100664  1159      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_ERROR" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_error, zzip_seterror \- (zzip/info.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 16
+int\ \fBzzip_error\fR\ (ZZIP_DIR\ *\ dir);
+.HP 20
+void\ \fBzzip_seterror\fR\ (ZZIP_DIR\ *\ dir, int\ errcode);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+just returns dir->errcode of the ZZIP_DIR handle see: \fBzzip_dir_open\fR, \fBzzip_diropen\fR, \fBzzip_readdir\fR, \fBzzip_dir_read\fR 
+
+.PP
+The \fBzzip_seterror\fR function just does dir->errcode = errcode
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+zzip_fclose.3/  1061226771  500   0     100664  1191      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_FCLOSE" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_fclose, zzip_close \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 17
+int\ \fBzzip_fclose\fR\ (ZZIP_FILE\ *\ fp);
+.HP 16
+int\ \fBzzip_close\fR\ (ZZIP_FILE*\ fp);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_fclose\fR function closes the given ZZIP_FILE handle.
+
+.PP
+If the ZZIP_FILE wraps a normal stat'fd then it is just that int'fd that is being closed and the otherwise empty ZZIP_FILE gets freed.
+
+.PP
+
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/227            1061226771  500   0     100664  1227      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_FILE_CLOSE" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_file_close \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 21
+int\ \fBzzip_file_close\fR\ (ZZIP_FILE\ *\ fp);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+the direct function of \fBzzip_close\fR(fp). it will cleanup the inflate-portion of \fBzlib\fR and free the structure given.
+
+.PP
+it is called quite from the error-cleanup parts of the various \fB_open\fR functions.
+
+.PP
+the .refcount is decreased and if zero the fp->dir is closed just as well.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/246            1061226771  500   0     100664  3199      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_FILE_CREAT" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_file_creat, zzip_file_mkdir \- start next file entry in a zip archive creat(2)
+.SH "SYNOPSIS"
+
+
+ #include <zzip/zzip.h>
+
+.sp
+.ad l
+.hy 0
+.HP 28
+ZZIP_FILE*\ \fBzzip_file_creat\fR\ (ZZIP_DIR*\ dir, zzip_char_t*\ name, int\ o_mode);
+.HP 21
+int\ \fBzzip_file_mkdir\fR\ (ZZIP_DIR*\ dir, zzip_char_t*\ name, int\ o_mode);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+
+
+.PP
+The \fBzzip_file_creat\fR function will create a new file within a zzip archive, the one given as the primary argument and additionally to the posix creat(2) - just like zzip_mkdir has an additional argument over the posix mkdir(2) spec. For the \fBzzip_file_creat\fR function the primary parameter can be null as well thereby creating a real file instead of a new one inside the zip-archive otherwise given. If the primary parameter is not null but wraps a real directory then all new files are also real.
+
+.PP
+The \fBzzip_file_creat\fR function is not yet implemented, check for #def ZZIP_NO_CREAT
+
+.PP
+Returns NULL on an error setting errno, and opening a file _within_ a zip archive using O_RDONLY (and similar stuff) will surely lead to an error.
+
+.PP
+
+
+.PP
+The \fBzzip_file_mkdir\fR function has an additional primary argument over the posix mkdir(2) - if it is null then the \fBzzip_file_mkdir\fR function behaves just like posix mkdir(2). The zzip_dir argument can be set to the result of a \fBzzip_createdir\fR which allows for some magic that the given directory name is created as an entry in the zip archive.
+
+.PP
+If the given dir name argument is not within the basepath of the zip central directory then a real directory is created. Any EEXIST errors are not suppressed unlike with \fBzzip_createdir\fR 
+
+.PP
+Standard usage accepts a global/threaded/modular ZZIP_DIR pointer for all zip archive operations like in: 
+
+.IP
+.nf
+  ZZIP_DIR* zip = zzip_createdir (sysconfpath, 0755, zip);  
+   zzip_file_mkdir (zip, filepath[i], 0755);  
+   ZZIP_FILE* file = zzip_file_creat (zip, filename[i], 0644);  
+   zzip_write (file, buf, len);  
+   zzip_close (file); file = 0;  
+   zzip_closedir (zip); zip = 0; 
+.fi
+
+.PP
+compare with \fBzzip_mkdir\fR inline macro which allows to collapse the examples script to 
+
+.IP
+.nf
+  #define zzip_savefile myproject_saveconfig  
+   #include <zzip/zzip.h>  
+   ZZIP_DIR* zzip_savefile = zzip_createdir (sysconfpath, 0755);  
+   zzip_mkdir (filepath[i], 0755);  
+   ZZIP_FILE* file = zzip_creat(filepath[i], 0644);  
+   zzip_write (file, buf, len);  
+   zzip_close (file); file = 0;  
+   zzip_closedir (zip_savefile); 
+.fi
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/265            1061226771  500   0     100664  27        `
+.so man3/zzip_file_creat.3
+
+/284            1061226771  500   0     100664  1279      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_FILE_OPEN" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_file_open \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 29
+ZZIP_FILE\ *\ \fBzzip_file_open\fR\ (ZZIP_DIR\ *\ dir, zzip_char_t*\ name, int\ o_mode);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+open an \fBZZIP_FILE\fR from an already open \fBZZIP_DIR\fR handle. Since we have a chance to reuse a cached \fBbuf32k\fR and \fBZZIP_FILE\fR memchunk this is the best choice to unpack multiple files.
+
+.PP
+Note: the zlib supports 2..15 bit windowsize, hence we provide a 32k memchunk here... just to be safe.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/302            1061226771  500   0     100664  1574      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_FILE_READ" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_file_read \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 29
+zzip_ssize_t\ \fBzzip_file_read\fR\ (ZZIP_FILE\ *\ fp, char\ *\ buf, zzip_size_t\ len);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_file_read\fR functions read data from zip-contained file.
+
+.PP
+It works like \fBread\fR(2) and will fill the given buffer with bytes from the opened file. It will return the number of bytes read, so if the \fBEOF\fR is encountered you will be prompted with the number of bytes actually read.
+
+.PP
+This is the routines that needs the \fBbuf32k\fR buffer, and it would have need for much more polishing but it does already work quite well.
+
+.PP
+Note: the 32K buffer is rather big. The original inflate-algorithm required just that but the latest zlib would work just fine with a smaller buffer.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+/320            1061226771  500   0     100664  1785      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_FILE_REAL" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_file_real, zzip_dir_real, zzip_realdir, zzip_realfd \- (zzip/info.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 20
+int\ \fBzzip_file_real\fR\ (ZZIP_FILE*\ fp);
+.HP 19
+int\ \fBzzip_dir_real\fR\ (ZZIP_DIR*\ dir);
+.HP 20
+void*\ \fBzzip_realdir\fR\ (ZZIP_DIR*\ dir);
+.HP 17
+int\ \fBzzip_realfd\fR\ (ZZIP_FILE*\ fp);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_file_real\fR function checks if the ZZIP_FILE-handle is wrapping a real file or a zip-contained file. Returns 1 for a stat'able file, and 0 for a file inside a zip-archive.
+
+.PP
+The \fBzzip_dir_real\fR function checks if the ZZIP_DIR-handle is wrapping a real directory or a zip-archive. Returns 1 for a stat'able directory, and 0 for a handle to zip-archive.
+
+.PP
+The \fBzzip_realdir\fR function returns the posix DIR* handle (if one exists). Check before with \fBzzip_dir_real\fR if the the ZZIP_DIR points to a real directory.
+
+.PP
+The \fBzzip_realfd\fR function returns the posix file descriptor (if one exists). Check before with \fBzzip_file_real\fR if the the ZZIP_FILE points to a real file.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/338            1061226771  500   0     100664  22        `
+.so man3/zzip_write.3
+/357            1061226771  500   0     100664  1241      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "__ZZIP_FIND_DISK_TRAILER" 3 "0.13.23" "zziplib" ""
+.SH NAME
+__zzip_find_disk_trailer \- (zzip/zip.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>                                  // archive handling 
+
+
+.sp
+.ad l
+.hy 0
+.HP 30
+int\ \fB__zzip_find_disk_trailer\fR\ (int\ fd, zzip_off_t\ filesize, struct\ zzip_disk_trailer\ *\ trailer, zzip_plugin_io_t\ io);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fB__zzip_find_disk_trailer\fR function is used by \fBzzip_file_open\fR. It tries to find the zip's central directory info that is usually a few bytes off the end of the file.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <too@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the  
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+zzip_fopen.3/   1061226771  500   0     100664  4264      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_FOPEN" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_fopen, zzip_freopen \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 23
+ZZIP_FILE*\ \fBzzip_fopen\fR\ (zzip_char_t*\ filename, zzip_char_t*\ mode);
+.HP 25
+ZZIP_FILE*\ \fBzzip_freopen\fR\ (zzip_char_t*\ filename, zzip_char_t*\ mode, ZZIP_FILE*\ stream);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_fopen\fR function will \fBfopen\fR(3) a real/zipped file.
+
+.PP
+It has some magic functionality builtin - it will first try to open the given filename as a normal file. If it does not exist, the given path to the filename (if any) is split into its directory-part and the file-part. A ".zip" extension is then added to the directory-part to create the name of a zip-archive. That zip-archive (if it exists) is being searched for the file-part, and if found a zzip-handle is returned.
+
+.PP
+Note that if the file is found in the normal fs-directory the returned structure is mostly empty and the \fBzzip_read\fR call will use the libc \fBread\fR to obtain data. Otherwise a \fBzzip_file_open\fR is performed and any error mapped to \fBerrno\fR(3).
+
+.PP
+unlike the posix-wrapper \fBzzip_open\fR the mode-argument is a string which allows for more freedom to support the extra zzip modes called ZZIP_CASEINSENSITIVE and ZZIP_IGNOREPATH. Currently, this \fBzzip_fopen\fR call will convert the following characters in the mode-string into their corrsponding mode-bits:
+
+.nf
+
+\fB "r" : O_RDONLY : \fR read-only 
+   \fB "b" : O_BINARY : \fR binary (win32 specific) 
+   \fB "f" : O_NOCTTY : \fR no char device (unix) 
+   \fB "i" : ZZIP_CASELESS : \fR inside zip file 
+   \fB "*" : ZZIP_NOPATHS : \fR inside zip file only 
+   
+.fi
+
+.PP
+all other modes will be ignored for zip-contained entries but they are transferred for compatibility and portability, including these extra sugar bits:
+
+.nf
+
+\fB "x" : O_EXCL :\fR fail if file did exist 
+   \fB "s" : O_SYNC :\fR synchronized access 
+   \fB "n" : O_NONBLOCK :\fR nonblocking access 
+   \fB "z#" : compression level :\fR for zlib 
+   \fB "g#" : group access :\fR unix access bits 
+   \fB "u#" : owner access :\fR unix access bits 
+   \fB "o#" : world access :\fR unix access bits 
+   
+.fi
+
+.PP
+... the access bits are in traditional unix bit format with 7 = read/write/execute, 6 = read/write, 4 = read-only.
+
+.PP
+The default access mode is 0664, and the compression level is ignored since the lib can not yet write zip files, otherwise it would be the initialisation value for the zlib deflateInit where 0 = no-compression, 1 = best-speed, 9 = best-compression.
+
+.PP
+
+
+.PP
+The \fBzzip_freopen\fR function receives an additional argument pointing to a ZZIP_FILE* being already in use. If this extra argument is null then the \fBzzip_freopen\fR function is identical with calling \fBzzip_fopen\fR 
+
+.PP
+Per default, the old file stream is closed and only the internal structures associated with it are kept. These internal structures may be reused for the return value, and this is a lot quicker when the filename matches a zipped file that is incidently in the very same zip arch as the old filename wrapped in the stream struct.
+
+.PP
+That's simply because the zip arch's central directory does not need to be read again. As an extension for the \fBzzip_freopen\fR function, if the mode-string contains a "q" then the old stream is not closed but left untouched, instead it is only given as a hint that a new file handle may share/copy the zip arch structures of the old file handle if that is possible, i.e when they are in the same zip arch.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+zzip_fread.3/   1061226771  500   0     100664  21        `
+.so man3/zzip_read.3
+
+zzip_freopen.3/ 1061226771  500   0     100664  22        `
+.so man3/zzip_fopen.3
+zzip_fwrite.3/  1061226771  500   0     100664  22        `
+.so man3/zzip_write.3
+__zzip_get16.3/ 1061226771  500   0     100664  24        `
+.so man3/__zzip_get32.3
+__zzip_get32.3/ 1061226771  500   0     100664  1255      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "__ZZIP_GET32" 3 "0.13.23" "zziplib" ""
+.SH NAME
+__zzip_get32, __zzip_get16 \- (zzip/zip.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>                                  // archive handling 
+
+
+.sp
+.ad l
+.hy 0
+.HP 23
+uint32_t\ \fB__zzip_get32\fR\ (unsigned\ char\ *\ s);
+.HP 23
+uint16_t\ \fB__zzip_get16\fR\ (unsigned\ char\ *\ s);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+Make 32 bit value in host byteorder from little-endian mapped octet-data (works also on machines which SIGBUS on misaligned data access (eg. 68000))
+
+.PP
+The \fB__zzip_get16\fR function does the same for a 16 bit value.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <too@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the  
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/385            1061226771  500   0     100664  24        `
+.so man3/zzip_init_io.3
+/408            1061226771  500   0     100664  1071      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_INFLATE_INIT" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_inflate_init \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 31
+static\ int\ \fBzzip_inflate_init\fR\ (ZZIP_FILE\ *\ fp, struct\ zzip_dir_hdr*\ hdr);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+call \fBinflateInit\fR and setup fp's iterator variables, used by lowlevel \fB_open\fR functions.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+zzip_init_io.3/ 1061226771  500   0     100664  1289      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_INIT_IO" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_init_io, zzip_get_default_io \- (zzip/plugin.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>
+
+.sp
+.ad l
+.hy 0
+.HP 18
+int\ \fBzzip_init_io\fR\ (zzip_plugin_io_handlers_t\ io, int\ flags);
+.HP 38
+zzip_plugin_io_t\ \fBzzip_get_default_io\fR\ ();
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_init_io\fR function initializes the users handler struct to default values being the posix io functions in default configured environments.
+
+.PP
+The \fBzzip_get_default_io\fR function returns a zzip_plugin_io_t handle to static defaults wrapping the posix io file functions for actual file access.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Mike Nordell <tamlin@algonet.se>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+zzip_mkdir.3/   1061226771  500   0     100664  2299      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_MKDIR" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_mkdir, zzip_creat \- create a zipped file/directory
+.SH "SYNOPSIS"
+
+
+ #include <zzip/zzip.h>
+
+.sp
+.ad l
+.hy 0
+.HP 16
+int\ \fBzzip_mkdir\fR\ (zzip_char_t*\ name, int\ o_mode);
+.HP 23
+ZZIP_FILE*\ \fBzzip_creat\fR\ (zzip_char_t*\ name, int\ o_mode);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+
+
+.PP
+The \fBzzip_mkdir\fR function creates a directory entry in the default zip-archive. If you did not specify a "#define zzip_savefile somevar" then the default zip-archive is null and all directories are created as real directories in the filesystem. The \fBzzip_mkdir\fR function is really a preprocessor macro or preferably an inline function around \fBzzip_file_mkdir\fR, there is no such symbol generated into the library. The prototype is modelled after the posix \fBmkdir\fR(2) call. 
+
+.IP
+.nf
+  #ifndef zzip_savefile  
+   #define zzip_savefile 0  
+   #endif  
+   #define zzip_mkdir(name,mode) \\ - 
+.fi
+ zzip_file_mkdir(zzip_savefile,name,mode)
+
+.PP
+
+
+.PP
+
+
+.PP
+The \fBzzip_creat\fR function creates a file in the default zip-archive. If you did not specify a "#define zzip_savefile somevar" then the default zip-archive is null and all files are created as real files. The \fBzzip_creat\fR function is really a preprocessor macro or preferably an inline function around \fBzzip_file_creat\fR, there is no such symbol generated into the library. The prototype is modelled after the posix \fBcreat\fR(2) call. 
+
+.IP
+.nf
+  #ifndef zzip_savefile  
+   #define zzip_savefile 0  
+   #endif  
+   #define zzip_creat(name,mode) \\ - 
+.fi
+ zzip_file_creat(zzip_savefile,name,mode)
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+.SH "SEE ALSO"
+ zzip_dir_creat, mkdir(2),  creat(2), zzip_start
+
+
+zzip_mkfifo.3/  1061226771  500   0     100664  2724      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_MKFIFO" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_mkfifo, zzip_sync \- start writing to the magic zzip_savefile
+.SH "SYNOPSIS"
+
+
+ #include <zzip/zzip.h>
+
+.sp
+.ad l
+.hy 0
+.HP 18
+void\ \fBzzip_mkfifo\fR\ (zzip_char_t*\ name, int\ o_mode);
+.HP 16
+void\ \fBzzip_sync\fR\ (void);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+
+
+.PP
+open a zip archive for writing via the magic zzip_savefile macro variable. The name and mode are given to \fBzzip_createdir\fR and the result is stored into \fBzzip_savefile\fR - if the \fBzzip_savefile\fR did already have a zzip_dir handle then it is automatically finalized with \fBzzip_sync\fR and the handle closed and the zzip_savefile variable reused for the new zip archive just started with this call. - The \fBzzip_mkfifo\fR function is really a preprocessor macro or preferably an inline function around \fBzzip_dir_create\fR, there is no such symbol generated into the library. 
+
+.IP
+.nf
+  #ifndef zzip_savefile  
+   #define zzip_savefile 0  
+   #endif  
+   #define zzip_start(name,mode,ext) \\ - 
+.fi
+ { if (zzip_savefile) zzip_closedir(zzip_savefile); \\ - zzip_savefile = zzip_createdir(name,mode,ext); } The \fBzzip_mkfifo\fR function returns null on error or a zzip_dir handle on success. It is perfectly okay to continue with a null in the zzip_savefile variable since it makes subsequent calls to \fBzzip_creat\fR and \fBzzip_mkdir\fR to run as \fBcreat\fR(2) / \fBmkdir\fR(2) on the real filesystem.
+
+.PP
+
+
+.PP
+finalize a zip archive thereby writing the central directory to the end of the file. If it was a real directory then we do just nothing - even that the prototype of the call itself is modelled to be similar to the posix \fBsync\fR(2) call. The \fBzzip_sync\fR function is really a preprocessor macro or preferably an inline function around \fBzzip_closedir\fR, there is no such symbol generated into the library. 
+
+.IP
+.nf
+  #ifndef zzip_savefile  
+   #define zzip_savefile 0  
+   #endif  
+   #define zzip_sync(name,mode) \\ - 
+.fi
+ { zzip_closedir(zzip_savefile); zzip_savefile = 0; }
+
+.PP
+
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+.SH "SEE ALSO"
+ zzip_creat, zzip_write,  zzip_closedir, sync(2)
+
+zzip_open.3/    1061226771  500   0     100664  4030      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_OPEN" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_open, zzip_open_ext_io, zzip_open_shared_io \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 22
+ZZIP_FILE*\ \fBzzip_open\fR\ (zzip_char_t*\ filename, int\ o_flags);
+.HP 29
+ZZIP_FILE*\ \fBzzip_open_ext_io\fR\ (zzip_char_t*\ filename, int\ o_flags, int\ o_modes, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.HP 32
+ZZIP_FILE*\ \fBzzip_open_shared_io\fR\ (ZZIP_FILE*\ stream, zzip_char_t*\ filename, int\ o_flags, int\ o_modes, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_open\fR function will \fBopen\fR(2) a real/zipped file
+
+.PP
+It has some magic functionality builtin - it will first try to open the given filename as a normal file. If it does not exist, the given path to the filename (if any) is split into its directory-part and the file-part. A ".zip" extension is then added to the directory-part to create the name of a zip-archive. That zip-archive (if it exists) is being searched for the file-part, and if found a zzip-handle is returned.
+
+.PP
+Note that if the file is found in the normal fs-directory the returned structure is mostly empty and the \fBzzip_read\fR call will use the libc \fBread\fR to obtain data. Otherwise a \fBzzip_file_open\fR is performed and any error mapped to \fBerrno\fR(3).
+
+.PP
+There was a possibility to transfer zziplib-specific openmodes through o_flags but you should please not use them anymore and look into \fBzzip_open_ext_io\fR to submit them down. The \fBzzip_open\fR function is shallow in that it just extracts the zzipflags and calls
+
+.nf
+
+\fB 
+   zzip_open_ext_io(filename, o_flags, zzipflags|0664, 0, 0) \fR
+.fi
+
+.PP
+you must stop using this extra functionality (not well known anyway) since zzip_open might be later usable to open files for writing in which case the _EXTRAFLAGS will get in conflict.
+
+.PP
+compare with \fBopen\fR(2) and \fBzzip_fopen\fR 
+
+.PP
+
+
+.PP
+The \fBzzip_open_ext_io\fR function uses explicit ext and io instead of the internal defaults, setting them to zero is equivalent to \fBzzip_open\fR 
+
+.PP
+note that the two flag types have been split into an o_flags (for fcntl-like openflags) and o_modes where the latter shall carry the zzip_flags and possibly accessmodes for unix filesystems. Since this version of zziplib can not write zipfiles, it is not yet used for anything else than zzip-specific modeflags.
+
+.PP
+
+
+.PP
+The \fBzzip_open_shared_io\fR function takes an extra stream argument - if a handle has been then ext/io can be left null and the new stream handle will pick up the ext/io. This should be used only in specific environment however since \fBzzip_file_real\fR does not store any ext-sequence.
+
+.PP
+The benefit for the \fBzzip_open_shared_io\fR function comes in when the old file handle was openened from a file within a zip archive. When the new file is in the same zip archive then the internal zzip_dir structures will be shared. It is even quicker, as no check needs to be done anymore trying to guess the zip archive place in the filesystem, here we just check whether the zip archive's filepath is a prefix part of the filename to be opened.
+
+.PP
+Note that the \fBzzip_open_shared_io\fR function is also used by \fBzzip_freopen\fR that will unshare the old handle, thereby possibly closing the handle.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+zzip_opendir.3/ 1061226771  500   0     100664  1616      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_OPENDIR" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_opendir, zzip_opendir_ext_io \- (zzip/dir.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 24
+ZZIP_DIR*\ \fBzzip_opendir\fR\ (zzip_char_t*\ filename);
+.HP 31
+ZZIP_DIR*\ \fBzzip_opendir_ext_io\fR\ (zzip_char_t*\ filename, int\ o_modes, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_opendir\fR function is the equivalent of \fBopendir\fR(3) for a realdir or zipfile.
+
+.PP
+The \fBzzip_opendir\fR function has some magic - if the given argument-path is a directory, it will wrap a real \fBopendir\fR(3) into the ZZIP_DIR structure. Otherwise it will divert to \fBzzip_dir_open\fR which can also attach a ".zip" extension if needed to find the archive.
+
+.PP
+the error-code is mapped to \fBerrno\fR(3).
+
+.PP
+The \fBzzip_opendir_ext_io\fR function uses explicit ext and io instead of the internal defaults, setting them to zero is equivalent to \fBzzip_opendir\fR 
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+/429            1061226771  500   0     100664  24        `
+.so man3/zzip_opendir.3
+/452            1061226771  500   0     100664  21        `
+.so man3/zzip_open.3
+
+/472            1061226771  500   0     100664  21        `
+.so man3/zzip_open.3
+
+/495            1061226771  500   0     100664  1335      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "__ZZIP_PARSE_ROOT_DIRECTORY" 3 "0.13.23" "zziplib" ""
+.SH NAME
+__zzip_parse_root_directory \- (zzip/zip.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>                                  // archive handling 
+
+
+.sp
+.ad l
+.hy 0
+.HP 33
+int\ \fB__zzip_parse_root_directory\fR\ (int\ fd, struct\ zzip_disk_trailer\ *\ trailer, struct\ zzip_dir_hdr\ **\ hdr_return, zzip_plugin_io_t\ io);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fB__zzip_parse_root_directory\fR function is used by \fBzzip_file_open\fR, it is usually called after \fB__zzip_find_disk_trailer\fR. It will parse the zip's central directory information and create a zziplib private directory table in memory.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <too@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the  
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+zzip_read.3/    1061226771  500   0     100664  1614      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_READ" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_read, zzip_fread \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 24
+zzip_ssize_t\ \fBzzip_read\fR\ (ZZIP_FILE\ *\ fp, char\ *\ buf, zzip_size_t\ len);
+.HP 24
+zzip_size_t\ \fBzzip_fread\fR\ (void\ *ptr, zzip_size_t\ size, zzip_size_t\ nmemb, ZZIP_FILE\ *file);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_read\fR function will read(2) data from a real/zipped file.
+
+.PP
+the replacement for \fBread\fR(2) will fill the given buffer with bytes from the opened file. It will return the number of bytes read, so if the EOF is encountered you will be prompted with the number of bytes actually read.
+
+.PP
+If the file-handle is wrapping a stat'able file then it will actually just perform a normal \fBread\fR(2)-call, otherwise \fBzzip_file_read\fR is called to decompress the data stream and any error is mapped to \fBerrno\fR(3).
+
+.PP
+
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+zzip_readdir.3/ 1061226771  500   0     100664  1309      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_READDIR" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_readdir \- (zzip/dir.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 27
+ZZIP_DIRENT*\ \fBzzip_readdir\fR\ (ZZIP_DIR\ *\ dir);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_readdir\fR function is the equivalent of a \fBreaddir\fR(2) for a realdir or a zipfile referenced by the ZZIP_DIR returned from \fBzzip_opendir\fR.
+
+.PP
+The ZZIP_DIR handle (as returned by \fBzzip_opendir\fR) contains a few more entries than being copied into the ZZIP_DIRENT. The only valid fields in a ZZIP_DIRENT are d_name (the file name), d_compr (compression), d_csize (compressed size), st_size (uncompressed size).
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+zzip_realdir.3/ 1061226771  500   0     100664  26        `
+.so man3/zzip_file_real.3
+zzip_realfd.3/  1061226771  500   0     100664  26        `
+.so man3/zzip_file_real.3
+zzip_rewind.3/  1061226771  500   0     100664  1087      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_REWIND" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_rewind \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 17
+int\ \fBzzip_rewind\fR\ (ZZIP_FILE\ *fp);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_rewind\fR function will rewind a real/zipped file.
+
+.PP
+It seeks to the beginning of this file's data in the zip, or the beginning of the file for a stat'fd.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+/526            1061226771  500   0     100664  1527      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_REWINDDIR" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_rewinddir, zzip_telldir, zzip_seekdir \- (zzip/dir.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 21
+void\ \fBzzip_rewinddir\fR\ (ZZIP_DIR\ *\ dir);
+.HP 25
+zzip_off_t\ \fBzzip_telldir\fR\ (ZZIP_DIR*\ dir);
+.HP 19
+void\ \fBzzip_seekdir\fR\ (ZZIP_DIR*\ dir, zzip_off_t\ offset);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_rewinddir\fR function is the equivalent of a \fBrewinddir\fR(2) for a realdir or the zipfile in place of a directory. The ZZIP_DIR handle returned from \fBzzip_opendir\fR has a flag saying realdir or zipfile. As for a zipfile, the filenames will include the filesubpath, so take care.
+
+.PP
+The \fBzzip_telldir\fR function is the equivalent of \fBtelldir\fR(2) for a realdir or zipfile.
+
+.PP
+The \fBzzip_seekdir\fR function is the equivalent of \fBseekdir\fR(2) for a realdir or zipfile.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+zzip_seek.3/    1061226771  500   0     100664  1623      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_SEEK" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_seek \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 22
+zzip_off_t\ \fBzzip_seek\fR\ (ZZIP_FILE\ *\ fp, zzip_off_t\ offset, int\ whence);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_seek\fR function will perform a \fBlseek\fR(2) operation on a real/zipped file
+
+.PP
+It will try to seek to the offset specified by offset, relative to whence, which is one of SEEK_SET, SEEK_CUR or SEEK_END.
+
+.PP
+If the file-handle is wrapping a stat'able file then it will actually just perform a normal \fBlseek\fR(2)-call. Otherwise the relative offset is calculated, negative offsets are transformed into positive ones by rewinding the file, and then data is read until the offset is reached. This can make the function terribly slow, but this is how gzio implements it, so I'm not sure there is a better way without using the internals of the algorithm.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
+zzip_seekdir.3/ 1061226771  500   0     100664  26        `
+.so man3/zzip_rewinddir.3
+zzip_seterror.3/1061226771  500   0     100664  22        `
+.so man3/zzip_error.3
+zzip_strerror.3/1061226771  500   0     100664  1518      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_STRERROR" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_strerror, zzip_strerror_of \- (zzip/err.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 28
+zzip_char_t*\ \fBzzip_strerror\fR\ (int\ errcode);
+.HP 31
+zzip_char_t*\ \fBzzip_strerror_of\fR\ (ZZIP_DIR*\ dir);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+returns the static string for the given error code. The error code can be either a normal system error (a positive error code will flag this), it can be \fBlibz\fR error code (a small negative error code will flag this) or it can be an error code from \fBlibzzip\fR, which is an negative value lower than \fBZZIP_ERROR\fR 
+
+.PP
+The \fBzzip_strerror_of\fR function fetches the errorcode from the \fBDIR\fR-handle and runs it through \fBzzip_strerror\fR to obtain the static string describing the error.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim
+           All rights reserved,
+           use under the restrictions of the
+           Lesser GNU General Public License
+           or alternatively the restrictions 
+           of the Mozilla Public License 1.1
+.fi
+
+/544            1061226771  500   0     100664  25        `
+.so man3/zzip_strerror.3
+
+zzip_sync.3/    1061226771  500   0     100664  23        `
+.so man3/zzip_mkfifo.3
+
+zzip_tell.3/    1061226771  500   0     100664  1350      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_TELL" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_tell \- (zzip/file.c)
+.SH "SYNOPSIS"
+
+
+#include <zzip/zzip.h> // or <zziplib.h>
+
+
+.sp
+.ad l
+.hy 0
+.HP 22
+zzip_off_t\ \fBzzip_tell\fR\ (ZZIP_FILE\ *\ fp);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+The \fBzzip_tell\fR function will \fBtell\fR(2) the current position in a real/zipped file
+
+.PP
+It will return the current offset within the real/zipped file, measured in uncompressed bytes for the zipped-file case.
+
+.PP
+If the file-handle is wrapping a stat'able file then it will actually just perform a normal \fBtell\fR(2)-call, otherwise the offset is calculated from the amount of data left and the total uncompressed size;
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <Tomi.Ollila@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+zzip_telldir.3/ 1061226771  500   0     100664  26        `
+.so man3/zzip_rewinddir.3
+/564            1061226771  500   0     100664  1190      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "__ZZIP_TRY_OPEN" 3 "0.13.23" "zziplib" ""
+.SH NAME
+__zzip_try_open \- (zzip/zip.c)
+.SH "SYNOPSIS"
+
+
+
+
+#include <zzip/lib.h>                                  // archive handling 
+
+
+.sp
+.ad l
+.hy 0
+.HP 21
+int\ \fB__zzip_try_open\fR\ (zzip_char_t*\ filename, int\ filemode, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+will attach a .zip extension and tries to open it the with \fBopen\fR(2). This is a helper function for \fBzzip_dir_open\fR, \fBzzip_opendir\fR and \fBzzip_open\fR.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.TP
+\(bu
+Tomi Ollila <too@iki.fi>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the  
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+zzip_write.3/   1061226771  500   0     100664  2493      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP_WRITE" 3 "0.13.23" "zziplib" ""
+.SH NAME
+zzip_write, zzip_file_write, zzip_fwrite \- write to zzip storage
+.SH "SYNOPSIS"
+
+
+ #include <zzip/zzip.h>
+
+.sp
+.ad l
+.hy 0
+.HP 25
+zzip_ssize_t\ \fBzzip_write\fR\ (ZZIP_FILE*\ file, const\ void*\ ptr, zzip_size_t\ len);
+.HP 30
+zzip_ssize_t\ \fBzzip_file_write\fR\ (ZZIP_FILE*\ file, const\ void*\ ptr, zzip_size_t\ len);
+.HP 25
+zzip_size_t\ \fBzzip_fwrite\fR\ (const\ void*\ ptr, zzip_size_t\ len, zzip_size_t\ multiply, ZZIP_FILE*\ file);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+.PP
+
+
+.PP
+The \fBzzip_write\fR function will write data to a file descriptor. If the file descriptor represents a real file then it will be forwarded to call posix \fBwrite\fR(2) directly. If it is a descriptor for a file within a zip directory then the data will be "deflated" using \fBzlib\fR(3) and appended to the zip archive file.
+
+.PP
+
+
+.PP
+The \fBzzip_file_write\fR function will write data to a file descriptor inside a zip archive. The data will be "deflated" using \fBzlib\fR(3) compression and appended to the end of the zip archive file. Only one file descriptor may be open per zzip_dir archive handle (fifo-like).
+
+.PP
+The \fBzzip_file_write\fR function is not yet implemented, check for #def ZZIP_NO_CREAT It returns immediately -1 and sets errno=EROFS for indication.
+
+.PP
+The \fBzzip_fwrite\fR function is the stdc variant for writing and the arguments are forwarded to \fBzzip_write\fR - the return value is floored to null as for STDC spec but there is no zzip_ferror call so far for the zziplib (later? is it actually needed?).
+
+.PP
+The \fBzzip_fwrite\fR function is not yet implemented, check for #def ZZIP_NO_CREAT Write-support extends \fBzzip_close\fR with semantics to write out a file-trailer to the zip-archive leaving a name/offset marker in the (still-open) ZZIP_DIR handle.
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+.SH "SEE ALSO"
+ write(2), zlib(3),  zzip_file_creat
+
+
+zzip-zzip.h.3/  1061226771  500   0     100664  6021      `
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "ZZIP/ZZIP.H" 3 "0.13.23" "zziplib" " the library "
+.SH NAME
+zzip-zzip.h \- library
+.SH "SYNOPSIS"
+.ad l
+.hy 0
+.HP 21
+void\ \fBzzip_rewinddir\fR\ (ZZIP_DIR\ *\ dir);
+.HP 25
+zzip_off_t\ \fBzzip_telldir\fR\ (ZZIP_DIR*\ dir);
+.HP 19
+void\ \fBzzip_seekdir\fR\ (ZZIP_DIR*\ dir, zzip_off_t\ offset);
+.HP 27
+ZZIP_DIRENT*\ \fBzzip_readdir\fR\ (ZZIP_DIR\ *\ dir);
+.HP 24
+ZZIP_DIR*\ \fBzzip_opendir\fR\ (zzip_char_t*\ filename);
+.HP 31
+ZZIP_DIR*\ \fBzzip_opendir_ext_io\fR\ (zzip_char_t*\ filename, int\ o_modes, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.HP 19
+int\ \fBzzip_closedir\fR\ (ZZIP_DIR*\ dir);
+.HP 28
+zzip_char_t*\ \fBzzip_strerror\fR\ (int\ errcode);
+.HP 31
+zzip_char_t*\ \fBzzip_strerror_of\fR\ (ZZIP_DIR*\ dir);
+.HP 16
+int\ \fBzzip_errno\fR\ (int\ errcode);
+.HP 21
+int\ \fBzzip_file_close\fR\ (ZZIP_FILE\ *\ fp);
+.HP 29
+ZZIP_FILE\ *\ \fBzzip_file_open\fR\ (ZZIP_DIR\ *\ dir, zzip_char_t*\ name, int\ o_mode);
+.HP 31
+static\ int\ \fBzzip_inflate_init\fR\ (ZZIP_FILE\ *\ fp, struct\ zzip_dir_hdr*\ hdr);
+.HP 17
+int\ \fBzzip_fclose\fR\ (ZZIP_FILE\ *\ fp);
+.HP 16
+int\ \fBzzip_close\fR\ (ZZIP_FILE*\ fp);
+.HP 29
+zzip_ssize_t\ \fBzzip_file_read\fR\ (ZZIP_FILE\ *\ fp, char\ *\ buf, zzip_size_t\ len);
+.HP 24
+zzip_ssize_t\ \fBzzip_read\fR\ (ZZIP_FILE\ *\ fp, char\ *\ buf, zzip_size_t\ len);
+.HP 24
+zzip_size_t\ \fBzzip_fread\fR\ (void\ *ptr, zzip_size_t\ size, zzip_size_t\ nmemb, ZZIP_FILE\ *file);
+.HP 23
+ZZIP_FILE*\ \fBzzip_fopen\fR\ (zzip_char_t*\ filename, zzip_char_t*\ mode);
+.HP 25
+ZZIP_FILE*\ \fBzzip_freopen\fR\ (zzip_char_t*\ filename, zzip_char_t*\ mode, ZZIP_FILE*\ stream);
+.HP 22
+ZZIP_FILE*\ \fBzzip_open\fR\ (zzip_char_t*\ filename, int\ o_flags);
+.HP 29
+ZZIP_FILE*\ \fBzzip_open_ext_io\fR\ (zzip_char_t*\ filename, int\ o_flags, int\ o_modes, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.HP 32
+ZZIP_FILE*\ \fBzzip_open_shared_io\fR\ (ZZIP_FILE*\ stream, zzip_char_t*\ filename, int\ o_flags, int\ o_modes, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.HP 17
+int\ \fBzzip_rewind\fR\ (ZZIP_FILE\ *fp);
+.HP 22
+zzip_off_t\ \fBzzip_seek\fR\ (ZZIP_FILE\ *\ fp, zzip_off_t\ offset, int\ whence);
+.HP 22
+zzip_off_t\ \fBzzip_tell\fR\ (ZZIP_FILE\ *\ fp);
+.HP 16
+int\ \fBzzip_error\fR\ (ZZIP_DIR\ *\ dir);
+.HP 20
+void\ \fBzzip_seterror\fR\ (ZZIP_DIR\ *\ dir, int\ errcode);
+.HP 28
+ZZIP_DIR\ *\ \fBzzip_dirhandle\fR\ (ZZIP_FILE\ *\ fp);
+.HP 16
+int\ \fBzzip_dirfd\fR\ (ZZIP_DIR*\ dir);
+.HP 29
+zzip_char_t*\ \fBzzip_compr_str\fR\ (int\ compr);
+.HP 20
+int\ \fBzzip_file_real\fR\ (ZZIP_FILE*\ fp);
+.HP 19
+int\ \fBzzip_dir_real\fR\ (ZZIP_DIR*\ dir);
+.HP 20
+void*\ \fBzzip_realdir\fR\ (ZZIP_DIR*\ dir);
+.HP 17
+int\ \fBzzip_realfd\fR\ (ZZIP_FILE*\ fp);
+.HP 18
+int\ \fBzzip_init_io\fR\ (zzip_plugin_io_handlers_t\ io, int\ flags);
+.HP 38
+zzip_plugin_io_t\ \fBzzip_get_default_io\fR\ ();
+.HP 19
+int\ \fBzzip_dir_stat\fR\ (ZZIP_DIR\ *\ dir, zzip_char_t*\ name, ZZIP_STAT\ *\ zs, int\ flags);
+.HP 26
+ZZIP_DIR*\ \fBzzip_dir_creat\fR\ (zzip_char_t*\ name, int\ o_mode);
+.HP 33
+ZZIP_DIR*\ \fBzzip_dir_creat_ext_io\fR\ (zzip_char_t*\ name, int\ o_mode, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.HP 26
+ZZIP_DIR*\ \fBzzip_createdir\fR\ (zzip_char_t*\ name, int\ o_mode);
+.HP 28
+ZZIP_FILE*\ \fBzzip_file_creat\fR\ (ZZIP_DIR*\ dir, zzip_char_t*\ name, int\ o_mode);
+.HP 21
+int\ \fBzzip_file_mkdir\fR\ (ZZIP_DIR*\ dir, zzip_char_t*\ name, int\ o_mode);
+.HP 25
+zzip_ssize_t\ \fBzzip_write\fR\ (ZZIP_FILE*\ file, const\ void*\ ptr, zzip_size_t\ len);
+.HP 30
+zzip_ssize_t\ \fBzzip_file_write\fR\ (ZZIP_FILE*\ file, const\ void*\ ptr, zzip_size_t\ len);
+.HP 25
+zzip_size_t\ \fBzzip_fwrite\fR\ (const\ void*\ ptr, zzip_size_t\ len, zzip_size_t\ multiply, ZZIP_FILE*\ file);
+.HP 16
+int\ \fBzzip_mkdir\fR\ (zzip_char_t*\ name, int\ o_mode);
+.HP 23
+ZZIP_FILE*\ \fBzzip_creat\fR\ (zzip_char_t*\ name, int\ o_mode);
+.HP 18
+void\ \fBzzip_mkfifo\fR\ (zzip_char_t*\ name, int\ o_mode);
+.HP 16
+void\ \fBzzip_sync\fR\ (void);
+.HP 23
+uint32_t\ \fB__zzip_get32\fR\ (unsigned\ char\ *\ s);
+.HP 23
+uint16_t\ \fB__zzip_get16\fR\ (unsigned\ char\ *\ s);
+.HP 30
+int\ \fB__zzip_find_disk_trailer\fR\ (int\ fd, zzip_off_t\ filesize, struct\ zzip_disk_trailer\ *\ trailer, zzip_plugin_io_t\ io);
+.HP 33
+int\ \fB__zzip_parse_root_directory\fR\ (int\ fd, struct\ zzip_disk_trailer\ *\ trailer, struct\ zzip_dir_hdr\ **\ hdr_return, zzip_plugin_io_t\ io);
+.HP 33
+ZZIP_DIR*\ \fBzzip_dir_alloc_ext_io\fR\ (zzip_strings_t*\ ext, const\ zzip_plugin_io_t\ io);
+.HP 26
+ZZIP_DIR*\ \fBzzip_dir_alloc\fR\ (zzip_strings_t*\ fileext);
+.HP 19
+int\ \fBzzip_dir_free\fR\ (ZZIP_DIR\ *\ dir);
+.HP 20
+int\ \fBzzip_dir_close\fR\ (ZZIP_DIR\ *\ dir);
+.HP 29
+ZZIP_DIR\ *\ \fBzzip_dir_fdopen\fR\ (int\ fd, zzip_error_t\ *\ errcode_p);
+.HP 36
+ZZIP_DIR\ *\ \fBzzip_dir_fdopen_ext_io\fR\ (int\ fd, zzip_error_t\ *\ errcode_p, zzip_strings_t*\ ext, const\ zzip_plugin_io_t\ io);
+.HP 21
+int\ \fB__zzip_try_open\fR\ (zzip_char_t*\ filename, int\ filemode, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.HP 25
+ZZIP_DIR*\ \fBzzip_dir_open\fR\ (zzip_char_t*\ filename, zzip_error_t*\ e);
+.HP 32
+ZZIP_DIR*\ \fBzzip_dir_open_ext_io\fR\ (zzip_char_t*\ filename, zzip_error_t*\ e, zzip_strings_t*\ ext, zzip_plugin_io_t\ io);
+.HP 19
+int\ \fBzzip_dir_read\fR\ (ZZIP_DIR\ *\ dir, ZZIP_DIRENT\ *\ d);
+.ad
+.hy
+
+.SH "DESCRIPTION"
+
+ : zziplib provides read access to zipped files in a zip-archive,
+ : using compression based solely on free algorithms provided by zlib.
+
+
+
+.SH "AUTHOR"
+
+.TP 3
+\(bu
+Guido Draheim <guidod@gmx.de>
+.LP
+
+.SH "COPYRIGHT"
+
+.IP
+.nf
+
+(c) 1999,2000,2001,2002,2003 Guido Draheim 
+           All rights reserved, 
+           use under the restrictions of the 
+           Lesser GNU General Public License 
+           or alternatively the restrictions  
+           of the Mozilla Public License 1.1 
+.fi
+
+
diff --git a/docs/zzip-file.htm b/docs/zzip-file.htm
new file mode 100644 (file)
index 0000000..8825441
--- /dev/null
@@ -0,0 +1,175 @@
+<h2> ZIP File Access </h2>  Using Zipped Files Transparently 
+
+<!--border--> <date> 1. June 2000 </date>
+
+<h3>The Typedef</h3>
+
+<P>
+ The typedef <code>ZZIP_FILE</code> can serve as a replacement 
+ for a normal file descriptor. As long as it is only used
+ for reading a file, the zzlib-user can actually replace
+ the posix functions <code>open/read/close</code> 
+ by their counterparts from the 
+ <a href="zziplib.html">zziplib library</a>:
+ <code>zzip_open/zzip_read/zzip_close</code>.
+</P>
+<P>
+ As long as the filename path given to <code>zzip_open</code>
+ refers to a real file in the filesystem, it will almost
+ directly forward the call to the respective posix <code>open</code>
+ call. The returned file descriptor is then stored in
+ a member-variable of the <code>ZZIP_FILE</code> structure.
+</P>
+<P>
+ Any subsequent calls to <code>zzip_read</code> will then
+ be forwarded to the posix <code>read</code> call on the
+ memorized file descriptor. The same about <code>zzip_close</code>
+ which will call the posix <code>close</code> function and then
+ <code>free</code> the <code>ZZIP_FILE</code> structure.
+</P>
+<P>
+ The real benefit of the 
+ <a href="zziplib.html">zziplib library</a>
+ comes about when the filename argument does actually refer
+ to a file that is zipped in a zip-archive. It happens that
+ even both a real file and a zipped file can live under the
+ same pathname given to the <code>zzip_open</code> call,
+ whereas the real file is used in preference.
+</P>
+
+<h3>Zipped File</h3>
+
+<P>
+ Suppose you have subdirectory called '<tt>test/</tt>'. In
+ this directory is just one file, called '<tt>README</tt>'.
+ Calling the <code>zzip_open</code> function with an
+ argument of '<i>optional-path/</i> <tt>test/README</tt>',
+ then it will open that file for subsequent reading with
+ <code>zzip_read</code>. In this case the real (<i>stat'able</i>)
+ file is opened.
+</P>
+<P>
+ Now you can go to the '<tt>test/</tt>' directory and zip up
+ the files in there by calling 
+ <nobr><tt>`zip ../test.zip *`</tt></nobr>.
+ After this, you can delete the '<tt>test/</tt>' directory and
+ the call to <code>zzip_open</code> will still succeed.
+ The reason is that the part of the path saying 
+ '<tt>test/README</tt>' will be replaced by sth. like 
+ '<tt>test.zip:README</tt>' - that is the real file '<tt>test.zip</tt>'
+ is opened and searched for a contained file '<tt>README</tt>'.
+</P>
+<P>
+ Calling <code>zzip_read</code> on the zipped '<tt>README</tt>' file
+ will return the very same data as if it is a real file in a
+ real directory. If the zipped file is compressed it will be 
+ decompressed on the fly.
+</P>
+
+<h3>Zip Directory</h3>
+
+<P>
+ The same applies to the use of <code>opendir/readdir/closedir</code>
+ which can safely be replaced with their counterparts from the
+ <a href="zziplib.html">zziplib library</a> - again their prototype
+ follows the scheme of the original calls, just prepend <tt>zzip_</tt>
+ to the function calls and <tt>ZZIP_</tt> to the struct-typedefs.
+</P>
+<P>
+ To call <code>zzip_opendir</code> on a real directory will then
+ return a <code>ZZIP_DIR</code> whose member-variable 
+ <code>realdir</code> points to the actual <code>DIR</code>-structure
+ returned by the underlying posix <code>opendir</code>-call.
+</P>
+<P>
+ If a real directory '<tt>test</tt>' does not exist, then the
+ <code>zzip_opendir</code> will try to open a file '<tt>test.zip</tt>'
+ with a call to <code>zzip_dir_open</code>.
+ Subsequent calls to <code>zzip_readdir</code> will then return
+ information as being obtained from the central archive directory
+ of the zip-file.
+</P>
+
+<h3>Differences</h3>
+
+<P>
+ There are no differences between the posix calls and their counterparts
+ from the      <a href="zziplib.html">zziplib library</a> - well, just
+ as long as the zip-file contains just the plain files from a directory.
+</P>
+<P>
+ If the zip-file contains directory entries you may be prompted with
+ some awkward behaviour, since in zip-file a directory happens to be
+ just an empty file. Note that the posix function <code>open</code>
+ may also open a directory for reading - it will only return 
+ <code>EISDIR</code> if the <code>open</code> mode-argument included
+ write-access.
+</P>
+<P>
+ What the current of version of the 
+ <a href="zziplib.html">zziplib library</a>
+ can definitly not do: calling zzip_opendir on a directory zippend
+ <em>inside</em> a zip-file.
+</P>
+<P>
+ To prevent the enrollment of directories into the zip-archive, you
+ can use the <tt>-D</tt> option of the <tt>zip</tt> program. That
+ is in any <tt>Makefile</tt> you may want to use
+ <nobr><tt>`cd $(dir) &amp;&amp; zip -D ../$(dir).zip *`</tt></nobr>.
+</P> 
+
+<h3>Advantages</h3>
+
+<P>
+ Distribution of a set of files is much easier if it just means
+ to wrap up a group of files into a zip-archive - and copy that
+ zip-archive to the respective destination directory.
+ Even more the files can be compressed and unlike a <tt>tar.gz</tt>
+ archive there is no need to decompress the archive in temporary
+ location before accessing a member-file.
+</P>
+<P>
+ On the other hand, there is no chance to scatter files around
+ on the disk like it could easily happen with a set of gzip'ed
+ man-pages in a single `<tt>man</tt>`-directory. The reader
+ application does not specifically need to know that the file
+ is compressed, so that reading a script like 
+ `<tt>share/guile/x.x.x/ice-9/popen.scm</tt>` is done by simple
+ calls to <code>zzip_read</code> which works on zip-file named
+ `<tt>share/guile/x.x.x/ice-9.zip</tt>`.
+</P>
+<P>
+ A version mismatch between different files in a group is now
+ obvious: either the opened file belongs to the distribution
+ archive, or otherwise in resides in a real directory <em>just
+ next to the zip-archive that contains the original</em>.
+</P>
+
+<h3>Issues</h3>
+
+<P>
+ The  <a href="zziplib.html">zziplib library</a> does not
+ use any code piece from the <code>zip</code> programs, neither
+ <em>pkzip</em> nor <em>infozip</em>, so there is no license
+ issue here. The decompression is done by using the free
+ <a href="http://www.gzip.org/zlib">zlib library</a> which has no special
+ issues with respect to licensing. 
+ The  rights to the <a href="zziplib.html">zziplib library</a> 
+ are reserved to the copyright holders, there is a public
+ license that puts most the sources themselves under 
+ <a href="COPYING.LIB">the GNU Lesser General Public License</a>,
+ so that the use of a shared library instance of the
+ <a href="zziplib.html">zziplib library</a>
+ has no restrictions of interest to application programmers.
+ For more details and hints about static linking, check
+ the <a href="copying.html">COPYING</a> information.
+</P>
+<P>
+ The only issue you have with the
+ <a href="zziplib.html">zziplib library</a>
+ is the fact that you can only <em>read</em> the contained files.
+ Writing/Compression is not implemented. Even more, a compressed
+ file is not seekable at the moment although I hope that someone
+ will stand up to implement that functionality someday.
+</P>
+
diff --git a/docs/zziplib.html b/docs/zziplib.html
new file mode 100644 (file)
index 0000000..2942c44
--- /dev/null
@@ -0,0 +1,1244 @@
+<html><head><title>zziplib - </title>
+  <style>
+   a:link          { text-decoration : none ; color : #000080 ; }
+   a:visited       { text-decoration : none ; color : #200060 ; }
+   .justify        { text-align : justify ; }
+  </style>
+</head><body>
+
+<table width="100%"><tr valign="top"><td bgcolor="#F0F0F0" width="145">
+<center>
+     <big><big><big><b>
+     <font color="#800080"><sup>Z</sup>ZIP<sub>lib</sub></font>
+     </b></big></big></big>
+<br><big><b> 0.13.23 </b></big>
+</center>
+<hr>
+
+<br> <a alt="zzip-index - Overview"
+       href="zzip-index.html">Library</a>
+<br>-<a alt="zzip-zip - Accessing Zip Archives with ZLib Decompression"
+       href="zzip-zip.html">ZIP Access</a>
+<br>-<a alt="zzip-file - Using Zipped Files Transparently"
+       href="zzip-file.html">Transparently</a>
+<br>-<a alt="zzip-sdl-rwops - Example to make an SDL_rwops Inteface" 
+       href="zzip-sdl-rwops.html">SDLrwops Example</a>
+<br>-<a alt="zzip-extio - Customizing the file access" 
+       href="zzip-extio.html">ext/io Customization</a>
+<br>-<a alt="zzip-xor - Using obfuscations like xor"  
+       href="zzip-xor.html">xor/io Obfuscation</a>
+<br>-<a alt="zzip-api - The complete API description"
+       href="zzip-api.html">Library API</a>
+<br>-<a alt="zzip-parse - About zip parsing internals" 
+       href="zzip-parse.html">Parsing ZIPs</a>
+<br>-<a alt="64on32 - About largefile problems" 
+       href="64on32.html">64on32 extras</a>
+<br>-<a alt="future - What next to come" 
+       href="future.html">Next To Come</a>
+<br>-<a alt="configs - To Configure Your zziplib-based software"
+       href="configs.html">Config Helpers</a>
+<br>-<a alt="sfx-make - to combine an EXE with a ZIP archive"
+       href="sfx-make.html">Making a zip/exe</a>
+<br>-<a alt="history - Hints And Links" 
+       href="history.html">Hints And Links</a>
+<br>-<a alt="referentials - Where it is used" 
+       href="referentials.html">Referentials</a>
+<br>-<a alt="zziplib - The Functions List (autogenerated)"
+       href="zziplib.html">Functions List #</a>
+<!--START-->
+<br>-<a alt="zzip/man - The Manual Pages (autogenerated)"
+       href="man/index.html">The Manual Pages #</a>
+<!--ENDS-->
+
+<br>&nbsp&nbsp&nbsp <small>(#&nbsp;autogenerated)</small>
+
+<br>&nbsp;<hr>
+
+<br><b><a alt="Tarballs, RPM-archive and windll-ZIPs can be downloaded from" 
+  href="http://sourceforge.net/project/showfiles.php?group_id=6389">
+ Download Area *</a></b>
+<br><a alt="Sourceforge Project Index Page"
+     href="http://sourceforge.net/projects/zziplib">Sourceforge Project</a>
+<br><a alt="the zziplib webpage at sourceforge"
+     href="http://zziplib.sourceforge.net">zziplib.sf.net 
+                                  <small><i>Home</i></small></a>
+
+<br><small><a alt="zziplib - license details"
+       href="copying.html">LGPL/MPL license</a></small>
+<br>&nbsp;
+<hr>
+<center><!--START-->
+     <a href="http://sourceforge.net/project/?group_id=6389">
+        <img src="http://sourceforge.net/sflogo.php?group_id=6389&type=2"
+            border="0" alt="sourceforge.net" width="125" height="37">
+     </a>
+</center><!--ENDS-->
+
+<p align="right"><small>
+generated 2003-08-18
+</small>
+<br> <small>(C)</small> Guido Draheim
+<br><i> guidod<small>@</small>gmx.de</i>
+</p>
+
+</td><td> 
+<html><head><title> zziplib autodoc documentation </title></head>
+<body>
+
+<h1>zziplib <small><small><i>-0.10.82.pre2</i></small></small></h1>
+<table border=0 cellspacing=2 cellpadding=0><tr valign="top">
+<td valign="top"><code>void 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_rewinddir">
+ <code>zzip_rewinddir</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">1000
+ <code>(<nobr>ZZIP_DIR * dir</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_DIRENT* 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_readdir">
+ <code>zzip_readdir</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">1000
+ <code>(<nobr>ZZIP_DIR * dir</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>zzip_off_t 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_telldir">
+ <code>zzip_telldir</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_telldir
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>void
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_seekdir">
+ <code>zzip_seekdir</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_seekdir
+ <code>(<nobr>ZZIP_DIR* dir</nobr>,
+<nobr>zzip_off_t offset</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_DIR* 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_opendir">
+ <code>zzip_opendir</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_opendir
+ <code>(<nobr>zzip_char_t* filename</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_DIR* 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_opendir_ext_io">
+ <code>zzip_opendir_ext_io</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_opendir_ext_io
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>int o_modes</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_closedir">
+ <code>zzip_closedir</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_closedir
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>zzip_char_t* \r
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_strerror">
+ <code>zzip_strerror</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_strerror
+ <code>(<nobr>int errcode</nobr>)</code>
+\r
+</td></tr><tr valign="top">
+<td valign="top"><code>zzip_char_t* \r
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_strerror_of">
+ <code>zzip_strerror_of</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_strerror_of
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+\r
+</td></tr><tr valign="top">
+<td valign="top"><code>int\r
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_errno">
+ <code>zzip_errno</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_errno
+ <code>(<nobr>int errcode</nobr>)</code>
+\r
+</td></tr><tr valign="top">
+<td valign="top"><code>int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_file_close">
+ <code>zzip_file_close</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_file_close
+ <code>(<nobr>ZZIP_FILE * fp</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_FILE * 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_file_open">
+ <code>zzip_file_open</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_file_open
+ <code>(<nobr>ZZIP_DIR * dir</nobr>,
+<nobr>zzip_char_t* name</nobr>,
+<nobr>int o_mode</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>static int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_inflate_init">
+ <code>zzip_inflate_init</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_inflate_init
+ <code>(<nobr>ZZIP_FILE * fp</nobr>,
+<nobr>struct zzip_dir_hdr* hdr</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_fclose">
+ <code>zzip_fclose</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_fclose
+ <code>(<nobr>ZZIP_FILE * fp</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_close">
+ <code>zzip_close</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_close
+ <code>(<nobr>ZZIP_FILE* fp</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>zzip_ssize_t 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_file_read">
+ <code>zzip_file_read</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_file_read
+ <code>(<nobr>ZZIP_FILE * fp</nobr>,
+<nobr>char * buf</nobr>,
+<nobr>zzip_size_t len</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>zzip_ssize_t
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_read">
+ <code>zzip_read</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_read
+ <code>(<nobr>ZZIP_FILE * fp</nobr>,
+<nobr>char * buf</nobr>,
+<nobr>zzip_size_t len</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>zzip_size_t
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_fread">
+ <code>zzip_fread</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_fread
+ <code>(<nobr>void *ptr</nobr>,
+<nobr>zzip_size_t size</nobr>,
+<nobr>zzip_size_t nmemb</nobr>,
+<nobr>ZZIP_FILE *file</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_FILE*
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_fopen">
+ <code>zzip_fopen</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_fopen
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>zzip_char_t* mode</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_FILE*
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_freopen">
+ <code>zzip_freopen</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_freopen
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>zzip_char_t* mode</nobr>,
+<nobr>ZZIP_FILE* stream</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_FILE*
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_open">
+ <code>zzip_open</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_open
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>int o_flags</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_FILE*
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_open_ext_io">
+ <code>zzip_open_ext_io</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_open_ext_io
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>int o_flags</nobr>,
+<nobr>int o_modes</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_FILE*
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_open_shared_io">
+ <code>zzip_open_shared_io</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_open_shared_io
+ <code>(<nobr>ZZIP_FILE* stream</nobr>,
+<nobr>zzip_char_t* filename</nobr>,
+<nobr>int o_flags</nobr>,
+<nobr>int o_modes</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_rewind">
+ <code>zzip_rewind</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_rewind
+ <code>(<nobr>ZZIP_FILE *fp</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>zzip_off_t
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_seek">
+ <code>zzip_seek</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_seek
+ <code>(<nobr>ZZIP_FILE * fp</nobr>,
+<nobr>zzip_off_t offset</nobr>,
+<nobr>int whence</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>zzip_off_t
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_tell">
+ <code>zzip_tell</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_tell
+ <code>(<nobr>ZZIP_FILE * fp</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_error">
+ <code>zzip_error</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_error
+ <code>(<nobr>ZZIP_DIR * dir</nobr>)</code>
+   
+</td></tr><tr valign="top">
+<td valign="top"><code>void 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_seterror">
+ <code>zzip_seterror</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_seterror
+ <code>(<nobr>ZZIP_DIR * dir</nobr>,
+<nobr>int errcode</nobr>)</code>
+   
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_DIR * 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dirhandle">
+ <code>zzip_dirhandle</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dirhandle
+ <code>(<nobr>ZZIP_FILE * fp</nobr>)</code>
+   
+</td></tr><tr valign="top">
+<td valign="top"><code>int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dirfd">
+ <code>zzip_dirfd</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dirfd
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+   
+</td></tr><tr valign="top">
+<td valign="top"><code>zzip_char_t*
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_compr_str">
+ <code>zzip_compr_str</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_compr_str
+ <code>(<nobr>int compr</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_real">
+ <code>zzip_dir_real</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_real
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_file_real">
+ <code>zzip_file_real</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_file_real
+ <code>(<nobr>ZZIP_FILE* fp</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>void*
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_realdir">
+ <code>zzip_realdir</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_realdir
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_realfd">
+ <code>zzip_realfd</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_realfd
+ <code>(<nobr>ZZIP_FILE* fp</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>zzip_plugin_io_t
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_get_default_io">
+ <code>zzip_get_default_io</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_get_default_io
+ <code>(<nobr></nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int </code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_init_io">
+ <code>zzip_init_io</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_init_io
+ <code>(<nobr>struct zzip_plugin_io* io</nobr>,
+<nobr>int flags</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_stat">
+ <code>zzip_dir_stat</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_stat
+ <code>(<nobr>ZZIP_DIR * dir</nobr>,
+<nobr>zzip_char_t* name</nobr>,
+<nobr>ZZIP_STAT * zs</nobr>,
+<nobr>int flags</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>uint32_t </code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#__zzip_get32">
+ <code>__zzip_get32</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">__zzip_get32
+ <code>(<nobr>unsigned char * s</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>uint16_t </code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#__zzip_get16">
+ <code>__zzip_get16</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">__zzip_get16
+ <code>(<nobr>unsigned char * s</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#__zzip_find_disk_trailer">
+ <code>__zzip_find_disk_trailer</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">__zzip_find_disk_trailer
+ <code>(<nobr>int fd</nobr>,
+<nobr>zzip_off_t filesize</nobr>,
+<nobr>struct zzip_disk_trailer * trailer</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#__zzip_parse_root_directory">
+ <code>__zzip_parse_root_directory</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">__zzip_parse_root_directory
+ <code>(<nobr>int fd</nobr>,
+<nobr>struct zzip_disk_trailer * trailer</nobr>,
+<nobr>struct zzip_dir_hdr ** hdr_return</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_DIR*
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_alloc_ext_io">
+ <code>zzip_dir_alloc_ext_io</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_alloc_ext_io
+ <code>(<nobr>zzip_strings_t* ext</nobr>,
+<nobr>const zzip_plugin_io_t io</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_DIR*
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_alloc">
+ <code>zzip_dir_alloc</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_alloc
+ <code>(<nobr>zzip_strings_t* fileext</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_free">
+ <code>zzip_dir_free</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_free
+ <code>(<nobr>ZZIP_DIR * dir</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_close">
+ <code>zzip_dir_close</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_close
+ <code>(<nobr>ZZIP_DIR * dir</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_DIR * 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_fdopen">
+ <code>zzip_dir_fdopen</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_fdopen
+ <code>(<nobr>int fd</nobr>,
+<nobr>zzip_error_t * errcode_p</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_DIR * 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_fdopen_ext_io">
+ <code>zzip_dir_fdopen_ext_io</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_fdopen_ext_io
+ <code>(<nobr>int fd</nobr>,
+<nobr>zzip_error_t * errcode_p</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>const zzip_plugin_io_t io</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#__zzip_try_open">
+ <code>__zzip_try_open</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">__zzip_try_open
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>int filemode</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_DIR* 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_open">
+ <code>zzip_dir_open</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_open
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>zzip_error_t* e</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>ZZIP_DIR* 
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_open_ext_io">
+ <code>zzip_dir_open_ext_io</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_open_ext_io
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>zzip_error_t* e</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</td></tr><tr valign="top">
+<td valign="top"><code>int
+</code></td><td valign="top">&nbsp;&nbsp;</td><td valign="top"><a href="#zzip_dir_read">
+ <code>zzip_dir_read</code>
+</a></td><td valign="top">&nbsp;&nbsp;</td><td valign="top">zzip_dir_read
+ <code>(<nobr>ZZIP_DIR * dir</nobr>,
+<nobr>ZZIP_DIRENT * d</nobr> )</code>
+
+</td></tr>
+</table>
+<h3>Documentation</h3>
+
+<dl>
+<dt><a name="zzip_rewinddir" /><a name="zzip_telldir" /><a name="zzip_seekdir" /><code><code>void 
+</code>
+ <br /><b><code>zzip_rewinddir</code></b>
+ &nbsp; <code>1000
+ <code>(<nobr>ZZIP_DIR * dir</nobr>)</code>
+
+</code></code><br />
+<code><code>zzip_off_t 
+</code>
+ <br /><b><code>zzip_telldir</code></b>
+ &nbsp; <code>zzip_telldir
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+
+</code></code><br />
+<code><code>void
+</code>
+ <br /><b><code>zzip_seekdir</code></b>
+ &nbsp; <code>zzip_seekdir
+ <code>(<nobr>ZZIP_DIR* dir</nobr>,
+<nobr>zzip_off_t offset</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/dir.c)
+<p>   This function is the equivalent of a <code>rewinddir(2)</code> for a realdir or 
+ <br />  the zipfile in place of a directory. The ZZIP_DIR handle returned from 
+ <br />  <a href="#zzip_opendir"><code>zzip_opendir</code></a> has a flag saying realdir or zipfile. As for a zipfile, 
+ <br />  the filenames will include the filesubpath, so take care. 
+<p align="right"><small>(../zzip/dir.c)</small></p></dd>
+<dt><a name="zzip_readdir" /><code><code>ZZIP_DIRENT* 
+</code>
+ <br /><b><code>zzip_readdir</code></b>
+ &nbsp; <code>1000
+ <code>(<nobr>ZZIP_DIR * dir</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/dir.c)
+<p>   This function is the equivalent of a <code>readdir(2)</code> for a realdir  
+ <br />  or a zipfile referenced by the ZZIP_DIR returned from <a href="#zzip_opendir"><code>zzip_opendir</code></a>. 
+ <p> 
+   The ZZIP_DIR handle (as returned by <a href="#zzip_opendir"><code>zzip_opendir)</code></a> contains a few more  
+ <br />  entries than being copied into the ZZIP_DIRENT. The only valid fields in 
+ <br />  a ZZIP_DIRENT are d_name (the file name), d_compr (compression), d_csize 
+ <br />  (compressed size), st_size (uncompressed size). 
+<p align="right"><small>(../zzip/dir.c)</small></p></dd>
+<dt><a name="zzip_opendir" /><a name="zzip_opendir_ext_io" /><code><code>ZZIP_DIR* 
+</code>
+ <br /><b><code>zzip_opendir</code></b>
+ &nbsp; <code>zzip_opendir
+ <code>(<nobr>zzip_char_t* filename</nobr>)</code>
+
+</code></code><br />
+<code><code>ZZIP_DIR* 
+</code>
+ <br /><b><code>zzip_opendir_ext_io</code></b>
+ &nbsp; <code>zzip_opendir_ext_io
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>int o_modes</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/dir.c)
+<p>   This function is the equivalent of <code>opendir(3)</code> for a realdir or zipfile. 
+ <br />  <p> 
+   This function has some magic - if the given argument-path 
+ <br />  is a directory, it will wrap a real <code>opendir(3)</code> into the ZZIP_DIR 
+ <br />  structure. Otherwise it will divert to <a href="#zzip_dir_open"><code>zzip_dir_open</code></a> which  
+ <br />  can also attach a ".zip" extension if needed to find the archive. 
+ <br />  <p> 
+   the error-code is mapped to <code>errno(3)</code>. 
+<p align="right"><small>(../zzip/dir.c)</small></p></dd>
+<dt><a name="zzip_closedir" /><code><code>int
+</code>
+ <br /><b><code>zzip_closedir</code></b>
+ &nbsp; <code>zzip_closedir
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/dir.c)
+<p>   This function is the equivalent of <code>closedir(3)</code> for a realdir or zipfile. 
+ <br />  <p> 
+   This function is magic - if the given arg-ZZIP_DIR 
+ <br />  is a real directory, it will call the real <code>closedir(3)</code> and then 
+ <br />  free the wrapping ZZIP_DIR structure. Otherwise it will divert  
+ <br />  to <a href="#zzip_dir_close"><code>zzip_dir_close</code></a> which will free the ZZIP_DIR structure. 
+<p align="right"><small>(../zzip/dir.c)</small></p></dd>
+<dt><a name="zzip_strerror" /><a name="zzip_strerror_of" /><code><code>zzip_char_t* \r
+</code>
+ <br /><b><code>zzip_strerror</code></b>
+ &nbsp; <code>zzip_strerror
+ <code>(<nobr>int errcode</nobr>)</code>
+\r
+</code></code><br />
+<code><code>zzip_char_t* \r
+</code>
+ <br /><b><code>zzip_strerror_of</code></b>
+ &nbsp; <code>zzip_strerror_of
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+\r
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/err.c)
+<p>   returns the static string for the given error code. The\r 
+ <br />  error code can be either a normal system error (a\r 
+ <br />  positive error code will flag this), it can be <code>libz</code>\r 
+ <br />  error code (a small negative error code will flag this)\r 
+ <br />  or it can be an error code from <code>libzzip</code>, which is an\r 
+ <br />  negative value lower than <code>ZZIP_ERROR</code>\r 
+<p align="right"><small>(../zzip/err.c)</small></p></dd>
+<dt><a name="zzip_errno" /><code><code>int\r
+</code>
+ <br /><b><code>zzip_errno</code></b>
+ &nbsp; <code>zzip_errno
+ <code>(<nobr>int errcode</nobr>)</code>
+\r
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/err.c)
+<p>   map the error code to a system error code. This is used\r 
+ <br />  for the drop-in replacement functions to return a value\r 
+ <br />  that can be interpreted correctly by code sections that\r 
+ <br />  are unaware of the fact they their <code>open(2)</code> call had been\r 
+ <br />  diverted to a file inside a zip-archive.\r 
+<p align="right"><small>(../zzip/err.c)</small></p></dd>
+<dt><a name="zzip_file_close" /><code><code>int 
+</code>
+ <br /><b><code>zzip_file_close</code></b>
+ &nbsp; <code>zzip_file_close
+ <code>(<nobr>ZZIP_FILE * fp</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>   the direct function of <a href="#zzip_close"><code>zzip_close(fp)</code></a>. it will cleanup the 
+ <br />  inflate-portion of <code>zlib</code> and free the structure given. 
+ <p> 
+   it is called quite from the error-cleanup parts 
+ <br />  of the various <code>_open</code> functions.  
+ <p> 
+   the .refcount is decreased and if zero the fp<small>-&gt;</small>dir is closed just as well. 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_file_open" /><code><code>ZZIP_FILE * 
+</code>
+ <br /><b><code>zzip_file_open</code></b>
+ &nbsp; <code>zzip_file_open
+ <code>(<nobr>ZZIP_DIR * dir</nobr>,
+<nobr>zzip_char_t* name</nobr>,
+<nobr>int o_mode</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>   open an <code>ZZIP_FILE</code> from an already open <code>ZZIP_DIR</code> handle. Since 
+ <br />  we have a chance to reuse a cached <code>buf32k</code> and <code>ZZIP_FILE</code> memchunk 
+ <br />  this is the best choice to unpack multiple files. 
+ <p> 
+   Note: the zlib supports 2..15 bit windowsize, hence we provide a 32k 
+ <br />        memchunk here... just to be safe. 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_inflate_init" /><code><code>static int 
+</code>
+ <br /><b><code>zzip_inflate_init</code></b>
+ &nbsp; <code>zzip_inflate_init
+ <code>(<nobr>ZZIP_FILE * fp</nobr>,
+<nobr>struct zzip_dir_hdr* hdr</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>    call <code>inflateInit</code> and setup fp's iterator variables,  
+ <br />   used by lowlevel <code>_open</code> functions. 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_fclose" /><a name="zzip_close" /><code><code>int 
+</code>
+ <br /><b><code>zzip_fclose</code></b>
+ &nbsp; <code>zzip_fclose
+ <code>(<nobr>ZZIP_FILE * fp</nobr>)</code>
+
+</code></code><br />
+<code><code>int 
+</code>
+ <br /><b><code>zzip_close</code></b>
+ &nbsp; <code>zzip_close
+ <code>(<nobr>ZZIP_FILE* fp</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>   This function closes the given ZZIP_FILE handle.  
+ <p> 
+   If the ZZIP_FILE wraps a normal stat'fd then it is just that int'fd  
+ <br />  that is being closed and the otherwise empty ZZIP_FILE gets freed. 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_file_read" /><code><code>zzip_ssize_t 
+</code>
+ <br /><b><code>zzip_file_read</code></b>
+ &nbsp; <code>zzip_file_read
+ <code>(<nobr>ZZIP_FILE * fp</nobr>,
+<nobr>char * buf</nobr>,
+<nobr>zzip_size_t len</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>   This functions read data from zip-contained file. 
+ <p> 
+   It works like <code>read(2)</code> and will fill the given buffer with bytes from 
+ <br />  the opened file. It will return the number of bytes read, so if the <code>EOF</code> 
+ <br />  is encountered you will be prompted with the number of bytes actually read. 
+ <p> 
+   This is the routines that needs the <code>buf32k</code> buffer, and it would have 
+ <br />  need for much more polishing but it does already work quite well. 
+ <p> 
+   Note: the 32K buffer is rather big. The original inflate-algorithm 
+ <br />        required just that but the latest zlib would work just fine with 
+ <br />        a smaller buffer. 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_read" /><a name="zzip_fread" /><code><code>zzip_ssize_t
+</code>
+ <br /><b><code>zzip_read</code></b>
+ &nbsp; <code>zzip_read
+ <code>(<nobr>ZZIP_FILE * fp</nobr>,
+<nobr>char * buf</nobr>,
+<nobr>zzip_size_t len</nobr>)</code>
+
+</code></code><br />
+<code><code>zzip_size_t
+</code>
+ <br /><b><code>zzip_fread</code></b>
+ &nbsp; <code>zzip_fread
+ <code>(<nobr>void *ptr</nobr>,
+<nobr>zzip_size_t size</nobr>,
+<nobr>zzip_size_t nmemb</nobr>,
+<nobr>ZZIP_FILE *file</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>   This function will read(2) data from a real/zipped file. 
+ <p> 
+   the replacement for <code>read(2)</code> will fill the given buffer with bytes from 
+ <br />  the opened file. It will return the number of bytes read, so if the EOF 
+ <br />  is encountered you will be prompted with the number of bytes actually read. 
+ <p> 
+   If the file-handle is wrapping a stat'able file then it will actually just 
+ <br />  perform a normal <code>read(2)</code>-call, otherwise <a href="#zzip_file_read"><code>zzip_file_read</code></a> is called 
+ <br />  to decompress the data stream and any error is mapped to <code>errno(3)</code>. 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_fopen" /><a name="zzip_freopen" /><code><code>ZZIP_FILE*
+</code>
+ <br /><b><code>zzip_fopen</code></b>
+ &nbsp; <code>zzip_fopen
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>zzip_char_t* mode</nobr>)</code>
+
+</code></code><br />
+<code><code>ZZIP_FILE*
+</code>
+ <br /><b><code>zzip_freopen</code></b>
+ &nbsp; <code>zzip_freopen
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>zzip_char_t* mode</nobr>,
+<nobr>ZZIP_FILE* stream</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>   This function will <code>fopen(3)</code> a real/zipped file. 
+ <p> 
+   It has some magic functionality builtin - it will first try to open 
+ <br />  the given <em>filename</em> as a normal file. If it does not 
+ <br />  exist, the given path to the filename (if any) is split into 
+ <br />  its directory-part and the file-part. A ".zip" extension is 
+ <br />  then added to the directory-part to create the name of a 
+ <br />  zip-archive. That zip-archive (if it exists) is being searched 
+ <br />  for the file-part, and if found a zzip-handle is returned.  
+ <p> 
+   Note that if the file is found in the normal fs-directory the 
+ <br />  returned structure is mostly empty and the <a href="#zzip_read"><code>zzip_read</code></a> call will 
+ <br />  use the libc <code>read</code> to obtain data. Otherwise a <a href="#zzip_file_open"><code>zzip_file_open</code></a>  
+ <br />  is performed and any error mapped to <code>errno(3)</code>. 
+ <p> 
+   unlike the posix-wrapper <a href="#zzip_open"><code>zzip_open</code></a> the mode-argument is 
+ <br />  a string which allows for more freedom to support the extra 
+ <br />  zzip modes called ZZIP_CASEINSENSITIVE and ZZIP_IGNOREPATH. 
+ <br />  Currently, this <a href="#zzip_fopen"><code>zzip_fopen</code></a> call will convert the following 
+ <br />  characters in the mode-string into their corrsponding mode-bits:  
+ <br />   <ul><li><code> "r" : O_RDONLY : </code> read-only 
+ <br />  </li><li><code> "b" : O_BINARY : </code> binary (win32 specific) 
+ <br />  </li><li><code> "f" : O_NOCTTY : </code> no char device (unix) 
+ <br />  </li><li><code> "i" : ZZIP_CASELESS : </code> inside zip file 
+ <br />  </li><li><code> "*" : ZZIP_NOPATHS : </code> inside zip file only 
+ <br />  </ul> all other modes will be ignored for zip-contained entries 
+ <br />  but they are transferred for compatibility and portability, 
+ <br />  including these extra sugar bits: 
+ <br />   <ul><li><code> "x" : O_EXCL :</code> fail if file did exist 
+ <br />  </li><li><code> "s" : O_SYNC :</code> synchronized access 
+ <br />  </li><li><code> "n" : O_NONBLOCK :</code> nonblocking access 
+ <br />  </li><li><code> "z#" : compression level :</code> for zlib 
+ <br />  </li><li><code> "g#" : group access :</code> unix access bits 
+ <br />  </li><li><code> "u#" : owner access :</code> unix access bits 
+ <br />  </li><li><code> "o#" : world access :</code> unix access bits 
+ <br />  </ul>... the access bits are in traditional unix bit format 
+ <br />  with 7 = read/write/execute, 6 = read/write, 4 = read-only. 
+ <p> 
+   The default access mode is 0664, and the compression level 
+ <br />  is ignored since the lib can not yet write zip files, otherwise 
+ <br />  it would be the initialisation value for the zlib deflateInit 
+ <br />  where 0 = no-compression, 1 = best-speed, 9 = best-compression. 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_open" /><a name="zzip_open_ext_io" /><a name="zzip_open_shared_io" /><code><code>ZZIP_FILE*
+</code>
+ <br /><b><code>zzip_open</code></b>
+ &nbsp; <code>zzip_open
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>int o_flags</nobr>)</code>
+
+</code></code><br />
+<code><code>ZZIP_FILE*
+</code>
+ <br /><b><code>zzip_open_ext_io</code></b>
+ &nbsp; <code>zzip_open_ext_io
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>int o_flags</nobr>,
+<nobr>int o_modes</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</code></code><br />
+<code><code>ZZIP_FILE*
+</code>
+ <br /><b><code>zzip_open_shared_io</code></b>
+ &nbsp; <code>zzip_open_shared_io
+ <code>(<nobr>ZZIP_FILE* stream</nobr>,
+<nobr>zzip_char_t* filename</nobr>,
+<nobr>int o_flags</nobr>,
+<nobr>int o_modes</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>   This function will <code>open(2)</code> a real/zipped file 
+ <p> 
+   It has some magic functionality builtin - it will first try to open 
+ <br />  the given <em>filename</em> as a normal file. If it does not 
+ <br />  exist, the given path to the filename (if any) is split into 
+ <br />  its directory-part and the file-part. A ".zip" extension is 
+ <br />  then added to the directory-part to create the name of a 
+ <br />  zip-archive. That zip-archive (if it exists) is being searched 
+ <br />  for the file-part, and if found a zzip-handle is returned.  
+ <p> 
+   Note that if the file is found in the normal fs-directory the 
+ <br />  returned structure is mostly empty and the <a href="#zzip_read"><code>zzip_read</code></a> call will 
+ <br />  use the libc <code>read</code> to obtain data. Otherwise a <a href="#zzip_file_open"><code>zzip_file_open</code></a>  
+ <br />  is performed and any error mapped to <code>errno(3)</code>. 
+ <p> 
+   There was a possibility to transfer zziplib-specific openmodes 
+ <br />  through o_flags but you should please not use them anymore and 
+ <br />  look into <a href="#zzip_open_ext_io"><code>zzip_open_ext_io</code></a> to submit them down. This function 
+ <br />  is shallow in that it just extracts the zzipflags and calls <ul><li><code> 
+ <br />  zzip_open_ext_io(filename, o_flags, zzipflags|0664, 0, 0) </code></li></ul> 
+ <br />  you must stop using this extra functionality (not well known 
+ <br />  anyway) since zzip_open might be later usable to open files 
+ <br />  for writing in which case the _EXTRAFLAGS will get in conflict. 
+ <p> 
+   compare with  <code>open(2)</code> and <a href="#zzip_fopen"><code>zzip_fopen</code></a> 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_rewind" /><code><code>int
+</code>
+ <br /><b><code>zzip_rewind</code></b>
+ &nbsp; <code>zzip_rewind
+ <code>(<nobr>ZZIP_FILE *fp</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>   This function will rewind a real/zipped file.  
+ <p> 
+   It seeks to the beginning of this file's data in the zip,  
+ <br />  or the beginning of the file for a stat'fd. 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_seek" /><code><code>zzip_off_t
+</code>
+ <br /><b><code>zzip_seek</code></b>
+ &nbsp; <code>zzip_seek
+ <code>(<nobr>ZZIP_FILE * fp</nobr>,
+<nobr>zzip_off_t offset</nobr>,
+<nobr>int whence</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>   This function will perform a <code>lseek(2)</code> operation on a real/zipped file 
+ <p> 
+   It will try to seek to the offset specified by offset, relative to whence,  
+ <br />  which is one of SEEK_SET, SEEK_CUR or SEEK_END. 
+ <p> 
+   If the file-handle is wrapping a stat'able file then it will actually just 
+ <br />  perform a normal <code>lseek(2)</code>-call. Otherwise the relative offset 
+ <br />  is calculated, negative offsets are transformed into positive ones 
+ <br />  by rewinding the file, and then data is read until the offset is 
+ <br />  reached.  This can make the function terribly slow, but this is 
+ <br />  how gzio implements it, so I'm not sure there is a better way 
+ <br />  without using the internals of the algorithm. 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_tell" /><code><code>zzip_off_t
+</code>
+ <br /><b><code>zzip_tell</code></b>
+ &nbsp; <code>zzip_tell
+ <code>(<nobr>ZZIP_FILE * fp</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/file.c)
+<p>   This function will <code>tell(2)</code> the current position in a real/zipped file 
+ <p> 
+   It will return the current offset within the real/zipped file,  
+ <br />  measured in uncompressed bytes for the zipped-file case. 
+ <p> 
+   If the file-handle is wrapping a stat'able file then it will actually just 
+ <br />  perform a normal <code>tell(2)</code>-call, otherwise the offset is 
+ <br />  calculated from the amount of data left and the total uncompressed 
+ <br />  size; 
+<p align="right"><small>(../zzip/file.c)</small></p></dd>
+<dt><a name="zzip_error" /><a name="zzip_seterror" /><code><code>int 
+</code>
+ <br /><b><code>zzip_error</code></b>
+ &nbsp; <code>zzip_error
+ <code>(<nobr>ZZIP_DIR * dir</nobr>)</code>
+   
+</code></code><br />
+<code><code>void 
+</code>
+ <br /><b><code>zzip_seterror</code></b>
+ &nbsp; <code>zzip_seterror
+ <code>(<nobr>ZZIP_DIR * dir</nobr>,
+<nobr>int errcode</nobr>)</code>
+   
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/info.c)
+<p>    just returns dir<small>-&gt;</small>errcode of the ZZIP_DIR handle  
+ <br />   see: <a href="#zzip_dir_open"><code>zzip_dir_open</code></a>, <code>zzip_diropen</code>, <a href="#zzip_readdir"><code>zzip_readdir</code></a>, <a href="#zzip_dir_read"><code>zzip_dir_read</code></a> 
+<p align="right"><small>(../zzip/info.c)</small></p></dd>
+<dt><a name="zzip_dirhandle" /><a name="zzip_dirfd" /><code><code>ZZIP_DIR * 
+</code>
+ <br /><b><code>zzip_dirhandle</code></b>
+ &nbsp; <code>zzip_dirhandle
+ <code>(<nobr>ZZIP_FILE * fp</nobr>)</code>
+   
+</code></code><br />
+<code><code>int 
+</code>
+ <br /><b><code>zzip_dirfd</code></b>
+ &nbsp; <code>zzip_dirfd
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+   
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/info.c)
+<p>   This function will just return fp<small>-&gt;</small>dir  
+ <p> 
+   If a ZZIP_FILE is contained within a zip-file that one will be a valid 
+ <br />  pointer, otherwise a NULL is returned and the ZZIP_FILE wraps a real file. 
+<p align="right"><small>(../zzip/info.c)</small></p></dd>
+<dt><a name="zzip_compr_str" /><code><code>zzip_char_t*
+</code>
+ <br /><b><code>zzip_compr_str</code></b>
+ &nbsp; <code>zzip_compr_str
+ <code>(<nobr>int compr</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/info.c)
+<p>   return static const string of the known compression methods,  
+ <br />  otherwise just "zipped" is returned 
+<p align="right"><small>(../zzip/info.c)</small></p></dd>
+<dt><a name="zzip_file_real" /><a name="zzip_dir_real" /><a name="zzip_realdir" /><a name="zzip_realfd" /><code><code>int
+</code>
+ <br /><b><code>zzip_file_real</code></b>
+ &nbsp; <code>zzip_file_real
+ <code>(<nobr>ZZIP_FILE* fp</nobr>)</code>
+
+</code></code><br />
+<code><code>int
+</code>
+ <br /><b><code>zzip_dir_real</code></b>
+ &nbsp; <code>zzip_dir_real
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+
+</code></code><br />
+<code><code>void*
+</code>
+ <br /><b><code>zzip_realdir</code></b>
+ &nbsp; <code>zzip_realdir
+ <code>(<nobr>ZZIP_DIR* dir</nobr>)</code>
+
+</code></code><br />
+<code><code>int
+</code>
+ <br /><b><code>zzip_realfd</code></b>
+ &nbsp; <code>zzip_realfd
+ <code>(<nobr>ZZIP_FILE* fp</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/info.c)
+<p>   This function checks if the ZZIP_FILE-handle is wrapping  
+ <br />  a real file or a zip-contained file.  
+ <br />  Returns 1 for a stat'able file, and 0 for a file inside a zip-archive. 
+<p align="right"><small>(../zzip/info.c)</small></p></dd>
+<dt><a name="zzip_init_io" /><a name="zzip_get_default_io" /><code><code>int </code>
+ <br /><b><code>zzip_init_io</code></b>
+ &nbsp; <code>zzip_init_io
+ <code>(<nobr>struct zzip_plugin_io* io</nobr>,
+<nobr>int flags</nobr>)</code>
+
+</code></code><br />
+<code><code>zzip_plugin_io_t
+</code>
+ <br /><b><code>zzip_get_default_io</code></b>
+ &nbsp; <code>zzip_get_default_io
+ <code>(<nobr></nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/plugin.c)
+<p>   This function initializes the users handler struct to default values  
+ <br />  being the posix io functions in default configured environments. 
+<p align="right"><small>(../zzip/plugin.c)</small></p></dd>
+<dt><a name="zzip_dir_stat" /><code><code>int 
+</code>
+ <br /><b><code>zzip_dir_stat</code></b>
+ &nbsp; <code>zzip_dir_stat
+ <code>(<nobr>ZZIP_DIR * dir</nobr>,
+<nobr>zzip_char_t* name</nobr>,
+<nobr>ZZIP_STAT * zs</nobr>,
+<nobr>int flags</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/stat.c)
+<p>   obtain information about a filename in an opened zip-archive without  
+ <br />  opening that file first. Mostly used to obtain the uncompressed  
+ <br />  size of a file inside a zip-archive. see <a href="#zzip_dir_open"><code>zzip_dir_open</code></a>. 
+<p align="right"><small>(../zzip/stat.c)</small></p></dd>
+<dt><a name="__zzip_get32" /><code><code>uint32_t </code>
+ <br /><b><code>__zzip_get32</code></b>
+ &nbsp; <code>__zzip_get32
+ <code>(<nobr>unsigned char * s</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/zip.c)
+<p>   Make 32 bit value in host byteorder from little-endian mapped octet-data 
+ <br />  (works also on machines which SIGBUS on misaligned data access (eg. 68000)) 
+<p align="right"><small>(../zzip/zip.c)</small></p></dd>
+<dt><a name="__zzip_find_disk_trailer" /><code><code>int 
+</code>
+ <br /><b><code>__zzip_find_disk_trailer</code></b>
+ &nbsp; <code>__zzip_find_disk_trailer
+ <code>(<nobr>int fd</nobr>,
+<nobr>zzip_off_t filesize</nobr>,
+<nobr>struct zzip_disk_trailer * trailer</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/zip.c)
+<p>   This function is used by <a href="#zzip_file_open"><code>zzip_file_open</code></a>. It tries to find 
+ <br />  the zip's central directory info that is usually a few 
+ <br />  bytes off the end of the file. 
+<p align="right"><small>(../zzip/zip.c)</small></p></dd>
+<dt><a name="__zzip_parse_root_directory" /><code><code>int 
+</code>
+ <br /><b><code>__zzip_parse_root_directory</code></b>
+ &nbsp; <code>__zzip_parse_root_directory
+ <code>(<nobr>int fd</nobr>,
+<nobr>struct zzip_disk_trailer * trailer</nobr>,
+<nobr>struct zzip_dir_hdr ** hdr_return</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/zip.c)
+<p>   This function is used by <a href="#zzip_file_open"><code>zzip_file_open</code></a>, it is usually called after 
+ <br />  <a href="#__zzip_find_disk_trailer"><code>__zzip_find_disk_trailer</code></a>. It will parse the zip's central directory 
+ <br />  information and create a zziplib private directory table in 
+ <br />  memory. 
+<p align="right"><small>(../zzip/zip.c)</small></p></dd>
+<dt><a name="zzip_dir_alloc_ext_io" /><a name="zzip_dir_alloc" /><code><code>ZZIP_DIR*
+</code>
+ <br /><b><code>zzip_dir_alloc_ext_io</code></b>
+ &nbsp; <code>zzip_dir_alloc_ext_io
+ <code>(<nobr>zzip_strings_t* ext</nobr>,
+<nobr>const zzip_plugin_io_t io</nobr>)</code>
+
+</code></code><br />
+<code><code>ZZIP_DIR*
+</code>
+ <br /><b><code>zzip_dir_alloc</code></b>
+ &nbsp; <code>zzip_dir_alloc
+ <code>(<nobr>zzip_strings_t* fileext</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/zip.c)
+<p>   allocate a new ZZIP_DIR handle and do basic  
+ <br />  initializations before usage by <a href="#zzip_dir_fdopen"><code>zzip_dir_fdopen</code></a> 
+ <br />  <a href="#zzip_dir_open"><code>zzip_dir_open</code></a> <a href="#zzip_file_open"><code>zzip_file_open</code></a> or through 
+ <br />  <a href="#zzip_open"><code>zzip_open</code></a> 
+ <br />  (ext==null flags uses { ".zip" , ".ZIP" } ) 
+ <br />  (io ==null flags use of posix io defaults) 
+<p align="right"><small>(../zzip/zip.c)</small></p></dd>
+<dt><a name="zzip_dir_free" /><code><code>int 
+</code>
+ <br /><b><code>zzip_dir_free</code></b>
+ &nbsp; <code>zzip_dir_free
+ <code>(<nobr>ZZIP_DIR * dir</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/zip.c)
+<p>   will free the zzip_dir handle unless there are still  
+ <br />  zzip_files attached (that may use its cache buffer). 
+ <br />  This is the inverse of <a href="#zzip_dir_alloc"><code>zzip_dir_alloc</code></a> , and both 
+ <br />  are helper functions used implicitly in other zzipcalls 
+ <br />  e.g. <a href="#zzip_dir_close"><code>zzip_dir_close</code></a> = zzip_close  
+ <p> 
+   returns zero on sucess 
+ <br />  returns the refcount when files are attached. 
+<p align="right"><small>(../zzip/zip.c)</small></p></dd>
+<dt><a name="zzip_dir_close" /><code><code>int 
+</code>
+ <br /><b><code>zzip_dir_close</code></b>
+ &nbsp; <code>zzip_dir_close
+ <code>(<nobr>ZZIP_DIR * dir</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/zip.c)
+<p>   It will also <code>free(2)</code> the <code>ZZIP_DIR</code>-handle given.  
+ <br />  the counterpart for <a href="#zzip_dir_open"><code>zzip_dir_open</code></a> 
+ <br />  see also <a href="#zzip_dir_free"><code>zzip_dir_free</code></a> 
+<p align="right"><small>(../zzip/zip.c)</small></p></dd>
+<dt><a name="zzip_dir_fdopen" /><a name="zzip_dir_fdopen_ext_io" /><code><code>ZZIP_DIR * 
+</code>
+ <br /><b><code>zzip_dir_fdopen</code></b>
+ &nbsp; <code>zzip_dir_fdopen
+ <code>(<nobr>int fd</nobr>,
+<nobr>zzip_error_t * errcode_p</nobr>)</code>
+
+</code></code><br />
+<code><code>ZZIP_DIR * 
+</code>
+ <br /><b><code>zzip_dir_fdopen_ext_io</code></b>
+ &nbsp; <code>zzip_dir_fdopen_ext_io
+ <code>(<nobr>int fd</nobr>,
+<nobr>zzip_error_t * errcode_p</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>const zzip_plugin_io_t io</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/zip.c)
+<p>   used by the <a href="#zzip_dir_open"><code>zzip_dir_open</code></a> and zzip_opendir(2) call. Opens the 
+ <br />  zip-archive as specified with the fd which points to an 
+ <br />  already openend file. This function then search and parse 
+ <br />  the zip's central directory. 
+ <br />  <p>  
+   NOTE: refcount is zero, so an _open/_close pair will also delete  
+ <br />        this _dirhandle  
+<p align="right"><small>(../zzip/zip.c)</small></p></dd>
+<dt><a name="__zzip_try_open" /><code><code>int
+</code>
+ <br /><b><code>__zzip_try_open</code></b>
+ &nbsp; <code>__zzip_try_open
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>int filemode</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/zip.c)
+<p>   will attach a .zip extension and tries to open it 
+ <br />  the with <code>open(2)</code>. This is a helper function for 
+ <br />  <a href="#zzip_dir_open"><code>zzip_dir_open</code></a>, <a href="#zzip_opendir"><code>zzip_opendir</code></a> and <a href="#zzip_open"><code>zzip_open</code></a>. 
+<p align="right"><small>(../zzip/zip.c)</small></p></dd>
+<dt><a name="zzip_dir_open" /><a name="zzip_dir_open_ext_io" /><code><code>ZZIP_DIR* 
+</code>
+ <br /><b><code>zzip_dir_open</code></b>
+ &nbsp; <code>zzip_dir_open
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>zzip_error_t* e</nobr>)</code>
+
+</code></code><br />
+<code><code>ZZIP_DIR* 
+</code>
+ <br /><b><code>zzip_dir_open_ext_io</code></b>
+ &nbsp; <code>zzip_dir_open_ext_io
+ <code>(<nobr>zzip_char_t* filename</nobr>,
+<nobr>zzip_error_t* e</nobr>,
+<nobr>zzip_strings_t* ext</nobr>,
+<nobr>zzip_plugin_io_t io</nobr>)</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/zip.c)
+<p>   Opens the zip-archive (if available). 
+ <br />  the two ext_io arguments will default to use posix io and  
+ <br />  a set of default fileext that can atleast add .zip ext itself. 
+<p align="right"><small>(../zzip/zip.c)</small></p></dd>
+<dt><a name="zzip_dir_read" /><code><code>int
+</code>
+ <br /><b><code>zzip_dir_read</code></b>
+ &nbsp; <code>zzip_dir_read
+ <code>(<nobr>ZZIP_DIR * dir</nobr>,
+<nobr>ZZIP_DIRENT * d</nobr> )</code>
+
+</code></code><dt>
+<dd><p> &nbsp;(../zzip/zip.c)
+<p>   fills the dirent-argument with the values and  
+ <br />  increments the read-pointer of the dir-argument. 
+ <br />  <p> 
+   returns 0 if there no entry (anymore). 
+<p align="right"><small>(../zzip/zip.c)</small></p></dd>
+</dl>
+</body></html>
+</td></tr></table></body></html>