f2b65d988412276f49cd30143e75a099994b9250
[platform/upstream/libwebsockets.git] / win32port / zlib / gzguts.h
1 /* gzguts.h -- zlib internal header definitions for gz* operations\r
2  * Copyright (C) 2004, 2005, 2010 Mark Adler\r
3  * For conditions of distribution and use, see copyright notice in zlib.h\r
4  */\r
5 \r
6 #ifdef _LARGEFILE64_SOURCE\r
7 #  ifndef _LARGEFILE_SOURCE\r
8 #    define _LARGEFILE_SOURCE 1\r
9 #  endif\r
10 #  ifdef _FILE_OFFSET_BITS\r
11 #    undef _FILE_OFFSET_BITS\r
12 #  endif\r
13 #endif\r
14 \r
15 #if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ) && !defined(_WIN32)\r
16 #  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))\r
17 #else\r
18 #  define ZLIB_INTERNAL\r
19 #endif\r
20 \r
21 #include <stdio.h>\r
22 #include "zlib.h"\r
23 #ifdef STDC\r
24 #  include <string.h>\r
25 #  include <stdlib.h>\r
26 #  include <limits.h>\r
27 #endif\r
28 #include <fcntl.h>\r
29 \r
30 #ifdef NO_DEFLATE       /* for compatibility with old definition */\r
31 #  define NO_GZCOMPRESS\r
32 #endif\r
33 \r
34 #ifdef _MSC_VER\r
35 #  include <io.h>\r
36 #  define vsnprintf _vsnprintf\r
37 #endif\r
38 \r
39 #ifndef local\r
40 #  define local static\r
41 #endif\r
42 /* compile with -Dlocal if your debugger can't find static symbols */\r
43 \r
44 /* gz* functions always use library allocation functions */\r
45 #ifndef STDC\r
46   extern voidp  malloc OF((uInt size));\r
47   extern void   free   OF((voidpf ptr));\r
48 #endif\r
49 \r
50 /* get errno and strerror definition */\r
51 #if defined UNDER_CE\r
52 #  include <windows.h>\r
53 #  define zstrerror() gz_strwinerror((DWORD)GetLastError())\r
54 #else\r
55 #  ifdef STDC\r
56 #    include <errno.h>\r
57 #    define zstrerror() strerror(errno)\r
58 #  else\r
59 #    define zstrerror() "stdio error (consult errno)"\r
60 #  endif\r
61 #endif\r
62 \r
63 /* provide prototypes for these when building zlib without LFS */\r
64 #if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0\r
65     ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));\r
66     ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));\r
67     ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));\r
68     ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));\r
69 #endif\r
70 \r
71 /* default i/o buffer size -- double this for output when reading */\r
72 #define GZBUFSIZE 8192\r
73 \r
74 /* gzip modes, also provide a little integrity check on the passed structure */\r
75 #define GZ_NONE 0\r
76 #define GZ_READ 7247\r
77 #define GZ_WRITE 31153\r
78 #define GZ_APPEND 1     /* mode set to GZ_WRITE after the file is opened */\r
79 \r
80 /* values for gz_state how */\r
81 #define LOOK 0      /* look for a gzip header */\r
82 #define COPY 1      /* copy input directly */\r
83 #define GZIP 2      /* decompress a gzip stream */\r
84 \r
85 /* internal gzip file state data structure */\r
86 typedef struct {\r
87         /* used for both reading and writing */\r
88     int mode;               /* see gzip modes above */\r
89     int fd;                 /* file descriptor */\r
90     char *path;             /* path or fd for error messages */\r
91     z_off64_t pos;          /* current position in uncompressed data */\r
92     unsigned size;          /* buffer size, zero if not allocated yet */\r
93     unsigned want;          /* requested buffer size, default is GZBUFSIZE */\r
94     unsigned char *in;      /* input buffer */\r
95     unsigned char *out;     /* output buffer (double-sized when reading) */\r
96     unsigned char *next;    /* next output data to deliver or write */\r
97         /* just for reading */\r
98     unsigned have;          /* amount of output data unused at next */\r
99     int eof;                /* true if end of input file reached */\r
100     z_off64_t start;        /* where the gzip data started, for rewinding */\r
101     z_off64_t raw;          /* where the raw data started, for seeking */\r
102     int how;                /* 0: get header, 1: copy, 2: decompress */\r
103     int direct;             /* true if last read direct, false if gzip */\r
104         /* just for writing */\r
105     int level;              /* compression level */\r
106     int strategy;           /* compression strategy */\r
107         /* seek request */\r
108     z_off64_t skip;         /* amount to skip (already rewound if backwards) */\r
109     int seek;               /* true if seek request pending */\r
110         /* error information */\r
111     int err;                /* error code */\r
112     char *msg;              /* error message */\r
113         /* zlib inflate or deflate stream */\r
114     z_stream strm;          /* stream structure in-place (not a pointer) */\r
115 } gz_state;\r
116 typedef gz_state FAR *gz_statep;\r
117 \r
118 /* shared functions */\r
119 void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));\r
120 #if defined UNDER_CE\r
121 char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));\r
122 #endif\r
123 \r
124 /* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t\r
125    value -- needed when comparing unsigned to z_off64_t, which is signed\r
126    (possible z_off64_t types off_t, off64_t, and long are all signed) */\r
127 #ifdef INT_MAX\r
128 #  define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)\r
129 #else\r
130 unsigned ZLIB_INTERNAL gz_intmax OF((void));\r
131 #  define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())\r
132 #endif\r