[novacom-server/f15] Initial release

Jonathan Dieter jdieter at fedoraproject.org
Mon May 7 14:13:35 UTC 2012


commit b793a5345233a01a20f37b57c735c0703f9d5fa0
Author: Jonathan Dieter <jdieter at lesbg.com>
Date:   Mon May 7 17:12:11 2012 +0300

    Initial release
    
    Signed-off-by: Jonathan Dieter <jdieter at lesbg.com>

 .gitignore                                         |    1 +
 ...k_-read-write-instead-of-homemade-handler.patch |   95 ++
 config-novacomd                                    |    4 +
 novacom-server.spec                                |  111 +++
 novacomd-makefile-remove-adler32.patch             |  915 ++++++++++++++++++++
 novacomd-quiet-logging.patch                       |   12 +
 novacomd.service                                   |   10 +
 novacomd_add_cflags.patch                          |   12 +
 sources                                            |    1 +
 9 files changed, 1161 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index e69de29..d659662 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/openwebos-novacomd-submissions-119.1-0-ge77d336.tar.gz
diff --git a/0001-Use-usb_bulk_-read-write-instead-of-homemade-handler.patch b/0001-Use-usb_bulk_-read-write-instead-of-homemade-handler.patch
new file mode 100644
index 0000000..d3ba343
--- /dev/null
+++ b/0001-Use-usb_bulk_-read-write-instead-of-homemade-handler.patch
@@ -0,0 +1,95 @@
+From c4586e80dc6f1a92513b466d8d43748ec733b7fd Mon Sep 17 00:00:00 2001
+From: Jonathan Dieter <jdieter at lesbg.com>
+Date: Mon, 2 Apr 2012 14:35:09 +0300
+Subject: [PATCH] Use usb_bulk_[read|write] instead of homemade handlers. 
+ This allows us to run against libusb-compat as well as the
+ old libusb.
+
+Signed-off-by: Jonathan Dieter <jdieter at lesbg.com>
+---
+ src/host/usb-linux.c |   42 ++++++------------------------------------
+ 1 files changed, 6 insertions(+), 36 deletions(-)
+
+diff --git a/src/host/usb-linux.c b/src/host/usb-linux.c
+index 55cc0b5..65f94c4 100644
+--- a/src/host/usb-linux.c
++++ b/src/host/usb-linux.c
+@@ -49,20 +49,8 @@
+ 
+ #define USBDEVFS_IOCTL_TIMEOUT  2000
+ 
+-struct myusb_dev_handle {
+-	int fd;
+-
+-	// other stuff here
+-};
+-
+ typedef struct {
+-	union {
+-		usb_dev_handle *handle;
+-
+-		/* XXX cheezy hack to let us get to the file descriptor hidden in the libusb handle */
+-		struct myusb_dev_handle *myhandle;
+-	};
+-
++	usb_dev_handle *handle;
+ 	novacom_usbll_handle_t usbll_handle;
+ 
+ 	bool shutdown;
+@@ -218,7 +206,7 @@ static novacom_usb_handle_t *novacom_usb_open( void )
+ 					if (!handle) continue;
+ 
+ #if USB_SCAN_TRACE
+-					log_printf(LOG_SPEW, "opened usb handle: fd %d\n", ((struct myusb_dev_handle *)handle)->fd);
++					log_printf(LOG_SPEW, "opened usb handle: devnum %d\n", dev->devnum);
+ #endif
+ 
+ 					int eps[2];
+@@ -281,17 +269,10 @@ int novacom_usb_transport_init(void)
+ static int novacom_usb_read(novacom_usb_handle_t *handle, void *buf, size_t len)
+ {
+ //	TRACEF("handle %p, buf %p, len %d, timeout %d\n", handle, buf, len, timeout);
+-//	TRACEF("fd %d\n", handle->myhandle->fd);
+-
+-	struct usbdevfs_bulktransfer bulktransfer;
+-
+-	bulktransfer.ep = handle->rxep;
+-	bulktransfer.len = len;
+-	bulktransfer.timeout = handle->rx_timeout;
+-	bulktransfer.data = buf;
+ 
+ 	int rc;
+-	rc = ioctl(handle->myhandle->fd, USBDEVFS_BULK, &bulktransfer);
++
++	rc = usb_bulk_read(handle->handle, handle->rxep, buf, len, handle->rx_timeout);
+ 	if (rc > 0) { //now check the packet header
+ 
+ 		if (novacom_usbll_check_packet_header(buf, rc)) { //bad packet
+@@ -303,22 +284,11 @@ static int novacom_usb_read(novacom_usb_handle_t *handle, void *buf, size_t len)
+ 	return rc;
+ }
+ 
+-static int novacom_usb_write(novacom_usb_handle_t *handle, const void *buf, size_t len)
++static int novacom_usb_write(novacom_usb_handle_t *handle, void *buf, size_t len)
+ {
+ //	TRACEF("handle %p, buf %p, len %d, timeout %d\n", handle, buf, len, timeout);
+-//	TRACEF("fd %d\n", handle->myhandle->fd);
+-
+-	struct usbdevfs_bulktransfer bulktransfer;
+ 
+-	bulktransfer.ep = handle->txep;
+-	bulktransfer.len = len;
+-	bulktransfer.timeout = handle->tx_timeout;
+-	bulktransfer.data = (void *)buf;
+-
+-	int rc;
+-	rc = ioctl(handle->myhandle->fd, USBDEVFS_BULK, &bulktransfer);
+-//	TRACEF("rc %d\n", rc);
+-	return rc;
++	return usb_bulk_write(handle->handle, handle->txep, buf, len, handle->tx_timeout);	
+ }
+ 
+ struct usb_thread_args {
+-- 
+1.7.7.6
+
diff --git a/config-novacomd b/config-novacomd
new file mode 100644
index 0000000..4e03a27
--- /dev/null
+++ b/config-novacomd
@@ -0,0 +1,4 @@
+# Bind to 127.0.0.1 by default.  Only change this if you want to access the
+# Novacom server from other systems
+
+OPTIONS="-b 127.0.0.1"
diff --git a/novacom-server.spec b/novacom-server.spec
new file mode 100644
index 0000000..a1d8819
--- /dev/null
+++ b/novacom-server.spec
@@ -0,0 +1,111 @@
+%global _hardened_build 1
+
+Name:		novacom-server
+Version:	1.1.0
+Release:	0.6.rc1%{?dist}
+Summary:	Service for utility that connects to WebOS devices
+Group:		Development/Tools
+License:	ASL 2.0
+URL:		https://github.com/openwebos/novacomd
+Source0:	https://github.com/openwebos/novacomd/tarball/versions/1.1.0-rc1/openwebos-novacomd-submissions-119.1-0-ge77d336.tar.gz
+Source1:	novacomd.service
+Source2:	config-novacomd
+# This patch allows novacomd to work against Fedora's libusb
+Patch0:		0001-Use-usb_bulk_-read-write-instead-of-homemade-handler.patch
+# This patch forces the makefile to use our CFLAGS
+Patch1:		novacomd_add_cflags.patch
+# This patch muffles the logging of every packet to the device
+Patch2:		novacomd-quiet-logging.patch
+# This patch removes unused adler32 library from the makefile
+Patch3:		novacomd-makefile-remove-adler32.patch
+Requires:	systemd-units
+Requires(post): systemd-units
+Requires(preun): systemd-units
+Requires(postun): systemd-units
+Provides:	novacomd = %{version}-%{release}
+BuildRoot:	%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
+BuildRequires:	libusb-devel%{_isa} systemd-units
+
+%description
+This service allows the novacom client to connect to WebOS devices that are
+connected over USB.
+
+It should be started using 'systemctl start novacomd.service' as root.
+
+%prep
+%setup -q -n openwebos-novacomd-e77d336
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+# Remove unused and unneeded zlib headers and adler32 library
+rm -f src/lib/cksum/adler32.c
+rm -f src/lib/cksum/zlib.h
+
+%build
+make host LDFLAGS="$RPM_OPT_FLAGS" CFLAGS="$RPM_OPT_FLAGS" %{?_smp_mflags}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/%{_bindir}
+install -pm 755 build-novacomd-host/novacomd $RPM_BUILD_ROOT/%{_bindir}
+mkdir -p $RPM_BUILD_ROOT/%{_unitdir}
+install -pm 644 %{SOURCE1} $RPM_BUILD_ROOT/%{_unitdir}
+mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/default
+install -pm 644 %{SOURCE2} $RPM_BUILD_ROOT/%{_sysconfdir}/default/novacomd
+
+%post
+if [ $1 -eq 1 ] ; then 
+    # Initial installation 
+    /bin/systemctl daemon-reload >/dev/null 2>&1 || :
+fi
+
+%preun
+if [ $1 -eq 0 ] ; then
+    # Package removal, not upgrade
+    /bin/systemctl --no-reload disable novacomd.service > /dev/null 2>&1 || :
+    /bin/systemctl stop novacomd.service > /dev/null 2>&1 || :
+fi
+
+%postun
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+if [ $1 -ge 1 ] ; then
+    # Package upgrade, not uninstall
+    /bin/systemctl try-restart novacomd.service >/dev/null 2>&1 || :
+fi
+
+%files
+%doc README.md
+%{_bindir}/novacomd
+%{_unitdir}/novacomd.service
+%config(noreplace) %{_sysconfdir}/default/novacomd
+
+%changelog
+* Mon May  7 2012 Jonathan Dieter <jdieter at lesbg.com> - 1.1.0-0.6.rc1
+- Preserve timestamps during install
+- Remove unused zlib header and adler32 code
+- Remove unnecessary filler that's not needed for Fedora
+
+* Sun May  6 2012 Jonathan Dieter <jdieter at lesbg.com> - 1.1.0-0.5.rc1
+- Let's try this one again.  This time really muffle logging of every packet
+  sent to device
+
+* Wed May  2 2012 Jonathan Dieter <jdieter at lesbg.com> - 1.1.0-0.4.rc1
+- Muffle logging of every packet sent to device
+
+* Thu Apr 26 2012 Jonathan Dieter <jdieter at lesbg.com> - 1.1.0-0.3.rc1
+- Use consistent RPM_OPT_FLAGS and RPM_BUILD_ROOT variables
+- Change define macro to global
+- Remove unnecessary BR: glibc-devel
+- Turn on hardened build
+- Fix provides for novacomd
+
+* Thu Apr 12 2012 Jonathan Dieter <jdieter at lesbg.com> - 1.1.0-0.2.rc1
+- Rename to novacom-server and add provides for novacomd
+- Add systemd service
+
+* Mon Apr  2 2012 Jonathan Dieter <jdieter at lesbg.com> - 1.1.0-0.1.rc1
+- Add patch that allows novacomd to work against Fedora's libusb
+
+* Sat Mar 31 2012 Jonathan Dieter <jdieter at lesbg.com> - 0.9-0.1.git.e77d33616f
+- Initial release
diff --git a/novacomd-makefile-remove-adler32.patch b/novacomd-makefile-remove-adler32.patch
new file mode 100644
index 0000000..52eb4e8
--- /dev/null
+++ b/novacomd-makefile-remove-adler32.patch
@@ -0,0 +1,915 @@
+diff -urNb novacomd-git-e77d33616f/makefile novacomd-git-e77d33616f.b/makefile
+--- novacomd-git-e77d33616f/makefile	2012-03-28 23:10:56.000000000 +0300
++++ novacomd-git-e77d33616f.b/makefile	2012-05-07 16:49:46.751001298 +0300
+@@ -83,7 +83,6 @@
+ 	src/novacom/commands.o \
+ 	src/novacom/commands_device.o \
+ \
+-	src/lib/cksum/adler32.o \
+ 	src/lib/cksum/sha1.o \
+ 	src/lib/buffer.o
+ 
+diff -urNb novacomd-git-e77d33616f/src/lib/cksum/adler32.c novacomd-git-e77d33616f.b/src/lib/cksum/adler32.c
+--- novacomd-git-e77d33616f/src/lib/cksum/adler32.c	2012-03-28 23:10:56.000000000 +0300
++++ novacomd-git-e77d33616f.b/src/lib/cksum/adler32.c	1970-01-01 02:00:00.000000000 +0200
+@@ -1,46 +0,0 @@
+-/* adler32.c -- compute the Adler-32 checksum of a data stream
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h 
+- */
+-
+-/* @(#) $Id$ */
+-
+-#include <stdlib.h>
+-#include <lib/cksum.h>
+-
+-#define BASE 65521L /* largest prime smaller than 65536 */
+-#define NMAX 5552
+-/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
+-
+-#define DO1(buf,i)  {s1 += buf[i]; s2 += s1;}
+-#define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);
+-#define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);
+-#define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
+-#define DO16(buf)   DO8(buf,0); DO8(buf,8);
+-
+-/* ========================================================================= */
+-unsigned long adler32(unsigned long adler, const unsigned char *buf, unsigned int len)
+-{
+-    unsigned long s1 = adler & 0xffff;
+-    unsigned long s2 = (adler >> 16) & 0xffff;
+-    int k;
+-
+-    if (buf == NULL) return 1L;
+-
+-    while (len > 0) {
+-        k = len < NMAX ? len : NMAX;
+-        len -= k;
+-        while (k >= 16) {
+-            DO16(buf);
+-	    buf += 16;
+-            k -= 16;
+-        }
+-        if (k != 0) do {
+-            s1 += *buf++;
+-	    s2 += s1;
+-        } while (--k);
+-        s1 %= BASE;
+-        s2 %= BASE;
+-    }
+-    return (s2 << 16) | s1;
+-}
+diff -urNb novacomd-git-e77d33616f/src/lib/cksum/zlib.h novacomd-git-e77d33616f.b/src/lib/cksum/zlib.h
+--- novacomd-git-e77d33616f/src/lib/cksum/zlib.h	2012-03-28 23:10:56.000000000 +0300
++++ novacomd-git-e77d33616f.b/src/lib/cksum/zlib.h	1970-01-01 02:00:00.000000000 +0200
+@@ -1,850 +0,0 @@
+-/* zlib.h -- interface of the 'zlib' general purpose compression library
+-  version 1.1.3, July 9th, 1998
+-
+-  Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
+-
+-  This software is provided 'as-is', without any express or implied
+-  warranty.  In no event will the authors 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.
+-
+-  Jean-loup Gailly        Mark Adler
+-  jloup at gzip.org          madler at alumni.caltech.edu
+-
+-
+-  The data format used by the zlib library is described by RFCs (Request for
+-  Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
+-  (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
+-*/
+-
+-#ifndef _ZLIB_H
+-#define _ZLIB_H
+-
+-#include "zconf.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-#define ZLIB_VERSION "1.1.3"
+-
+-/* 
+-     The 'zlib' compression library provides in-memory compression and
+-  decompression functions, including integrity checks of the uncompressed
+-  data.  This version of the library supports only one compression method
+-  (deflation) but other algorithms will be added later and will have the same
+-  stream interface.
+-
+-     Compression can be done in a single step if the buffers are large
+-  enough (for example if an input file is mmap'ed), or can be done by
+-  repeated calls of the compression function.  In the latter case, the
+-  application must provide more input and/or consume the output
+-  (providing more output space) before each call.
+-
+-     The library also supports reading and writing files in gzip (.gz) format
+-  with an interface similar to that of stdio.
+-
+-     The library does not install any signal handler. The decoder checks
+-  the consistency of the compressed data, so the library should never
+-  crash even in case of corrupted input.
+-*/
+-
+-typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
+-typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
+-
+-struct internal_state;
+-
+-typedef struct z_stream_s {
+-    Bytef    *next_in;  /* next input byte */
+-    uInt     avail_in;  /* number of bytes available at next_in */
+-    uLong    total_in;  /* total nb of input bytes read so far */
+-
+-    Bytef    *next_out; /* next output byte should be put there */
+-    uInt     avail_out; /* remaining free space at next_out */
+-    uLong    total_out; /* total nb of bytes output so far */
+-
+-    char     *msg;      /* last error message, NULL if no error */
+-    struct internal_state FAR *state; /* not visible by applications */
+-
+-    alloc_func zalloc;  /* used to allocate the internal state */
+-    free_func  zfree;   /* used to free the internal state */
+-    voidpf     opaque;  /* private data object passed to zalloc and zfree */
+-
+-    int     data_type;  /* best guess about the data type: ascii or binary */
+-    uLong   adler;      /* adler32 value of the uncompressed data */
+-    uLong   reserved;   /* reserved for future use */
+-} z_stream;
+-
+-typedef z_stream FAR *z_streamp;
+-
+-/*
+-   The application must update next_in and avail_in when avail_in has
+-   dropped to zero. It must update next_out and avail_out when avail_out
+-   has dropped to zero. The application must initialize zalloc, zfree and
+-   opaque before calling the init function. All other fields are set by the
+-   compression library and must not be updated by the application.
+-
+-   The opaque value provided by the application will be passed as the first
+-   parameter for calls of zalloc and zfree. This can be useful for custom
+-   memory management. The compression library attaches no meaning to the
+-   opaque value.
+-
+-   zalloc must return Z_NULL if there is not enough memory for the object.
+-   If zlib is used in a multi-threaded application, zalloc and zfree must be
+-   thread safe.
+-
+-   On 16-bit systems, the functions zalloc and zfree must be able to allocate
+-   exactly 65536 bytes, but will not be required to allocate more than this
+-   if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
+-   pointers returned by zalloc for objects of exactly 65536 bytes *must*
+-   have their offset normalized to zero. The default allocation function
+-   provided by this library ensures this (see zutil.c). To reduce memory
+-   requirements and avoid any allocation of 64K objects, at the expense of
+-   compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
+-
+-   The fields total_in and total_out can be used for statistics or
+-   progress reports. After compression, total_in holds the total size of
+-   the uncompressed data and may be saved for use in the decompressor
+-   (particularly if the decompressor wants to decompress everything in
+-   a single step).
+-*/
+-
+-                        /* constants */
+-
+-#define Z_NO_FLUSH      0
+-#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
+-#define Z_SYNC_FLUSH    2
+-#define Z_FULL_FLUSH    3
+-#define Z_FINISH        4
+-/* Allowed flush values; see deflate() below for details */
+-
+-#define Z_OK            0
+-#define Z_STREAM_END    1
+-#define Z_NEED_DICT     2
+-#define Z_ERRNO        (-1)
+-#define Z_STREAM_ERROR (-2)
+-#define Z_DATA_ERROR   (-3)
+-#define Z_MEM_ERROR    (-4)
+-#define Z_BUF_ERROR    (-5)
+-#define Z_VERSION_ERROR (-6)
+-/* Return codes for the compression/decompression functions. Negative
+- * values are errors, positive values are used for special but normal events.
+- */
+-
+-#define Z_NO_COMPRESSION         0
+-#define Z_BEST_SPEED             1
+-#define Z_BEST_COMPRESSION       9
+-#define Z_DEFAULT_COMPRESSION  (-1)
+-/* compression levels */
+-
+-#define Z_FILTERED            1
+-#define Z_HUFFMAN_ONLY        2
+-#define Z_DEFAULT_STRATEGY    0
+-/* compression strategy; see deflateInit2() below for details */
+-
+-#define Z_BINARY   0
+-#define Z_ASCII    1
+-#define Z_UNKNOWN  2
+-/* Possible values of the data_type field */
+-
+-#define Z_DEFLATED   8
+-/* The deflate compression method (the only one supported in this version) */
+-
+-#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
+-
+-#define zlib_version zlibVersion()
+-/* for compatibility with versions < 1.0.2 */
+-
+-                        /* basic functions */
+-
+-ZEXTERN const char * ZEXPORT zlibVersion OF((void));
+-/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+-   If the first character differs, the library code actually used is
+-   not compatible with the zlib.h header file used by the application.
+-   This check is automatically made by deflateInit and inflateInit.
+- */
+-
+-/* 
+-ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
+-
+-     Initializes the internal stream state for compression. The fields
+-   zalloc, zfree and opaque must be initialized before by the caller.
+-   If zalloc and zfree are set to Z_NULL, deflateInit updates them to
+-   use default allocation functions.
+-
+-     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+-   1 gives best speed, 9 gives best compression, 0 gives no compression at
+-   all (the input data is simply copied a block at a time).
+-   Z_DEFAULT_COMPRESSION requests a default compromise between speed and
+-   compression (currently equivalent to level 6).
+-
+-     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
+-   enough memory, Z_STREAM_ERROR if level is not a valid compression level,
+-   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+-   with the version assumed by the caller (ZLIB_VERSION).
+-   msg is set to null if there is no error message.  deflateInit does not
+-   perform any compression: this will be done by deflate().
+-*/
+-
+-
+-ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
+-/*
+-    deflate compresses as much data as possible, and stops when the input
+-  buffer becomes empty or the output buffer becomes full. It may introduce some
+-  output latency (reading input without producing any output) except when
+-  forced to flush.
+-
+-    The detailed semantics are as follows. deflate performs one or both of the
+-  following actions:
+-
+-  - Compress more input starting at next_in and update next_in and avail_in
+-    accordingly. If not all input can be processed (because there is not
+-    enough room in the output buffer), next_in and avail_in are updated and
+-    processing will resume at this point for the next call of deflate().
+-
+-  - Provide more output starting at next_out and update next_out and avail_out
+-    accordingly. This action is forced if the parameter flush is non zero.
+-    Forcing flush frequently degrades the compression ratio, so this parameter
+-    should be set only when necessary (in interactive applications).
+-    Some output may be provided even if flush is not set.
+-
+-  Before the call of deflate(), the application should ensure that at least
+-  one of the actions is possible, by providing more input and/or consuming
+-  more output, and updating avail_in or avail_out accordingly; avail_out
+-  should never be zero before the call. The application can consume the
+-  compressed output when it wants, for example when the output buffer is full
+-  (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
+-  and with zero avail_out, it must be called again after making room in the
+-  output buffer because there might be more output pending.
+-
+-    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+-  flushed to the output buffer and the output is aligned on a byte boundary, so
+-  that the decompressor can get all input data available so far. (In particular
+-  avail_in is zero after the call if enough output space has been provided
+-  before the call.)  Flushing may degrade compression for some compression
+-  algorithms and so it should be used only when necessary.
+-
+-    If flush is set to Z_FULL_FLUSH, all output is flushed as with
+-  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+-  restart from this point if previous compressed data has been damaged or if
+-  random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
+-  the compression.
+-
+-    If deflate returns with avail_out == 0, this function must be called again
+-  with the same value of the flush parameter and more output space (updated
+-  avail_out), until the flush is complete (deflate returns with non-zero
+-  avail_out).
+-
+-    If the parameter flush is set to Z_FINISH, pending input is processed,
+-  pending output is flushed and deflate returns with Z_STREAM_END if there
+-  was enough output space; if deflate returns with Z_OK, this function must be
+-  called again with Z_FINISH and more output space (updated avail_out) but no
+-  more input data, until it returns with Z_STREAM_END or an error. After
+-  deflate has returned Z_STREAM_END, the only possible operations on the
+-  stream are deflateReset or deflateEnd.
+-  
+-    Z_FINISH can be used immediately after deflateInit if all the compression
+-  is to be done in a single step. In this case, avail_out must be at least
+-  0.1% larger than avail_in plus 12 bytes.  If deflate does not return
+-  Z_STREAM_END, then it must be called again as described above.
+-
+-    deflate() sets strm->adler to the adler32 checksum of all input read
+-  so far (that is, total_in bytes).
+-
+-    deflate() may update data_type if it can make a good guess about
+-  the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
+-  binary. This field is only for information purposes and does not affect
+-  the compression algorithm in any manner.
+-
+-    deflate() returns Z_OK if some progress has been made (more input
+-  processed or more output produced), Z_STREAM_END if all input has been
+-  consumed and all output has been produced (only when flush is set to
+-  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+-  if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
+-  (for example avail_in or avail_out was zero).
+-*/
+-
+-
+-ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
+-/*
+-     All dynamically allocated data structures for this stream are freed.
+-   This function discards any unprocessed input and does not flush any
+-   pending output.
+-
+-     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+-   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+-   prematurely (some input or output was discarded). In the error case,
+-   msg may be set but then points to a static string (which must not be
+-   deallocated).
+-*/
+-
+-
+-/* 
+-ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
+-
+-     Initializes the internal stream state for decompression. The fields
+-   next_in, avail_in, zalloc, zfree and opaque must be initialized before by
+-   the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
+-   value depends on the compression method), inflateInit determines the
+-   compression method from the zlib header and allocates all data structures
+-   accordingly; otherwise the allocation will be deferred to the first call of
+-   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
+-   use default allocation functions.
+-
+-     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+-   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+-   version assumed by the caller.  msg is set to null if there is no error
+-   message. inflateInit does not perform any decompression apart from reading
+-   the zlib header if present: this will be done by inflate().  (So next_in and
+-   avail_in may be modified, but next_out and avail_out are unchanged.)
+-*/
+-
+-
+-ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
+-/*
+-    inflate decompresses as much data as possible, and stops when the input
+-  buffer becomes empty or the output buffer becomes full. It may some
+-  introduce some output latency (reading input without producing any output)
+-  except when forced to flush.
+-
+-  The detailed semantics are as follows. inflate performs one or both of the
+-  following actions:
+-
+-  - Decompress more input starting at next_in and update next_in and avail_in
+-    accordingly. If not all input can be processed (because there is not
+-    enough room in the output buffer), next_in is updated and processing
+-    will resume at this point for the next call of inflate().
+-
+-  - Provide more output starting at next_out and update next_out and avail_out
+-    accordingly.  inflate() provides as much output as possible, until there
+-    is no more input data or no more space in the output buffer (see below
+-    about the flush parameter).
+-
+-  Before the call of inflate(), the application should ensure that at least
+-  one of the actions is possible, by providing more input and/or consuming
+-  more output, and updating the next_* and avail_* values accordingly.
+-  The application can consume the uncompressed output when it wants, for
+-  example when the output buffer is full (avail_out == 0), or after each
+-  call of inflate(). If inflate returns Z_OK and with zero avail_out, it
+-  must be called again after making room in the output buffer because there
+-  might be more output pending.
+-
+-    If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
+-  output as possible to the output buffer. The flushing behavior of inflate is
+-  not specified for values of the flush parameter other than Z_SYNC_FLUSH
+-  and Z_FINISH, but the current implementation actually flushes as much output
+-  as possible anyway.
+-
+-    inflate() should normally be called until it returns Z_STREAM_END or an
+-  error. However if all decompression is to be performed in a single step
+-  (a single call of inflate), the parameter flush should be set to
+-  Z_FINISH. In this case all pending input is processed and all pending
+-  output is flushed; avail_out must be large enough to hold all the
+-  uncompressed data. (The size of the uncompressed data may have been saved
+-  by the compressor for this purpose.) The next operation on this stream must
+-  be inflateEnd to deallocate the decompression state. The use of Z_FINISH
+-  is never required, but can be used to inform inflate that a faster routine
+-  may be used for the single inflate() call.
+-
+-     If a preset dictionary is needed at this point (see inflateSetDictionary
+-  below), inflate sets strm-adler to the adler32 checksum of the
+-  dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise 
+-  it sets strm->adler to the adler32 checksum of all output produced
+-  so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
+-  an error code as described below. At the end of the stream, inflate()
+-  checks that its computed adler32 checksum is equal to that saved by the
+-  compressor and returns Z_STREAM_END only if the checksum is correct.
+-
+-    inflate() returns Z_OK if some progress has been made (more input processed
+-  or more output produced), Z_STREAM_END if the end of the compressed data has
+-  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+-  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+-  corrupted (input stream not conforming to the zlib format or incorrect
+-  adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
+-  (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
+-  enough memory, Z_BUF_ERROR if no progress is possible or if there was not
+-  enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
+-  case, the application may then call inflateSync to look for a good
+-  compression block.
+-*/
+-
+-
+-ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
+-/*
+-     All dynamically allocated data structures for this stream are freed.
+-   This function discards any unprocessed input and does not flush any
+-   pending output.
+-
+-     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
+-   was inconsistent. In the error case, msg may be set but then points to a
+-   static string (which must not be deallocated).
+-*/
+-
+-                        /* Advanced functions */
+-
+-/*
+-    The following functions are needed only in some special applications.
+-*/
+-
+-/*   
+-ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
+-                                     int  level,
+-                                     int  method,
+-                                     int  windowBits,
+-                                     int  memLevel,
+-                                     int  strategy));
+-
+-     This is another version of deflateInit with more compression options. The
+-   fields next_in, zalloc, zfree and opaque must be initialized before by
+-   the caller.
+-
+-     The method parameter is the compression method. It must be Z_DEFLATED in
+-   this version of the library.
+-
+-     The windowBits parameter is the base two logarithm of the window size
+-   (the size of the history buffer).  It should be in the range 8..15 for this
+-   version of the library. Larger values of this parameter result in better
+-   compression at the expense of memory usage. The default value is 15 if
+-   deflateInit is used instead.
+-
+-     The memLevel parameter specifies how much memory should be allocated
+-   for the internal compression state. memLevel=1 uses minimum memory but
+-   is slow and reduces compression ratio; memLevel=9 uses maximum memory
+-   for optimal speed. The default value is 8. See zconf.h for total memory
+-   usage as a function of windowBits and memLevel.
+-
+-     The strategy parameter is used to tune the compression algorithm. Use the
+-   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+-   filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
+-   string match).  Filtered data consists mostly of small values with a
+-   somewhat random distribution. In this case, the compression algorithm is
+-   tuned to compress them better. The effect of Z_FILTERED is to force more
+-   Huffman coding and less string matching; it is somewhat intermediate
+-   between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
+-   the compression ratio but not the correctness of the compressed output even
+-   if it is not set appropriately.
+-
+-      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+-   memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
+-   method). msg is set to null if there is no error message.  deflateInit2 does
+-   not perform any compression: this will be done by deflate().
+-*/
+-                            
+-ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
+-                                             const Bytef *dictionary,
+-                                             uInt  dictLength));
+-/*
+-     Initializes the compression dictionary from the given byte sequence
+-   without producing any compressed output. This function must be called
+-   immediately after deflateInit, deflateInit2 or deflateReset, before any
+-   call of deflate. The compressor and decompressor must use exactly the same
+-   dictionary (see inflateSetDictionary).
+-
+-     The dictionary should consist of strings (byte sequences) that are likely
+-   to be encountered later in the data to be compressed, with the most commonly
+-   used strings preferably put towards the end of the dictionary. Using a
+-   dictionary is most useful when the data to be compressed is short and can be
+-   predicted with good accuracy; the data can then be compressed better than
+-   with the default empty dictionary.
+-
+-     Depending on the size of the compression data structures selected by
+-   deflateInit or deflateInit2, a part of the dictionary may in effect be
+-   discarded, for example if the dictionary is larger than the window size in
+-   deflate or deflate2. Thus the strings most likely to be useful should be
+-   put at the end of the dictionary, not at the front.
+-
+-     Upon return of this function, strm->adler is set to the Adler32 value
+-   of the dictionary; the decompressor may later use this value to determine
+-   which dictionary has been used by the compressor. (The Adler32 value
+-   applies to the whole dictionary even if only a subset of the dictionary is
+-   actually used by the compressor.)
+-
+-     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+-   parameter is invalid (such as NULL dictionary) or the stream state is
+-   inconsistent (for example if deflate has already been called for this stream
+-   or if the compression method is bsort). deflateSetDictionary does not
+-   perform any compression: this will be done by deflate().
+-*/
+-
+-ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
+-                                    z_streamp source));
+-/*
+-     Sets the destination stream as a complete copy of the source stream.
+-
+-     This function can be useful when several compression strategies will be
+-   tried, for example when there are several ways of pre-processing the input
+-   data with a filter. The streams that will be discarded should then be freed
+-   by calling deflateEnd.  Note that deflateCopy duplicates the internal
+-   compression state which can be quite large, so this strategy is slow and
+-   can consume lots of memory.
+-
+-     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+-   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+-   (such as zalloc being NULL). msg is left unchanged in both source and
+-   destination.
+-*/
+-
+-ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
+-/*
+-     This function is equivalent to deflateEnd followed by deflateInit,
+-   but does not free and reallocate all the internal compression state.
+-   The stream will keep the same compression level and any other attributes
+-   that may have been set by deflateInit2.
+-
+-      deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+-   stream state was inconsistent (such as zalloc or state being NULL).
+-*/
+-
+-ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
+-				      int level,
+-				      int strategy));
+-/*
+-     Dynamically update the compression level and compression strategy.  The
+-   interpretation of level and strategy is as in deflateInit2.  This can be
+-   used to switch between compression and straight copy of the input data, or
+-   to switch to a different kind of input data requiring a different
+-   strategy. If the compression level is changed, the input available so far
+-   is compressed with the old level (and may be flushed); the new level will
+-   take effect only at the next call of deflate().
+-
+-     Before the call of deflateParams, the stream state must be set as for
+-   a call of deflate(), since the currently available input may have to
+-   be compressed and flushed. In particular, strm->avail_out must be non-zero.
+-
+-     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+-   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
+-   if strm->avail_out was zero.
+-*/
+-
+-/*   
+-ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
+-                                     int  windowBits));
+-
+-     This is another version of inflateInit with an extra parameter. The
+-   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+-   before by the caller.
+-
+-     The windowBits parameter is the base two logarithm of the maximum window
+-   size (the size of the history buffer).  It should be in the range 8..15 for
+-   this version of the library. The default value is 15 if inflateInit is used
+-   instead. If a compressed stream with a larger window size is given as
+-   input, inflate() will return with the error code Z_DATA_ERROR instead of
+-   trying to allocate a larger window.
+-
+-      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+-   memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
+-   memLevel). msg is set to null if there is no error message.  inflateInit2
+-   does not perform any decompression apart from reading the zlib header if
+-   present: this will be done by inflate(). (So next_in and avail_in may be
+-   modified, but next_out and avail_out are unchanged.)
+-*/
+-
+-ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
+-                                             const Bytef *dictionary,
+-                                             uInt  dictLength));
+-/*
+-     Initializes the decompression dictionary from the given uncompressed byte
+-   sequence. This function must be called immediately after a call of inflate
+-   if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
+-   can be determined from the Adler32 value returned by this call of
+-   inflate. The compressor and decompressor must use exactly the same
+-   dictionary (see deflateSetDictionary).
+-
+-     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+-   parameter is invalid (such as NULL dictionary) or the stream state is
+-   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+-   expected one (incorrect Adler32 value). inflateSetDictionary does not
+-   perform any decompression: this will be done by subsequent calls of
+-   inflate().
+-*/
+-
+-ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
+-/* 
+-    Skips invalid compressed data until a full flush point (see above the
+-  description of deflate with Z_FULL_FLUSH) can be found, or until all
+-  available input is skipped. No output is provided.
+-
+-    inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
+-  if no more input was provided, Z_DATA_ERROR if no flush point has been found,
+-  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
+-  case, the application may save the current current value of total_in which
+-  indicates where valid compressed data was found. In the error case, the
+-  application may repeatedly call inflateSync, providing more input each time,
+-  until success or end of the input data.
+-*/
+-
+-ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
+-/*
+-     This function is equivalent to inflateEnd followed by inflateInit,
+-   but does not free and reallocate all the internal decompression state.
+-   The stream will keep attributes that may have been set by inflateInit2.
+-
+-      inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+-   stream state was inconsistent (such as zalloc or state being NULL).
+-*/
+-
+-
+-                        /* utility functions */
+-
+-/*
+-     The following utility functions are implemented on top of the
+-   basic stream-oriented functions. To simplify the interface, some
+-   default options are assumed (compression level and memory usage,
+-   standard memory allocation functions). The source code of these
+-   utility functions can easily be modified if you need special options.
+-*/
+-
+-ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,
+-                                 const Bytef *source, uLong sourceLen));
+-/*
+-     Compresses the source buffer into the destination buffer.  sourceLen is
+-   the byte length of the source buffer. Upon entry, destLen is the total
+-   size of the destination buffer, which must be at least 0.1% larger than
+-   sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
+-   compressed buffer.
+-     This function can be used to compress a whole file at once if the
+-   input file is mmap'ed.
+-     compress returns Z_OK if success, Z_MEM_ERROR if there was not
+-   enough memory, Z_BUF_ERROR if there was not enough room in the output
+-   buffer.
+-*/
+-
+-ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,
+-                                  const Bytef *source, uLong sourceLen,
+-                                  int level));
+-/*
+-     Compresses the source buffer into the destination buffer. The level
+-   parameter has the same meaning as in deflateInit.  sourceLen is the byte
+-   length of the source buffer. Upon entry, destLen is the total size of the
+-   destination buffer, which must be at least 0.1% larger than sourceLen plus
+-   12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
+-
+-     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+-   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+-   Z_STREAM_ERROR if the level parameter is invalid.
+-*/
+-
+-ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
+-                                   const Bytef *source, uLong sourceLen));
+-/*
+-     Decompresses the source buffer into the destination buffer.  sourceLen is
+-   the byte length of the source buffer. Upon entry, destLen is the total
+-   size of the destination buffer, which must be large enough to hold the
+-   entire uncompressed data. (The size of the uncompressed data must have
+-   been saved previously by the compressor and transmitted to the decompressor
+-   by some mechanism outside the scope of this compression library.)
+-   Upon exit, destLen is the actual size of the compressed buffer.
+-     This function can be used to decompress a whole file at once if the
+-   input file is mmap'ed.
+-
+-     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+-   enough memory, Z_BUF_ERROR if there was not enough room in the output
+-   buffer, or Z_DATA_ERROR if the input data was corrupted.
+-*/
+-
+-
+-typedef voidp gzFile;
+-
+-ZEXTERN gzFile ZEXPORT gzopen  OF((const char *path, const char *mode));
+-/*
+-     Opens a gzip (.gz) file for reading or writing. The mode parameter
+-   is as in fopen ("rb" or "wb") but can also include a compression level
+-   ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
+-   Huffman only compression as in "wb1h". (See the description
+-   of deflateInit2 for more information about the strategy parameter.)
+-
+-     gzopen can be used to read a file which is not in gzip format; in this
+-   case gzread will directly read from the file without decompression.
+-
+-     gzopen returns NULL if the file could not be opened or if there was
+-   insufficient memory to allocate the (de)compression state; errno
+-   can be checked to distinguish the two cases (if errno is zero, the
+-   zlib error is Z_MEM_ERROR).  */
+-
+-ZEXTERN gzFile ZEXPORT gzdopen  OF((int fd, const char *mode));
+-/*
+-     gzdopen() associates a gzFile with the file descriptor fd.  File
+-   descriptors are obtained from calls like open, dup, creat, pipe or
+-   fileno (in the file has been previously opened with fopen).
+-   The mode parameter is as in gzopen.
+-     The next call of gzclose on the returned gzFile will also close the
+-   file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
+-   descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
+-     gzdopen returns NULL if there was insufficient memory to allocate
+-   the (de)compression state.
+-*/
+-
+-ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
+-/*
+-     Dynamically update the compression level or strategy. See the description
+-   of deflateInit2 for the meaning of these parameters.
+-     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
+-   opened for writing.
+-*/
+-
+-ZEXTERN int ZEXPORT    gzread  OF((gzFile file, voidp buf, unsigned len));
+-/*
+-     Reads the given number of uncompressed bytes from the compressed file.
+-   If the input file was not in gzip format, gzread copies the given number
+-   of bytes into the buffer.
+-     gzread returns the number of uncompressed bytes actually read (0 for
+-   end of file, -1 for error). */
+-
+-ZEXTERN int ZEXPORT    gzwrite OF((gzFile file, 
+-				   const voidp buf, unsigned len));
+-/*
+-     Writes the given number of uncompressed bytes into the compressed file.
+-   gzwrite returns the number of uncompressed bytes actually written
+-   (0 in case of error).
+-*/
+-
+-ZEXTERN int ZEXPORTVA   gzprintf OF((gzFile file, const char *format, ...));
+-/*
+-     Converts, formats, and writes the args to the compressed file under
+-   control of the format string, as in fprintf. gzprintf returns the number of
+-   uncompressed bytes actually written (0 in case of error).
+-*/
+-
+-ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
+-/*
+-      Writes the given null-terminated string to the compressed file, excluding
+-   the terminating null character.
+-      gzputs returns the number of characters written, or -1 in case of error.
+-*/
+-
+-ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
+-/*
+-      Reads bytes from the compressed file until len-1 characters are read, or
+-   a newline character is read and transferred to buf, or an end-of-file
+-   condition is encountered.  The string is then terminated with a null
+-   character.
+-      gzgets returns buf, or Z_NULL in case of error.
+-*/
+-
+-ZEXTERN int ZEXPORT    gzputc OF((gzFile file, int c));
+-/*
+-      Writes c, converted to an unsigned char, into the compressed file.
+-   gzputc returns the value that was written, or -1 in case of error.
+-*/
+-
+-ZEXTERN int ZEXPORT    gzgetc OF((gzFile file));
+-/*
+-      Reads one byte from the compressed file. gzgetc returns this byte
+-   or -1 in case of end of file or error.
+-*/
+-
+-ZEXTERN int ZEXPORT    gzflush OF((gzFile file, int flush));
+-/*
+-     Flushes all pending output into the compressed file. The parameter
+-   flush is as in the deflate() function. The return value is the zlib
+-   error number (see function gzerror below). gzflush returns Z_OK if
+-   the flush parameter is Z_FINISH and all output could be flushed.
+-     gzflush should be called only when strictly necessary because it can
+-   degrade compression.
+-*/
+-
+-ZEXTERN z_off_t ZEXPORT    gzseek OF((gzFile file,
+-				      z_off_t offset, int whence));
+-/* 
+-      Sets the starting position for the next gzread or gzwrite on the
+-   given compressed file. The offset represents a number of bytes in the
+-   uncompressed data stream. The whence parameter is defined as in lseek(2);
+-   the value SEEK_END is not supported.
+-     If the file is opened for reading, this function is emulated but can be
+-   extremely slow. If the file is opened for writing, only forward seeks are
+-   supported; gzseek then compresses a sequence of zeroes up to the new
+-   starting position.
+-
+-      gzseek returns the resulting offset location as measured in bytes from
+-   the beginning of the uncompressed stream, or -1 in case of error, in
+-   particular if the file is opened for writing and the new starting position
+-   would be before the current position.
+-*/
+-
+-ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
+-/*
+-     Rewinds the given file. This function is supported only for reading.
+-
+-   gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
+-*/
+-
+-ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
+-/*
+-     Returns the starting position for the next gzread or gzwrite on the
+-   given compressed file. This position represents a number of bytes in the
+-   uncompressed data stream.
+-
+-   gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
+-*/
+-
+-ZEXTERN int ZEXPORT gzeof OF((gzFile file));
+-/*
+-     Returns 1 when EOF has previously been detected reading the given
+-   input stream, otherwise zero.
+-*/
+-
+-ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
+-/*
+-     Flushes all pending output if necessary, closes the compressed file
+-   and deallocates all the (de)compression state. The return value is the zlib
+-   error number (see function gzerror below).
+-*/
+-
+-ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
+-/*
+-     Returns the error message for the last error which occurred on the
+-   given compressed file. errnum is set to zlib error number. If an
+-   error occurred in the file system and not in the compression library,
+-   errnum is set to Z_ERRNO and the application may consult errno
+-   to get the exact error code.
+-*/
+-
+-                        /* checksum functions */
+-
+-/*
+-     These functions are not related to compression but are exported
+-   anyway because they might be useful in applications using the
+-   compression library.
+-*/
+-
+-ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
+-
+-/*
+-     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+-   return the updated checksum. If buf is NULL, this function returns
+-   the required initial value for the checksum.
+-   An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+-   much faster. Usage example:
+-
+-     uLong adler = adler32(0L, Z_NULL, 0);
+-
+-     while (read_buffer(buffer, length) != EOF) {
+-       adler = adler32(adler, buffer, length);
+-     }
+-     if (adler != original_adler) error();
+-*/
+-
+-ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
+-/*
+-     Update a running crc with the bytes buf[0..len-1] and return the updated
+-   crc. If buf is NULL, this function returns the required initial value
+-   for the crc. Pre- and post-conditioning (one's complement) is performed
+-   within this function so it shouldn't be done by the application.
+-   Usage example:
+-
+-     uLong crc = crc32(0L, Z_NULL, 0);
+-
+-     while (read_buffer(buffer, length) != EOF) {
+-       crc = crc32(crc, buffer, length);
+-     }
diff --git a/novacomd-quiet-logging.patch b/novacomd-quiet-logging.patch
new file mode 100644
index 0000000..9c279d8
--- /dev/null
+++ b/novacomd-quiet-logging.patch
@@ -0,0 +1,12 @@
+diff -urb novacomd-git-e77d33616f/src/host/usb-linux.c novacomd-git-e77d33616f.b/src/host/usb-linux.c
+--- novacomd-git-e77d33616f/src/host/usb-linux.c	2012-05-02 14:38:13.908295949 +0300
++++ novacomd-git-e77d33616f.b/src/host/usb-linux.c	2012-05-02 14:36:46.958671590 +0300
+@@ -355,7 +355,7 @@
+ 					count = 0;
+ 				}
+ 				if (rc >=0) {
+-					TRACEF/*LOG_PRINTF*/("usbll(%08x) wrote tx packet len=%d\n", novacom_usbll_getuid(handle->usbll_handle), rc);
++					TRACEL(LOG_SPEW, "usbll(%08x) wrote tx packet len=%d\n", novacom_usbll_getuid(handle->usbll_handle), rc);
+ 				}
+ 
+ #if FAULTY_TX
diff --git a/novacomd.service b/novacomd.service
new file mode 100644
index 0000000..0474e27
--- /dev/null
+++ b/novacomd.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Novacom server daemon
+After=syslog.target
+
+[Service]
+EnvironmentFile=-/etc/default/novacomd
+ExecStart=/usr/bin/novacomd $OPTIONS
+
+[Install]
+WantedBy=multi-user.target
diff --git a/novacomd_add_cflags.patch b/novacomd_add_cflags.patch
new file mode 100644
index 0000000..da262f2
--- /dev/null
+++ b/novacomd_add_cflags.patch
@@ -0,0 +1,12 @@
+diff -urb novacomd-git-e77d33616f/makefile novacomd-git-e77d33616f.b/makefile
+--- novacomd-git-e77d33616f/makefile	2012-03-28 23:10:56.000000000 +0300
++++ novacomd-git-e77d33616f.b/makefile	2012-04-02 14:50:27.214406018 +0300
+@@ -38,7 +38,7 @@
+ ifneq ($(MACHINE),)
+ MYCFLAGS += -DMACHINE=\"$(MACHINE)\"
+ endif
+-HOSTCFLAGS := $(MYCFLAGS) -Isrc
++HOSTCFLAGS := $(MYCFLAGS) $(CFLAGS) -Isrc
+ DEVICECFLAGS := $(MYCFLAGS) $(OECFLAGS) $(TARGET_CC_ARCH) -DPLATFORM_PTHREADS=1
+ CPPFLAGS := -g
+ ASMFLAGS :=
diff --git a/sources b/sources
index e69de29..e791507 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+9cdb4ee0de1942100a9000506889dfb2  openwebos-novacomd-submissions-119.1-0-ge77d336.tar.gz


More information about the scm-commits mailing list