Home | History | Annotate | Line # | Download | only in examples
gzlog.h revision 1.1
      1  1.1  christos /*	$NetBSD: gzlog.h,v 1.1 2006/01/14 20:11:09 christos Exp $	*/
      2  1.1  christos 
      3  1.1  christos /* gzlog.h
      4  1.1  christos   Copyright (C) 2004 Mark Adler, all rights reserved
      5  1.1  christos   version 1.0, 26 Nov 2004
      6  1.1  christos 
      7  1.1  christos   This software is provided 'as-is', without any express or implied
      8  1.1  christos   warranty.  In no event will the author be held liable for any damages
      9  1.1  christos   arising from the use of this software.
     10  1.1  christos 
     11  1.1  christos   Permission is granted to anyone to use this software for any purpose,
     12  1.1  christos   including commercial applications, and to alter it and redistribute it
     13  1.1  christos   freely, subject to the following restrictions:
     14  1.1  christos 
     15  1.1  christos   1. The origin of this software must not be misrepresented; you must not
     16  1.1  christos      claim that you wrote the original software. If you use this software
     17  1.1  christos      in a product, an acknowledgment in the product documentation would be
     18  1.1  christos      appreciated but is not required.
     19  1.1  christos   2. Altered source versions must be plainly marked as such, and must not be
     20  1.1  christos      misrepresented as being the original software.
     21  1.1  christos   3. This notice may not be removed or altered from any source distribution.
     22  1.1  christos 
     23  1.1  christos   Mark Adler    madler (at) alumni.caltech.edu
     24  1.1  christos  */
     25  1.1  christos 
     26  1.1  christos /*
     27  1.1  christos    The gzlog object allows writing short messages to a gzipped log file,
     28  1.1  christos    opening the log file locked for small bursts, and then closing it.  The log
     29  1.1  christos    object works by appending stored data to the gzip file until 1 MB has been
     30  1.1  christos    accumulated.  At that time, the stored data is compressed, and replaces the
     31  1.1  christos    uncompressed data in the file.  The log file is truncated to its new size at
     32  1.1  christos    that time.  After closing, the log file is always valid gzip file that can
     33  1.1  christos    decompressed to recover what was written.
     34  1.1  christos 
     35  1.1  christos    A gzip header "extra" field contains two file offsets for appending.  The
     36  1.1  christos    first points to just after the last compressed data.  The second points to
     37  1.1  christos    the last stored block in the deflate stream, which is empty.  All of the
     38  1.1  christos    data between those pointers is uncompressed.
     39  1.1  christos  */
     40  1.1  christos 
     41  1.1  christos /* Open a gzlog object, creating the log file if it does not exist.  Return
     42  1.1  christos    NULL on error.  Note that gzlog_open() could take a long time to return if
     43  1.1  christos    there is difficulty in locking the file. */
     44  1.1  christos void *gzlog_open(char *path);
     45  1.1  christos 
     46  1.1  christos /* Write to a gzlog object.  Return non-zero on error.  This function will
     47  1.1  christos    simply write data to the file uncompressed.  Compression of the data
     48  1.1  christos    will not occur until gzlog_close() is called.  It is expected that
     49  1.1  christos    gzlog_write() is used for a short message, and then gzlog_close() is
     50  1.1  christos    called.  If a large amount of data is to be written, then the application
     51  1.1  christos    should write no more than 1 MB at a time with gzlog_write() before
     52  1.1  christos    calling gzlog_close() and then gzlog_open() again. */
     53  1.1  christos int gzlog_write(void *log, char *data, size_t len);
     54  1.1  christos 
     55  1.1  christos /* Close a gzlog object.  Return non-zero on error.  The log file is locked
     56  1.1  christos    until this function is called.  This function will compress stored data
     57  1.1  christos    at the end of the gzip file if at least 1 MB has been accumulated.  Note
     58  1.1  christos    that the file will not be a valid gzip file until this function completes.
     59  1.1  christos  */
     60  1.1  christos int gzlog_close(void *log);
     61