59 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* gzlog.h
 | 
						|
  Copyright (C) 2004 Mark Adler, all rights reserved
 | 
						|
  version 1.0, 26 Nov 2004
 | 
						|
 | 
						|
  This software is provided 'as-is', without any express or implied
 | 
						|
  warranty.  In no event will the author be held liable for any damages
 | 
						|
  arising from the use of this software.
 | 
						|
 | 
						|
  Permission is granted to anyone to use this software for any purpose,
 | 
						|
  including commercial applications, and to alter it and redistribute it
 | 
						|
  freely, subject to the following restrictions:
 | 
						|
 | 
						|
  1. The origin of this software must not be misrepresented; you must not
 | 
						|
     claim that you wrote the original software. If you use this software
 | 
						|
     in a product, an acknowledgment in the product documentation would be
 | 
						|
     appreciated but is not required.
 | 
						|
  2. Altered source versions must be plainly marked as such, and must not be
 | 
						|
     misrepresented as being the original software.
 | 
						|
  3. This notice may not be removed or altered from any source distribution.
 | 
						|
 | 
						|
  Mark Adler    madler@alumni.caltech.edu
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
   The gzlog object allows writing short messages to a gzipped log file,
 | 
						|
   opening the log file locked for small bursts, and then closing it.  The log
 | 
						|
   object works by appending stored data to the gzip file until 1 MB has been
 | 
						|
   accumulated.  At that time, the stored data is compressed, and replaces the
 | 
						|
   uncompressed data in the file.  The log file is truncated to its new size at
 | 
						|
   that time.  After closing, the log file is always valid gzip file that can
 | 
						|
   decompressed to recover what was written.
 | 
						|
 | 
						|
   A gzip header "extra" field contains two file offsets for appending.  The
 | 
						|
   first points to just after the last compressed data.  The second points to
 | 
						|
   the last stored block in the deflate stream, which is empty.  All of the
 | 
						|
   data between those pointers is uncompressed.
 | 
						|
 */
 | 
						|
 | 
						|
/* Open a gzlog object, creating the log file if it does not exist.  Return
 | 
						|
   NULL on error.  Note that gzlog_open() could take a long time to return if
 | 
						|
   there is difficulty in locking the file. */
 | 
						|
void *gzlog_open(char *path);
 | 
						|
 | 
						|
/* Write to a gzlog object.  Return non-zero on error.  This function will
 | 
						|
   simply write data to the file uncompressed.  Compression of the data
 | 
						|
   will not occur until gzlog_close() is called.  It is expected that
 | 
						|
   gzlog_write() is used for a short message, and then gzlog_close() is
 | 
						|
   called.  If a large amount of data is to be written, then the application
 | 
						|
   should write no more than 1 MB at a time with gzlog_write() before
 | 
						|
   calling gzlog_close() and then gzlog_open() again. */
 | 
						|
int gzlog_write(void *log, char *data, size_t len);
 | 
						|
 | 
						|
/* Close a gzlog object.  Return non-zero on error.  The log file is locked
 | 
						|
   until this function is called.  This function will compress stored data
 | 
						|
   at the end of the gzip file if at least 1 MB has been accumulated.  Note
 | 
						|
   that the file will not be a valid gzip file until this function completes.
 | 
						|
 */
 | 
						|
int gzlog_close(void *log);
 |