libarchive-static 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. data/ext/Makefile +6 -0
  2. data/ext/extconf.rb +61 -0
  3. data/ext/libarchive-0.1.1/COPYING.libarchive +60 -0
  4. data/ext/libarchive-0.1.1/LICENSE.libbzip2 +42 -0
  5. data/ext/libarchive-0.1.1/README.txt +143 -0
  6. data/ext/libarchive-0.1.1/ext/Makefile.in +0 -0
  7. data/ext/libarchive-0.1.1/ext/archive_read_support_compression.c +31 -0
  8. data/ext/libarchive-0.1.1/ext/archive_read_support_compression.h +6 -0
  9. data/ext/libarchive-0.1.1/ext/archive_read_support_format.c +32 -0
  10. data/ext/libarchive-0.1.1/ext/archive_read_support_format.h +6 -0
  11. data/ext/libarchive-0.1.1/ext/archive_write_open_rb_str.c +29 -0
  12. data/ext/libarchive-0.1.1/ext/archive_write_open_rb_str.h +6 -0
  13. data/ext/libarchive-0.1.1/ext/archive_write_set_compression.c +32 -0
  14. data/ext/libarchive-0.1.1/ext/archive_write_set_compression.h +6 -0
  15. data/ext/libarchive-0.1.1/ext/config.h.in +22 -0
  16. data/ext/libarchive-0.1.1/ext/configure +3904 -0
  17. data/ext/libarchive-0.1.1/ext/configure.in +11 -0
  18. data/ext/libarchive-0.1.1/ext/depend +19 -0
  19. data/ext/libarchive-0.1.1/ext/extconf.rb +6 -0
  20. data/ext/libarchive-0.1.1/ext/install-sh +250 -0
  21. data/ext/libarchive-0.1.1/ext/libarchive.c +89 -0
  22. data/ext/libarchive-0.1.1/ext/libarchive_archive.c +84 -0
  23. data/ext/libarchive-0.1.1/ext/libarchive_entry.c +1015 -0
  24. data/ext/libarchive-0.1.1/ext/libarchive_internal.h +155 -0
  25. data/ext/libarchive-0.1.1/ext/libarchive_reader.c +328 -0
  26. data/ext/libarchive-0.1.1/ext/libarchive_win32.h +52 -0
  27. data/ext/libarchive-0.1.1/ext/libarchive_writer.c +246 -0
  28. data/ext/libarchive-0.1.1/libarchive.c +1762 -0
  29. data/ext/libarchive-2.8.4/Makefile.in +7076 -0
  30. data/ext/libarchive-2.8.4/build/autoconf/check_stdcall_func.m4 +51 -0
  31. data/ext/libarchive-2.8.4/build/autoconf/compile +143 -0
  32. data/ext/libarchive-2.8.4/build/autoconf/config.guess +1502 -0
  33. data/ext/libarchive-2.8.4/build/autoconf/config.sub +1708 -0
  34. data/ext/libarchive-2.8.4/build/autoconf/depcomp +630 -0
  35. data/ext/libarchive-2.8.4/build/autoconf/install-sh +291 -0
  36. data/ext/libarchive-2.8.4/build/autoconf/la_uid_t.m4 +20 -0
  37. data/ext/libarchive-2.8.4/build/autoconf/ltmain.sh +8406 -0
  38. data/ext/libarchive-2.8.4/build/autoconf/missing +376 -0
  39. data/ext/libarchive-2.8.4/build/pkgconfig/libarchive.pc.in +10 -0
  40. data/ext/libarchive-2.8.4/config.h.in +772 -0
  41. data/ext/libarchive-2.8.4/configure +17916 -0
  42. data/ext/libarchive-2.8.4/libarchive/archive.h +741 -0
  43. data/ext/libarchive-2.8.4/libarchive/archive_check_magic.c +134 -0
  44. data/ext/libarchive-2.8.4/libarchive/archive_crc32.h +66 -0
  45. data/ext/libarchive-2.8.4/libarchive/archive_endian.h +162 -0
  46. data/ext/libarchive-2.8.4/libarchive/archive_entry.c +2202 -0
  47. data/ext/libarchive-2.8.4/libarchive/archive_entry.h +524 -0
  48. data/ext/libarchive-2.8.4/libarchive/archive_entry_copy_bhfi.c +74 -0
  49. data/ext/libarchive-2.8.4/libarchive/archive_entry_copy_stat.c +77 -0
  50. data/ext/libarchive-2.8.4/libarchive/archive_entry_link_resolver.c +405 -0
  51. data/ext/libarchive-2.8.4/libarchive/archive_entry_private.h +184 -0
  52. data/ext/libarchive-2.8.4/libarchive/archive_entry_stat.c +118 -0
  53. data/ext/libarchive-2.8.4/libarchive/archive_entry_strmode.c +87 -0
  54. data/ext/libarchive-2.8.4/libarchive/archive_entry_xattr.c +158 -0
  55. data/ext/libarchive-2.8.4/libarchive/archive_hash.h +281 -0
  56. data/ext/libarchive-2.8.4/libarchive/archive_platform.h +165 -0
  57. data/ext/libarchive-2.8.4/libarchive/archive_private.h +124 -0
  58. data/ext/libarchive-2.8.4/libarchive/archive_read.c +1249 -0
  59. data/ext/libarchive-2.8.4/libarchive/archive_read_data_into_fd.c +93 -0
  60. data/ext/libarchive-2.8.4/libarchive/archive_read_disk.c +198 -0
  61. data/ext/libarchive-2.8.4/libarchive/archive_read_disk_entry_from_file.c +570 -0
  62. data/ext/libarchive-2.8.4/libarchive/archive_read_disk_private.h +62 -0
  63. data/ext/libarchive-2.8.4/libarchive/archive_read_disk_set_standard_lookup.c +303 -0
  64. data/ext/libarchive-2.8.4/libarchive/archive_read_extract.c +182 -0
  65. data/ext/libarchive-2.8.4/libarchive/archive_read_open_fd.c +190 -0
  66. data/ext/libarchive-2.8.4/libarchive/archive_read_open_file.c +165 -0
  67. data/ext/libarchive-2.8.4/libarchive/archive_read_open_filename.c +272 -0
  68. data/ext/libarchive-2.8.4/libarchive/archive_read_open_memory.c +156 -0
  69. data/ext/libarchive-2.8.4/libarchive/archive_read_private.h +199 -0
  70. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_all.c +60 -0
  71. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_bzip2.c +353 -0
  72. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_compress.c +444 -0
  73. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_gzip.c +465 -0
  74. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_none.c +40 -0
  75. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_program.c +459 -0
  76. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_rpm.c +287 -0
  77. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_uu.c +627 -0
  78. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_xz.c +708 -0
  79. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_all.c +43 -0
  80. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_ar.c +584 -0
  81. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_cpio.c +777 -0
  82. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_empty.c +93 -0
  83. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_iso9660.c +2830 -0
  84. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_mtree.c +1304 -0
  85. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_raw.c +185 -0
  86. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_tar.c +2418 -0
  87. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_xar.c +3151 -0
  88. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_zip.c +903 -0
  89. data/ext/libarchive-2.8.4/libarchive/archive_string.c +453 -0
  90. data/ext/libarchive-2.8.4/libarchive/archive_string.h +148 -0
  91. data/ext/libarchive-2.8.4/libarchive/archive_string_sprintf.c +164 -0
  92. data/ext/libarchive-2.8.4/libarchive/archive_util.c +391 -0
  93. data/ext/libarchive-2.8.4/libarchive/archive_virtual.c +94 -0
  94. data/ext/libarchive-2.8.4/libarchive/archive_windows.c +1236 -0
  95. data/ext/libarchive-2.8.4/libarchive/archive_windows.h +347 -0
  96. data/ext/libarchive-2.8.4/libarchive/archive_write.c +466 -0
  97. data/ext/libarchive-2.8.4/libarchive/archive_write_disk.c +2628 -0
  98. data/ext/libarchive-2.8.4/libarchive/archive_write_disk_private.h +38 -0
  99. data/ext/libarchive-2.8.4/libarchive/archive_write_disk_set_standard_lookup.c +262 -0
  100. data/ext/libarchive-2.8.4/libarchive/archive_write_open_fd.c +141 -0
  101. data/ext/libarchive-2.8.4/libarchive/archive_write_open_file.c +105 -0
  102. data/ext/libarchive-2.8.4/libarchive/archive_write_open_filename.c +162 -0
  103. data/ext/libarchive-2.8.4/libarchive/archive_write_open_memory.c +126 -0
  104. data/ext/libarchive-2.8.4/libarchive/archive_write_private.h +122 -0
  105. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_bzip2.c +408 -0
  106. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_compress.c +492 -0
  107. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_gzip.c +477 -0
  108. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_none.c +257 -0
  109. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_program.c +347 -0
  110. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_xz.c +438 -0
  111. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format.c +72 -0
  112. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_ar.c +550 -0
  113. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_by_name.c +76 -0
  114. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio.c +344 -0
  115. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio_newc.c +295 -0
  116. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_mtree.c +1050 -0
  117. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_pax.c +1386 -0
  118. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_shar.c +626 -0
  119. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_ustar.c +587 -0
  120. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_zip.c +667 -0
  121. data/ext/libarchive-2.8.4/libarchive/config_freebsd.h +154 -0
  122. data/ext/libarchive-2.8.4/libarchive/filter_fork.c +161 -0
  123. data/ext/libarchive-2.8.4/libarchive/filter_fork.h +41 -0
  124. data/ext/libarchive-2.8.4/libarchive/filter_fork_windows.c +113 -0
  125. data/ext/libarchive-static-makefile +80 -0
  126. data/ext/libarchive-static-wrapper-makefile +22 -0
  127. data/ext/zlib-1.2.5/Makefile.in +257 -0
  128. data/ext/zlib-1.2.5/adler32.c +169 -0
  129. data/ext/zlib-1.2.5/compress.c +80 -0
  130. data/ext/zlib-1.2.5/configure +596 -0
  131. data/ext/zlib-1.2.5/crc32.c +442 -0
  132. data/ext/zlib-1.2.5/crc32.h +441 -0
  133. data/ext/zlib-1.2.5/deflate.c +1834 -0
  134. data/ext/zlib-1.2.5/deflate.h +342 -0
  135. data/ext/zlib-1.2.5/example.c +565 -0
  136. data/ext/zlib-1.2.5/gzclose.c +25 -0
  137. data/ext/zlib-1.2.5/gzguts.h +132 -0
  138. data/ext/zlib-1.2.5/gzlib.c +537 -0
  139. data/ext/zlib-1.2.5/gzread.c +653 -0
  140. data/ext/zlib-1.2.5/gzwrite.c +531 -0
  141. data/ext/zlib-1.2.5/infback.c +632 -0
  142. data/ext/zlib-1.2.5/inffast.c +340 -0
  143. data/ext/zlib-1.2.5/inffast.h +11 -0
  144. data/ext/zlib-1.2.5/inffixed.h +94 -0
  145. data/ext/zlib-1.2.5/inflate.c +1480 -0
  146. data/ext/zlib-1.2.5/inflate.h +122 -0
  147. data/ext/zlib-1.2.5/inftrees.c +330 -0
  148. data/ext/zlib-1.2.5/inftrees.h +62 -0
  149. data/ext/zlib-1.2.5/minigzip.c +440 -0
  150. data/ext/zlib-1.2.5/trees.c +1244 -0
  151. data/ext/zlib-1.2.5/trees.h +128 -0
  152. data/ext/zlib-1.2.5/uncompr.c +59 -0
  153. data/ext/zlib-1.2.5/zconf.h +428 -0
  154. data/ext/zlib-1.2.5/zlib.h +1613 -0
  155. data/ext/zlib-1.2.5/zutil.c +318 -0
  156. data/ext/zlib-1.2.5/zutil.h +274 -0
  157. metadata +211 -0
@@ -0,0 +1,132 @@
1
+ /* gzguts.h -- zlib internal header definitions for gz* operations
2
+ * Copyright (C) 2004, 2005, 2010 Mark Adler
3
+ * For conditions of distribution and use, see copyright notice in zlib.h
4
+ */
5
+
6
+ #ifdef _LARGEFILE64_SOURCE
7
+ # ifndef _LARGEFILE_SOURCE
8
+ # define _LARGEFILE_SOURCE 1
9
+ # endif
10
+ # ifdef _FILE_OFFSET_BITS
11
+ # undef _FILE_OFFSET_BITS
12
+ # endif
13
+ #endif
14
+
15
+ #if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ)
16
+ # define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
17
+ #else
18
+ # define ZLIB_INTERNAL
19
+ #endif
20
+
21
+ #include <stdio.h>
22
+ #include "zlib.h"
23
+ #ifdef STDC
24
+ # include <string.h>
25
+ # include <stdlib.h>
26
+ # include <limits.h>
27
+ #endif
28
+ #include <fcntl.h>
29
+
30
+ #ifdef NO_DEFLATE /* for compatibility with old definition */
31
+ # define NO_GZCOMPRESS
32
+ #endif
33
+
34
+ #ifdef _MSC_VER
35
+ # include <io.h>
36
+ # define vsnprintf _vsnprintf
37
+ #endif
38
+
39
+ #ifndef local
40
+ # define local static
41
+ #endif
42
+ /* compile with -Dlocal if your debugger can't find static symbols */
43
+
44
+ /* gz* functions always use library allocation functions */
45
+ #ifndef STDC
46
+ extern voidp malloc OF((uInt size));
47
+ extern void free OF((voidpf ptr));
48
+ #endif
49
+
50
+ /* get errno and strerror definition */
51
+ #if defined UNDER_CE
52
+ # include <windows.h>
53
+ # define zstrerror() gz_strwinerror((DWORD)GetLastError())
54
+ #else
55
+ # ifdef STDC
56
+ # include <errno.h>
57
+ # define zstrerror() strerror(errno)
58
+ # else
59
+ # define zstrerror() "stdio error (consult errno)"
60
+ # endif
61
+ #endif
62
+
63
+ /* provide prototypes for these when building zlib without LFS */
64
+ #if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
65
+ ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
66
+ ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
67
+ ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
68
+ ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
69
+ #endif
70
+
71
+ /* default i/o buffer size -- double this for output when reading */
72
+ #define GZBUFSIZE 8192
73
+
74
+ /* gzip modes, also provide a little integrity check on the passed structure */
75
+ #define GZ_NONE 0
76
+ #define GZ_READ 7247
77
+ #define GZ_WRITE 31153
78
+ #define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */
79
+
80
+ /* values for gz_state how */
81
+ #define LOOK 0 /* look for a gzip header */
82
+ #define COPY 1 /* copy input directly */
83
+ #define GZIP 2 /* decompress a gzip stream */
84
+
85
+ /* internal gzip file state data structure */
86
+ typedef struct {
87
+ /* used for both reading and writing */
88
+ int mode; /* see gzip modes above */
89
+ int fd; /* file descriptor */
90
+ char *path; /* path or fd for error messages */
91
+ z_off64_t pos; /* current position in uncompressed data */
92
+ unsigned size; /* buffer size, zero if not allocated yet */
93
+ unsigned want; /* requested buffer size, default is GZBUFSIZE */
94
+ unsigned char *in; /* input buffer */
95
+ unsigned char *out; /* output buffer (double-sized when reading) */
96
+ unsigned char *next; /* next output data to deliver or write */
97
+ /* just for reading */
98
+ unsigned have; /* amount of output data unused at next */
99
+ int eof; /* true if end of input file reached */
100
+ z_off64_t start; /* where the gzip data started, for rewinding */
101
+ z_off64_t raw; /* where the raw data started, for seeking */
102
+ int how; /* 0: get header, 1: copy, 2: decompress */
103
+ int direct; /* true if last read direct, false if gzip */
104
+ /* just for writing */
105
+ int level; /* compression level */
106
+ int strategy; /* compression strategy */
107
+ /* seek request */
108
+ z_off64_t skip; /* amount to skip (already rewound if backwards) */
109
+ int seek; /* true if seek request pending */
110
+ /* error information */
111
+ int err; /* error code */
112
+ char *msg; /* error message */
113
+ /* zlib inflate or deflate stream */
114
+ z_stream strm; /* stream structure in-place (not a pointer) */
115
+ } gz_state;
116
+ typedef gz_state FAR *gz_statep;
117
+
118
+ /* shared functions */
119
+ void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
120
+ #if defined UNDER_CE
121
+ char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
122
+ #endif
123
+
124
+ /* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
125
+ value -- needed when comparing unsigned to z_off64_t, which is signed
126
+ (possible z_off64_t types off_t, off64_t, and long are all signed) */
127
+ #ifdef INT_MAX
128
+ # define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
129
+ #else
130
+ unsigned ZLIB_INTERNAL gz_intmax OF((void));
131
+ # define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
132
+ #endif
@@ -0,0 +1,537 @@
1
+ /* gzlib.c -- zlib functions common to reading and writing gzip files
2
+ * Copyright (C) 2004, 2010 Mark Adler
3
+ * For conditions of distribution and use, see copyright notice in zlib.h
4
+ */
5
+
6
+ #include "gzguts.h"
7
+
8
+ #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
9
+ # define LSEEK lseek64
10
+ #else
11
+ # define LSEEK lseek
12
+ #endif
13
+
14
+ /* Local functions */
15
+ local void gz_reset OF((gz_statep));
16
+ local gzFile gz_open OF((const char *, int, const char *));
17
+
18
+ #if defined UNDER_CE
19
+
20
+ /* Map the Windows error number in ERROR to a locale-dependent error message
21
+ string and return a pointer to it. Typically, the values for ERROR come
22
+ from GetLastError.
23
+
24
+ The string pointed to shall not be modified by the application, but may be
25
+ overwritten by a subsequent call to gz_strwinerror
26
+
27
+ The gz_strwinerror function does not change the current setting of
28
+ GetLastError. */
29
+ char ZLIB_INTERNAL *gz_strwinerror (error)
30
+ DWORD error;
31
+ {
32
+ static char buf[1024];
33
+
34
+ wchar_t *msgbuf;
35
+ DWORD lasterr = GetLastError();
36
+ DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
37
+ | FORMAT_MESSAGE_ALLOCATE_BUFFER,
38
+ NULL,
39
+ error,
40
+ 0, /* Default language */
41
+ (LPVOID)&msgbuf,
42
+ 0,
43
+ NULL);
44
+ if (chars != 0) {
45
+ /* If there is an \r\n appended, zap it. */
46
+ if (chars >= 2
47
+ && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') {
48
+ chars -= 2;
49
+ msgbuf[chars] = 0;
50
+ }
51
+
52
+ if (chars > sizeof (buf) - 1) {
53
+ chars = sizeof (buf) - 1;
54
+ msgbuf[chars] = 0;
55
+ }
56
+
57
+ wcstombs(buf, msgbuf, chars + 1);
58
+ LocalFree(msgbuf);
59
+ }
60
+ else {
61
+ sprintf(buf, "unknown win32 error (%ld)", error);
62
+ }
63
+
64
+ SetLastError(lasterr);
65
+ return buf;
66
+ }
67
+
68
+ #endif /* UNDER_CE */
69
+
70
+ /* Reset gzip file state */
71
+ local void gz_reset(state)
72
+ gz_statep state;
73
+ {
74
+ if (state->mode == GZ_READ) { /* for reading ... */
75
+ state->have = 0; /* no output data available */
76
+ state->eof = 0; /* not at end of file */
77
+ state->how = LOOK; /* look for gzip header */
78
+ state->direct = 1; /* default for empty file */
79
+ }
80
+ state->seek = 0; /* no seek request pending */
81
+ gz_error(state, Z_OK, NULL); /* clear error */
82
+ state->pos = 0; /* no uncompressed data yet */
83
+ state->strm.avail_in = 0; /* no input data yet */
84
+ }
85
+
86
+ /* Open a gzip file either by name or file descriptor. */
87
+ local gzFile gz_open(path, fd, mode)
88
+ const char *path;
89
+ int fd;
90
+ const char *mode;
91
+ {
92
+ gz_statep state;
93
+
94
+ /* allocate gzFile structure to return */
95
+ state = malloc(sizeof(gz_state));
96
+ if (state == NULL)
97
+ return NULL;
98
+ state->size = 0; /* no buffers allocated yet */
99
+ state->want = GZBUFSIZE; /* requested buffer size */
100
+ state->msg = NULL; /* no error message yet */
101
+
102
+ /* interpret mode */
103
+ state->mode = GZ_NONE;
104
+ state->level = Z_DEFAULT_COMPRESSION;
105
+ state->strategy = Z_DEFAULT_STRATEGY;
106
+ while (*mode) {
107
+ if (*mode >= '0' && *mode <= '9')
108
+ state->level = *mode - '0';
109
+ else
110
+ switch (*mode) {
111
+ case 'r':
112
+ state->mode = GZ_READ;
113
+ break;
114
+ #ifndef NO_GZCOMPRESS
115
+ case 'w':
116
+ state->mode = GZ_WRITE;
117
+ break;
118
+ case 'a':
119
+ state->mode = GZ_APPEND;
120
+ break;
121
+ #endif
122
+ case '+': /* can't read and write at the same time */
123
+ free(state);
124
+ return NULL;
125
+ case 'b': /* ignore -- will request binary anyway */
126
+ break;
127
+ case 'f':
128
+ state->strategy = Z_FILTERED;
129
+ break;
130
+ case 'h':
131
+ state->strategy = Z_HUFFMAN_ONLY;
132
+ break;
133
+ case 'R':
134
+ state->strategy = Z_RLE;
135
+ break;
136
+ case 'F':
137
+ state->strategy = Z_FIXED;
138
+ default: /* could consider as an error, but just ignore */
139
+ ;
140
+ }
141
+ mode++;
142
+ }
143
+
144
+ /* must provide an "r", "w", or "a" */
145
+ if (state->mode == GZ_NONE) {
146
+ free(state);
147
+ return NULL;
148
+ }
149
+
150
+ /* save the path name for error messages */
151
+ state->path = malloc(strlen(path) + 1);
152
+ if (state->path == NULL) {
153
+ free(state);
154
+ return NULL;
155
+ }
156
+ strcpy(state->path, path);
157
+
158
+ /* open the file with the appropriate mode (or just use fd) */
159
+ state->fd = fd != -1 ? fd :
160
+ open(path,
161
+ #ifdef O_LARGEFILE
162
+ O_LARGEFILE |
163
+ #endif
164
+ #ifdef O_BINARY
165
+ O_BINARY |
166
+ #endif
167
+ (state->mode == GZ_READ ?
168
+ O_RDONLY :
169
+ (O_WRONLY | O_CREAT | (
170
+ state->mode == GZ_WRITE ?
171
+ O_TRUNC :
172
+ O_APPEND))),
173
+ 0666);
174
+ if (state->fd == -1) {
175
+ free(state->path);
176
+ free(state);
177
+ return NULL;
178
+ }
179
+ if (state->mode == GZ_APPEND)
180
+ state->mode = GZ_WRITE; /* simplify later checks */
181
+
182
+ /* save the current position for rewinding (only if reading) */
183
+ if (state->mode == GZ_READ) {
184
+ state->start = LSEEK(state->fd, 0, SEEK_CUR);
185
+ if (state->start == -1) state->start = 0;
186
+ }
187
+
188
+ /* initialize stream */
189
+ gz_reset(state);
190
+
191
+ /* return stream */
192
+ return (gzFile)state;
193
+ }
194
+
195
+ /* -- see zlib.h -- */
196
+ gzFile ZEXPORT gzopen(path, mode)
197
+ const char *path;
198
+ const char *mode;
199
+ {
200
+ return gz_open(path, -1, mode);
201
+ }
202
+
203
+ /* -- see zlib.h -- */
204
+ gzFile ZEXPORT gzopen64(path, mode)
205
+ const char *path;
206
+ const char *mode;
207
+ {
208
+ return gz_open(path, -1, mode);
209
+ }
210
+
211
+ /* -- see zlib.h -- */
212
+ gzFile ZEXPORT gzdopen(fd, mode)
213
+ int fd;
214
+ const char *mode;
215
+ {
216
+ char *path; /* identifier for error messages */
217
+ gzFile gz;
218
+
219
+ if (fd == -1 || (path = malloc(7 + 3 * sizeof(int))) == NULL)
220
+ return NULL;
221
+ sprintf(path, "<fd:%d>", fd); /* for debugging */
222
+ gz = gz_open(path, fd, mode);
223
+ free(path);
224
+ return gz;
225
+ }
226
+
227
+ /* -- see zlib.h -- */
228
+ int ZEXPORT gzbuffer(file, size)
229
+ gzFile file;
230
+ unsigned size;
231
+ {
232
+ gz_statep state;
233
+
234
+ /* get internal structure and check integrity */
235
+ if (file == NULL)
236
+ return -1;
237
+ state = (gz_statep)file;
238
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
239
+ return -1;
240
+
241
+ /* make sure we haven't already allocated memory */
242
+ if (state->size != 0)
243
+ return -1;
244
+
245
+ /* check and set requested size */
246
+ if (size == 0)
247
+ return -1;
248
+ state->want = size;
249
+ return 0;
250
+ }
251
+
252
+ /* -- see zlib.h -- */
253
+ int ZEXPORT gzrewind(file)
254
+ gzFile file;
255
+ {
256
+ gz_statep state;
257
+
258
+ /* get internal structure */
259
+ if (file == NULL)
260
+ return -1;
261
+ state = (gz_statep)file;
262
+
263
+ /* check that we're reading and that there's no error */
264
+ if (state->mode != GZ_READ || state->err != Z_OK)
265
+ return -1;
266
+
267
+ /* back up and start over */
268
+ if (LSEEK(state->fd, state->start, SEEK_SET) == -1)
269
+ return -1;
270
+ gz_reset(state);
271
+ return 0;
272
+ }
273
+
274
+ /* -- see zlib.h -- */
275
+ z_off64_t ZEXPORT gzseek64(file, offset, whence)
276
+ gzFile file;
277
+ z_off64_t offset;
278
+ int whence;
279
+ {
280
+ unsigned n;
281
+ z_off64_t ret;
282
+ gz_statep state;
283
+
284
+ /* get internal structure and check integrity */
285
+ if (file == NULL)
286
+ return -1;
287
+ state = (gz_statep)file;
288
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
289
+ return -1;
290
+
291
+ /* check that there's no error */
292
+ if (state->err != Z_OK)
293
+ return -1;
294
+
295
+ /* can only seek from start or relative to current position */
296
+ if (whence != SEEK_SET && whence != SEEK_CUR)
297
+ return -1;
298
+
299
+ /* normalize offset to a SEEK_CUR specification */
300
+ if (whence == SEEK_SET)
301
+ offset -= state->pos;
302
+ else if (state->seek)
303
+ offset += state->skip;
304
+ state->seek = 0;
305
+
306
+ /* if within raw area while reading, just go there */
307
+ if (state->mode == GZ_READ && state->how == COPY &&
308
+ state->pos + offset >= state->raw) {
309
+ ret = LSEEK(state->fd, offset - state->have, SEEK_CUR);
310
+ if (ret == -1)
311
+ return -1;
312
+ state->have = 0;
313
+ state->eof = 0;
314
+ state->seek = 0;
315
+ gz_error(state, Z_OK, NULL);
316
+ state->strm.avail_in = 0;
317
+ state->pos += offset;
318
+ return state->pos;
319
+ }
320
+
321
+ /* calculate skip amount, rewinding if needed for back seek when reading */
322
+ if (offset < 0) {
323
+ if (state->mode != GZ_READ) /* writing -- can't go backwards */
324
+ return -1;
325
+ offset += state->pos;
326
+ if (offset < 0) /* before start of file! */
327
+ return -1;
328
+ if (gzrewind(file) == -1) /* rewind, then skip to offset */
329
+ return -1;
330
+ }
331
+
332
+ /* if reading, skip what's in output buffer (one less gzgetc() check) */
333
+ if (state->mode == GZ_READ) {
334
+ n = GT_OFF(state->have) || (z_off64_t)state->have > offset ?
335
+ (unsigned)offset : state->have;
336
+ state->have -= n;
337
+ state->next += n;
338
+ state->pos += n;
339
+ offset -= n;
340
+ }
341
+
342
+ /* request skip (if not zero) */
343
+ if (offset) {
344
+ state->seek = 1;
345
+ state->skip = offset;
346
+ }
347
+ return state->pos + offset;
348
+ }
349
+
350
+ /* -- see zlib.h -- */
351
+ z_off_t ZEXPORT gzseek(file, offset, whence)
352
+ gzFile file;
353
+ z_off_t offset;
354
+ int whence;
355
+ {
356
+ z_off64_t ret;
357
+
358
+ ret = gzseek64(file, (z_off64_t)offset, whence);
359
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
360
+ }
361
+
362
+ /* -- see zlib.h -- */
363
+ z_off64_t ZEXPORT gztell64(file)
364
+ gzFile file;
365
+ {
366
+ gz_statep state;
367
+
368
+ /* get internal structure and check integrity */
369
+ if (file == NULL)
370
+ return -1;
371
+ state = (gz_statep)file;
372
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
373
+ return -1;
374
+
375
+ /* return position */
376
+ return state->pos + (state->seek ? state->skip : 0);
377
+ }
378
+
379
+ /* -- see zlib.h -- */
380
+ z_off_t ZEXPORT gztell(file)
381
+ gzFile file;
382
+ {
383
+ z_off64_t ret;
384
+
385
+ ret = gztell64(file);
386
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
387
+ }
388
+
389
+ /* -- see zlib.h -- */
390
+ z_off64_t ZEXPORT gzoffset64(file)
391
+ gzFile file;
392
+ {
393
+ z_off64_t offset;
394
+ gz_statep state;
395
+
396
+ /* get internal structure and check integrity */
397
+ if (file == NULL)
398
+ return -1;
399
+ state = (gz_statep)file;
400
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
401
+ return -1;
402
+
403
+ /* compute and return effective offset in file */
404
+ offset = LSEEK(state->fd, 0, SEEK_CUR);
405
+ if (offset == -1)
406
+ return -1;
407
+ if (state->mode == GZ_READ) /* reading */
408
+ offset -= state->strm.avail_in; /* don't count buffered input */
409
+ return offset;
410
+ }
411
+
412
+ /* -- see zlib.h -- */
413
+ z_off_t ZEXPORT gzoffset(file)
414
+ gzFile file;
415
+ {
416
+ z_off64_t ret;
417
+
418
+ ret = gzoffset64(file);
419
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
420
+ }
421
+
422
+ /* -- see zlib.h -- */
423
+ int ZEXPORT gzeof(file)
424
+ gzFile file;
425
+ {
426
+ gz_statep state;
427
+
428
+ /* get internal structure and check integrity */
429
+ if (file == NULL)
430
+ return 0;
431
+ state = (gz_statep)file;
432
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
433
+ return 0;
434
+
435
+ /* return end-of-file state */
436
+ return state->mode == GZ_READ ?
437
+ (state->eof && state->strm.avail_in == 0 && state->have == 0) : 0;
438
+ }
439
+
440
+ /* -- see zlib.h -- */
441
+ const char * ZEXPORT gzerror(file, errnum)
442
+ gzFile file;
443
+ int *errnum;
444
+ {
445
+ gz_statep state;
446
+
447
+ /* get internal structure and check integrity */
448
+ if (file == NULL)
449
+ return NULL;
450
+ state = (gz_statep)file;
451
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
452
+ return NULL;
453
+
454
+ /* return error information */
455
+ if (errnum != NULL)
456
+ *errnum = state->err;
457
+ return state->msg == NULL ? "" : state->msg;
458
+ }
459
+
460
+ /* -- see zlib.h -- */
461
+ void ZEXPORT gzclearerr(file)
462
+ gzFile file;
463
+ {
464
+ gz_statep state;
465
+
466
+ /* get internal structure and check integrity */
467
+ if (file == NULL)
468
+ return;
469
+ state = (gz_statep)file;
470
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
471
+ return;
472
+
473
+ /* clear error and end-of-file */
474
+ if (state->mode == GZ_READ)
475
+ state->eof = 0;
476
+ gz_error(state, Z_OK, NULL);
477
+ }
478
+
479
+ /* Create an error message in allocated memory and set state->err and
480
+ state->msg accordingly. Free any previous error message already there. Do
481
+ not try to free or allocate space if the error is Z_MEM_ERROR (out of
482
+ memory). Simply save the error message as a static string. If there is an
483
+ allocation failure constructing the error message, then convert the error to
484
+ out of memory. */
485
+ void ZLIB_INTERNAL gz_error(state, err, msg)
486
+ gz_statep state;
487
+ int err;
488
+ const char *msg;
489
+ {
490
+ /* free previously allocated message and clear */
491
+ if (state->msg != NULL) {
492
+ if (state->err != Z_MEM_ERROR)
493
+ free(state->msg);
494
+ state->msg = NULL;
495
+ }
496
+
497
+ /* set error code, and if no message, then done */
498
+ state->err = err;
499
+ if (msg == NULL)
500
+ return;
501
+
502
+ /* for an out of memory error, save as static string */
503
+ if (err == Z_MEM_ERROR) {
504
+ state->msg = (char *)msg;
505
+ return;
506
+ }
507
+
508
+ /* construct error message with path */
509
+ if ((state->msg = malloc(strlen(state->path) + strlen(msg) + 3)) == NULL) {
510
+ state->err = Z_MEM_ERROR;
511
+ state->msg = (char *)"out of memory";
512
+ return;
513
+ }
514
+ strcpy(state->msg, state->path);
515
+ strcat(state->msg, ": ");
516
+ strcat(state->msg, msg);
517
+ return;
518
+ }
519
+
520
+ #ifndef INT_MAX
521
+ /* portably return maximum value for an int (when limits.h presumed not
522
+ available) -- we need to do this to cover cases where 2's complement not
523
+ used, since C standard permits 1's complement and sign-bit representations,
524
+ otherwise we could just use ((unsigned)-1) >> 1 */
525
+ unsigned ZLIB_INTERNAL gz_intmax()
526
+ {
527
+ unsigned p, q;
528
+
529
+ p = 1;
530
+ do {
531
+ q = p;
532
+ p <<= 1;
533
+ p++;
534
+ } while (p > q);
535
+ return q >> 1;
536
+ }
537
+ #endif