Back to index

lightning-sunbird  0.9+nobinonly
zip.h
Go to the documentation of this file.
00001 /* ***** BEGIN LICENSE BLOCK *****
00002  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00003  *
00004  * The contents of this file are subject to the Mozilla Public License Version
00005  * 1.1 (the "License"); you may not use this file except in compliance with
00006  * the License. You may obtain a copy of the License at
00007  * http://www.mozilla.org/MPL/
00008  *
00009  * Software distributed under the License is distributed on an "AS IS" basis,
00010  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00011  * for the specific language governing rights and limitations under the
00012  * License.
00013  *
00014  * The Original Code is the Netscape security libraries.
00015  *
00016  * The Initial Developer of the Original Code is
00017  * Netscape Communications Corporation.
00018  * Portions created by the Initial Developer are Copyright (C) 1994-2000
00019  * the Initial Developer. All Rights Reserved.
00020  *
00021  * Contributor(s):
00022  *
00023  * Alternatively, the contents of this file may be used under the terms of
00024  * either the GNU General Public License Version 2 or later (the "GPL"), or
00025  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00026  * in which case the provisions of the GPL or the LGPL are applicable instead
00027  * of those above. If you wish to allow use of your version of this file only
00028  * under the terms of either the GPL or the LGPL, and not to allow others to
00029  * use your version of this file under the terms of the MPL, indicate your
00030  * decision by deleting the provisions above and replace them with the notice
00031  * and other provisions required by the GPL or the LGPL. If you do not delete
00032  * the provisions above, a recipient may use your version of this file under
00033  * the terms of any one of the MPL, the GPL or the LGPL.
00034  *
00035  * ***** END LICENSE BLOCK ***** */
00036 
00037 /* zip.h
00038  * Structures and functions for creating ZIP archives.
00039  */
00040 #ifndef ZIP_H
00041 #define ZIP_H
00042 
00043 /* For general information on ZIP formats, you can look at jarfile.h
00044  * in ns/security/lib/jar.  Or look it up on the web...
00045  */
00046 
00047 /* One entry in a ZIPfile.  This corresponds to one file in the archive.
00048  * We have to save this information because first all the files go into
00049  * the archive with local headers; then at the end of the file we have to
00050  * put the central directory entries for each file.
00051  */
00052 typedef struct ZIPentry_s {
00053        struct ZipLocal local;             /* local header info */
00054        struct ZipCentral central;  /* central directory info */
00055        char *filename;                           /* name of file */
00056        char *comment;                            /* comment for this file -- optional */
00057 
00058        struct ZIPentry_s *next;
00059 } ZIPentry;
00060 
00061 /* This structure contains the necessary data for putting a ZIP file
00062  * together.  Has some overall information and a list of ZIPentrys.
00063  */
00064 typedef struct ZIPfile_s {
00065        char *filename;      /* ZIP file name */
00066        char *comment;       /* ZIP file comment -- may be NULL */
00067        PRFileDesc *fp;      /* ZIP file pointer */
00068        ZIPentry *list;      /* one entry for each file in the archive */
00069        unsigned int time;   /* the GMT time of creation, in DOS format */
00070        unsigned int date;  /* the GMT date of creation, in DOS format */
00071        unsigned long central_start; /* starting offset of central directory */
00072        unsigned long central_end; /*index right after the last byte of central*/
00073 } ZIPfile;
00074 
00075 
00076 /* Open a new ZIP file.  Takes the name of the zip file and an optional
00077  * comment to be included in the file.  Returns a new ZIPfile structure
00078  * which is used by JzipAdd and JzipClose
00079  */
00080 ZIPfile* JzipOpen(char *filename, char *comment);
00081 
00082 /* Add a file to a ZIP archive.  Fullname is the path relative to the
00083  * current directory.  Filename is what the name will be stored as in the
00084  * archive, and thus what it will be restored as.  zipfile is a structure
00085  * returned from a previous call to JzipOpen.
00086  *
00087  * Non-zero return code means error (although usually the function will
00088  * call exit() rather than return an error--gotta fix this).
00089  */
00090 int JzipAdd(char *fullname, char *filename, ZIPfile *zipfile,
00091        int compression_level);
00092 
00093 /* Finalize a ZIP archive.  Adds all the footer information to the end of
00094  * the file and closes it.  Also DELETES THE ZIPFILE STRUCTURE that was
00095  * passed in.  So you never have to allocate or free a ZIPfile yourself.
00096  *
00097  * Non-zero return code means error (although usually the function will
00098  * call exit() rather than return an error--gotta fix this).
00099  */
00100 int JzipClose (ZIPfile *zipfile);
00101 
00102 
00103 #endif /* ZIP_H */