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