1ZZIP_DISK_FINDFILE(3)        zziplib Function List       ZZIP_DISK_FINDFILE(3)
2
3
4

NAME

6       zzip_disk_findfile, zzip_disk_findfirst, zzip_disk_findnext,
7       zzip_disk_findmatch - search for files in the (mmapped) zip central
8       directory
9

SYNOPSIS

11       #include <zzip/mmapped.h>
12
13       struct zzip_disk_entry *
14                                                   zzip_disk_findfile((ZZIP_DISK * disk, char *filename, struct zzip_disk_entry *after, zzip_strcmp_fn_t compare));
15
16       struct zzip_disk_entry * zzip_disk_findfirst((ZZIP_DISK * disk));
17
18       struct zzip_disk_entry *
19                                                   zzip_disk_findnext((ZZIP_DISK * disk, struct zzip_disk_entry *entry));
20
21       struct zzip_disk_entry *
22                                                    zzip_disk_findmatch((ZZIP_DISK * disk, char *filespec, struct zzip_disk_entry *after, zzip_fnmatch_fn_t compare, int flags));
23

DESCRIPTION

25       The zzip_disk_findfile function is given a filename as an additional
26       argument, to find the disk_entry matching a given filename. The
27       compare-function is usually strcmp or strcasecmp or perhaps strcoll, if
28       null then strcmp is used. - use null as argument for "after"-entry when
29       searching the first matching entry, otherwise the last returned value
30       if you look for other entries with a special "compare" function (if
31       null then a doubled search is rather useless with this variant of
32       _findfile).
33
34       The zzip_disk_findfile functionreturns the entry pointer. The
35       zzip_disk_findfile function may return null on error. (errno =
36       ENOMEM|EBADMSG|ENOENT)
37
38       The zzip_disk_findfirst function is the first call of all the zip
39       access functions here. It contains the code to find the first entry of
40       the zip central directory. Here we require the mmapped block to
41       represent a real zip file where the disk_trailer is _last_ in the file
42       area, so that its position would be at a fixed offset from the end of
43       the file area if not for the comment field allowed to be of variable
44       length (which needs us to do a little search for the disk_tailer).
45       However, in this simple implementation we disregard any disk_trailer
46       info telling about multidisk archives, so we just return a pointer to
47       the zip central directory.
48
49       For an actual means, we are going to search backwards from the end of
50       the mmaped block looking for the PK-magic signature of a disk_trailer.
51       If we see one then we check the rootseek value to find the first
52       disk_entry of the root central directory. If we find the correct
53       PK-magic signature of a disk_entry over there then we assume we are
54       done and we are going to return a pointer to that label.
55
56       The return value is a pointer to the first zzip_disk_entry being
57       checked to be within the bounds of the file area specified by the
58       arguments. If no disk_trailer was found then null is returned, and
59       likewise we only accept a disk_trailer with a seekvalue that points to
60       a disk_entry and both parts have valid PK-magic parts. Beyond some
61       sanity check we try to catch a common brokeness with zip archives that
62       still allows us to find the start of the zip central directory.So the
63       zzip_disk_findfirst function may return null and sets errno.
64
65       The zzip_disk_findnext function takes an existing disk_entry in the
66       central root directory (e.g. from zzip_disk_findfirst) and returns the
67       next entry within in the given bounds of the mmapped file area.
68
69       The zzip_disk_findnext function returns null if no next entry can be
70       found. The zzip_disk_findnext function may return null on errors.
71       (errno = ENOENT|EINVAL|EBADMSG)
72
73       The zzip_disk_findmatch function uses a compare-function with an
74       additional argument and it is called just like fnmatch(3) from POSIX.2
75       AD:1993), i.e. the argument filespec first and the ziplocal filename
76       second with the integer-flags put in as third to the indirect call. If
77       the platform has fnmatch available then null-compare will use that one
78       and otherwise we fall back to mere strcmp, so if you need fnmatch
79       searching then please provide an implementation somewhere else. - use
80       null as argument for "after"-entry when searching the first matching
81       entry, or the last disk_entry return-value to find the next entry
82       matching the given filespec.
83
84       The zzip_disk_findmatch function will return the matching entry
85       pointer. The zzip_disk_findmatch function may return null on error.
86       (errno = ENOMEM|EBADMSG|ENOENT)
87

AUTHOR

89       ยท   Guido Draheim <guidod@gmx.de>
90
92       Copyright (c)Guido Draheim, use under copyleft (LGPL,MPL)
93
94
95
96zziplib                             0.13.69              ZZIP_DISK_FINDFILE(3)
Impressum