Removed the dependency on gzgetc and gzgets by implementing internal

versions of these commands in file_wrappers.c. This allows us to
compile successfully even on platforms where X has an older zlib built
in.

Removed this restriction from acinclude.m4

svn path=/trunk/; revision=3948
This commit is contained in:
Ashok Narayanan 2001-09-20 16:36:45 +00:00
parent d1ec951825
commit 29c8fa03b3
3 changed files with 31 additions and 36 deletions

View File

@ -2,7 +2,7 @@ dnl Macros that test for specific features.
dnl This file is part of the Autoconf packaging for Ethereal.
dnl Copyright (C) 1998-2000 by Gerald Combs.
dnl
dnl $Id: acinclude.m4,v 1.33 2001/09/17 23:35:22 guy Exp $
dnl $Id: acinclude.m4,v 1.34 2001/09/20 16:36:44 ashokn Exp $
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
@ -373,37 +373,6 @@ AC_DEFUN(AC_ETHEREAL_ZLIB_CHECK,
AC_CHECK_LIB(z, gzgets,,enable_zlib=no)
fi
if test x$enable_zlib != xno
then
#
# Well, we at least have the zlib header file and a zlib
# with "gzgets()".
#
# Now check for "gzgets()" in zlib when linking with the
# linker flags for GTK+ applications; people often grab
# XFree86 source and build and install it on their systems,
# and they appear sometimes to misconfigure XFree86 so that,
# even on systems with zlib, it assumes there is no zlib,
# so the XFree86 build process builds and installs its
# own zlib in the X11 library directory.
#
# The XFree86 zlib is an older version that lacks
# "gzgets()", and that's the zlib with which Ethereal
# gets linked, so the build of Ethereal fails.
#
ac_save_CFLAGS="$CFLAGS"
ac_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $GTK_CFLAGS"
LIBS="$GTK_LIBS -lz $LIBS"
AC_MSG_CHECKING([for gzgets missing when linking with X11])
AC_TRY_LINK_FUNC(gzgets, AC_MSG_RESULT(no),
[
AC_MSG_RESULT(yes)
AC_MSG_ERROR(old XFree86 zlib found - rebuild XFree86 using system zlib or configure Ethereal without compressed file support.)
])
CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
fi
])
#

View File

@ -1,6 +1,6 @@
/* file_wrappers.c
*
* $Id: file_wrappers.c,v 1.7 2000/05/19 23:06:50 gram Exp $
* $Id: file_wrappers.c,v 1.8 2001/09/20 16:36:45 ashokn Exp $
*
* Wiretap Library
* Copyright (c) 1998 by Gilbert Ramirez <gram@xiexie.org>
@ -153,3 +153,27 @@ file_error(FILE *fh)
return 0;
}
#endif /* HAVE_LIBZ */
#ifdef HAVE_LIBZ
/*
* On some platforms, an older version of zlib is compiled into X. This causes
* gzgets() to be unavailable. So here is an implementation of gzgets()
*/
char *
internal_gzgets(gzFile file, char *buf, int len)
{
char *b = buf;
if (buf == NULL || len <= 0)
return NULL;
while (--len > 0 && gzread(file, buf, 1) == 1 && *buf++ != '\n') ;
*buf = '\0';
return b == buf && len > 0 ? NULL : b;
}
int internal_gzgetc(gzFile file)
{
unsigned char c;
return gzread(file, &c, 1) == 1 ? c : -1;
}
#endif

View File

@ -1,6 +1,6 @@
/* file_wrappers.h
*
* $Id: file_wrappers.h,v 1.4 2000/01/26 19:22:04 guy Exp $
* $Id: file_wrappers.h,v 1.5 2001/09/20 16:36:45 ashokn Exp $
*
* Wiretap Library
* Copyright (c) 1998 by Gilbert Ramirez <gram@xiexie.org>
@ -32,8 +32,10 @@ extern long file_seek(void *stream, long offset, int whence);
#define file_write(buf, bsize, count, file) gzwrite((file),(buf),((count)*(bsize)))
#define file_close gzclose
extern long file_tell(void *stream);
#define file_getc gzgetc
#define file_gets(buf, len, file) gzgets((file), (buf), (len))
char * internal_gzgets(gzFile file, char *buf, int len);
int internal_gzgetc(gzFile file);
#define file_getc internal_gzgetc
#define file_gets(buf, len, file) internal_gzgets((file), (buf), (len))
extern int file_error(void *fh);
#else /* No zLib */