mirror of
https://github.com/darlinghq/darling-zlib.git
synced 2024-11-23 11:59:49 +00:00
00c836e325
This also moves some of the same from zconf.h to gzguts.h. A new function, gzflags(), was created to pass the compilation flags related to vsnprintf usage back to zlibCompileFlags() in zutil.c. In the process, various compiler configuration files were updated to include gzflags(), as well as the new gzgetc_() function added when the gzgetc() macro was introduced in a previous patch.
173 lines
5.5 KiB
C
173 lines
5.5 KiB
C
/* gzguts.h -- zlib internal header definitions for gz* operations
|
|
* Copyright (C) 2004, 2005, 2010, 2011 Mark Adler
|
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
|
*/
|
|
|
|
#ifdef _LARGEFILE64_SOURCE
|
|
# ifndef _LARGEFILE_SOURCE
|
|
# define _LARGEFILE_SOURCE 1
|
|
# endif
|
|
# ifdef _FILE_OFFSET_BITS
|
|
# undef _FILE_OFFSET_BITS
|
|
# endif
|
|
#endif
|
|
|
|
#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)
|
|
# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
|
|
#else
|
|
# define ZLIB_INTERNAL
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#include "zlib.h"
|
|
#ifdef STDC
|
|
# include <string.h>
|
|
# include <stdlib.h>
|
|
# include <limits.h>
|
|
#endif
|
|
#include <fcntl.h>
|
|
|
|
#ifdef NO_DEFLATE /* for compatibility with old definition */
|
|
# define NO_GZCOMPRESS
|
|
#endif
|
|
|
|
#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
|
|
# ifndef HAVE_VSNPRINTF
|
|
# define HAVE_VSNPRINTF
|
|
# endif
|
|
#endif
|
|
|
|
#if defined(__CYGWIN__)
|
|
# ifndef HAVE_VSNPRINTF
|
|
# define HAVE_VSNPRINTF
|
|
# endif
|
|
#endif
|
|
|
|
#ifndef HAVE_VSNPRINTF
|
|
# ifdef MSDOS
|
|
/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
|
|
but for now we just assume it doesn't. */
|
|
# define NO_vsnprintf
|
|
# endif
|
|
# ifdef __TURBOC__
|
|
# define NO_vsnprintf
|
|
# endif
|
|
# ifdef WIN32
|
|
/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
|
|
# if !defined(vsnprintf) && !defined(NO_vsnprintf)
|
|
# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
|
|
# include <io.h>
|
|
# define vsnprintf _vsnprintf
|
|
# endif
|
|
# endif
|
|
# endif
|
|
# ifdef __SASC
|
|
# define NO_vsnprintf
|
|
# endif
|
|
# ifdef VMS
|
|
# define NO_vsnprintf
|
|
# endif
|
|
# ifdef __OS400__
|
|
# define NO_vsnprintf
|
|
# endif
|
|
# ifdef __MVS__
|
|
# define NO_vsnprintf
|
|
# endif
|
|
#endif
|
|
|
|
#ifndef local
|
|
# define local static
|
|
#endif
|
|
/* compile with -Dlocal if your debugger can't find static symbols */
|
|
|
|
/* gz* functions always use library allocation functions */
|
|
#ifndef STDC
|
|
extern voidp malloc OF((uInt size));
|
|
extern void free OF((voidpf ptr));
|
|
#endif
|
|
|
|
/* get errno and strerror definition */
|
|
#if defined UNDER_CE
|
|
# include <windows.h>
|
|
# define zstrerror() gz_strwinerror((DWORD)GetLastError())
|
|
#else
|
|
# ifdef STDC
|
|
# include <errno.h>
|
|
# define zstrerror() strerror(errno)
|
|
# else
|
|
# define zstrerror() "stdio error (consult errno)"
|
|
# endif
|
|
#endif
|
|
|
|
/* provide prototypes for these when building zlib without LFS */
|
|
#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
|
|
ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
|
|
ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
|
|
ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
|
|
ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
|
|
#endif
|
|
|
|
/* default i/o buffer size -- double this for output when reading */
|
|
#define GZBUFSIZE 8192
|
|
|
|
/* gzip modes, also provide a little integrity check on the passed structure */
|
|
#define GZ_NONE 0
|
|
#define GZ_READ 7247
|
|
#define GZ_WRITE 31153
|
|
#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */
|
|
|
|
/* values for gz_state how */
|
|
#define LOOK 0 /* look for a gzip header */
|
|
#define COPY 1 /* copy input directly */
|
|
#define GZIP 2 /* decompress a gzip stream */
|
|
|
|
/* internal gzip file state data structure */
|
|
typedef struct {
|
|
/* exposed contents for gzgetc() macro */
|
|
struct gzFile_s x; /* "x" for exposed */
|
|
/* x.have: number of bytes available at x.next */
|
|
/* x.next: next output data to deliver or write */
|
|
/* x.pos: current position in uncompressed data */
|
|
/* used for both reading and writing */
|
|
int mode; /* see gzip modes above */
|
|
int fd; /* file descriptor */
|
|
char *path; /* path or fd for error messages */
|
|
unsigned size; /* buffer size, zero if not allocated yet */
|
|
unsigned want; /* requested buffer size, default is GZBUFSIZE */
|
|
unsigned char *in; /* input buffer */
|
|
unsigned char *out; /* output buffer (double-sized when reading) */
|
|
/* just for reading */
|
|
int eof; /* true if end of input file reached */
|
|
z_off64_t start; /* where the gzip data started, for rewinding */
|
|
int how; /* 0: get header, 1: copy, 2: decompress */
|
|
int direct; /* true if last read direct, false if gzip */
|
|
/* just for writing */
|
|
int level; /* compression level */
|
|
int strategy; /* compression strategy */
|
|
/* seek request */
|
|
z_off64_t skip; /* amount to skip (already rewound if backwards) */
|
|
int seek; /* true if seek request pending */
|
|
/* error information */
|
|
int err; /* error code */
|
|
char *msg; /* error message */
|
|
/* zlib inflate or deflate stream */
|
|
z_stream strm; /* stream structure in-place (not a pointer) */
|
|
} gz_state;
|
|
typedef gz_state FAR *gz_statep;
|
|
|
|
/* shared functions */
|
|
void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
|
|
#if defined UNDER_CE
|
|
char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
|
|
#endif
|
|
|
|
/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
|
|
value -- needed when comparing unsigned to z_off64_t, which is signed
|
|
(possible z_off64_t types off_t, off64_t, and long are all signed) */
|
|
#ifdef INT_MAX
|
|
# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
|
|
#else
|
|
unsigned ZLIB_INTERNAL gz_intmax OF((void));
|
|
# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
|
|
#endif
|