Mercurial > cpython-lru_cache-weakref
annotate Modules/zlibmodule.c @ 16413:8819867f14ef legacy-trunk
Patch derived from Trent's 101162: a Python/C API testing framework.
STILL NEEDS UNIX BUILD CHANGES.
| author | Tim Peters <tim.peters@gmail.com> |
|---|---|
| date | Fri, 02 Feb 2001 05:57:15 +0000 |
| parents | c04ca6cba1e3 |
| children | 01c2470eeb2e |
| rev | line source |
|---|---|
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /* zlibmodule.c -- gzip-compatible data compression */ |
|
16368
c696a52c2621
Fix [ Bug #129293 ] zlib library used for binary win32 distribution can crash
Mark Hammond <mhammond@skippinet.com.au>
parents:
15098
diff
changeset
|
2 /* See http://www.info-zip.org/pub/infozip/zlib/ */ |
|
c696a52c2621
Fix [ Bug #129293 ] zlib library used for binary win32 distribution can crash
Mark Hammond <mhammond@skippinet.com.au>
parents:
15098
diff
changeset
|
3 |
|
16369
c04ca6cba1e3
Docs for new Windows zlib build procedure.
Tim Peters <tim.peters@gmail.com>
parents:
16368
diff
changeset
|
4 /* Windows users: read Python's PCbuild\readme.txt */ |
|
16368
c696a52c2621
Fix [ Bug #129293 ] zlib library used for binary win32 distribution can crash
Mark Hammond <mhammond@skippinet.com.au>
parents:
15098
diff
changeset
|
5 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
7 #include "Python.h" |
|
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
8 #include "zlib.h" |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 /* The following parameters are copied from zutil.h, version 0.95 */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 #define DEFLATED 8 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 #if MAX_MEM_LEVEL >= 8 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 # define DEF_MEM_LEVEL 8 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 #else |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 # define DEF_MEM_LEVEL MAX_MEM_LEVEL |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 #endif |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 #define DEF_WBITS MAX_WBITS |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 |
|
10538
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
19 /* The output buffer will be increased in chunks of DEFAULTALLOC bytes. */ |
|
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
20 #define DEFAULTALLOC (16*1024) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 #define PyInit_zlib initzlib |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 staticforward PyTypeObject Comptype; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 staticforward PyTypeObject Decomptype; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 static PyObject *ZlibError; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 typedef struct |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 PyObject_HEAD |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 z_stream zst; |
|
10467
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
32 PyObject *unused_data; |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
33 int is_initialised; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 } compobject; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 |
| 5722 | 36 static char compressobj__doc__[] = |
| 37 "compressobj() -- Return a compressor object.\n" | |
| 38 "compressobj(level) -- Return a compressor object, using the given compression level.\n" | |
| 39 ; | |
| 40 | |
| 41 static char decompressobj__doc__[] = | |
| 42 "decompressobj() -- Return a decompressor object.\n" | |
| 43 "decompressobj(wbits) -- Return a decompressor object, setting the window buffer size to wbits.\n" | |
| 44 ; | |
| 45 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 static compobject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
47 newcompobject(PyTypeObject *type) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 compobject *self; |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12255
diff
changeset
|
50 self = PyObject_New(compobject, type); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 if (self == NULL) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 return NULL; |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
53 self->is_initialised = 0; |
|
10467
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
54 self->unused_data = PyString_FromString(""); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 return self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 |
| 5722 | 58 static char compress__doc__[] = |
| 59 "compress(string) -- Compress string using the default compression level, " | |
| 60 "returning a string containing compressed data.\n" | |
| 61 "compress(string, level) -- Compress string, using the chosen compression " | |
| 62 "level (from 1 to 9). Return a string containing the compressed data.\n" | |
| 63 ; | |
| 64 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
66 PyZlib_compress(PyObject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 PyObject *ReturnVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 Byte *input, *output; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 int length, level=Z_DEFAULT_COMPRESSION, err; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 z_stream zst; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
73 if (!PyArg_ParseTuple(args, "s#|i:compress", &input, &length, &level)) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 return NULL; |
| 6236 | 75 zst.avail_out = length + length/1000 + 12 + 1; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 output=(Byte*)malloc(zst.avail_out); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 if (output==NULL) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 "Can't allocate memory to compress data"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 } |
| 9657 | 83 |
|
9662
9ba7f50b825a
replace missing zalloc initialization (test_zlib now runs
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
9661
diff
changeset
|
84 zst.zalloc=(alloc_func)NULL; |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
85 zst.zfree=(free_func)Z_NULL; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 zst.next_out=(Byte *)output; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 zst.next_in =(Byte *)input; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 zst.avail_in=length; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 err=deflateInit(&zst, level); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 switch(err) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 case(Z_OK): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 case(Z_MEM_ERROR): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 "Out of memory while compressing data"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 free(output); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 case(Z_STREAM_ERROR): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 PyErr_SetString(ZlibError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 "Bad compression level"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 free(output); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 default: |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 { |
| 6236 | 106 if (zst.msg == Z_NULL) |
| 107 PyErr_Format(ZlibError, "Error %i while compressing data", | |
| 108 err); | |
| 109 else | |
| 110 PyErr_Format(ZlibError, "Error %i while compressing data: %.200s", | |
| 111 err, zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
112 deflateEnd(&zst); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 free(output); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
117 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
118 err=deflate(&zst, Z_FINISH); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
119 switch(err) |
| 6236 | 120 { |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
121 case(Z_STREAM_END): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
122 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 /* Are there other errors to be trapped here? */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 default: |
| 6236 | 125 { |
| 126 if (zst.msg == Z_NULL) | |
| 127 PyErr_Format(ZlibError, "Error %i while compressing data", | |
| 128 err); | |
| 129 else | |
| 130 PyErr_Format(ZlibError, "Error %i while compressing data: %.200s", | |
| 131 err, zst.msg); | |
| 132 deflateEnd(&zst); | |
| 133 free(output); | |
| 134 return NULL; | |
| 135 } | |
| 136 } | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
137 err=deflateEnd(&zst); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
138 if (err!=Z_OK) |
| 6236 | 139 { |
| 140 if (zst.msg == Z_NULL) | |
| 141 PyErr_Format(ZlibError, "Error %i while finishing compression", | |
| 142 err); | |
| 143 else | |
| 144 PyErr_Format(ZlibError, | |
| 145 "Error %i while finishing compression: %.200s", | |
| 146 err, zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 free(output); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
149 } |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
150 ReturnVal=PyString_FromStringAndSize((char *)output, zst.total_out); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
151 free(output); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
152 return ReturnVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
154 |
| 5722 | 155 static char decompress__doc__[] = |
| 6007 | 156 "decompress(string) -- Decompress the data in string, returning a string containing the decompressed data.\n" |
| 157 "decompress(string, wbits) -- Decompress the data in string with a window buffer size of wbits.\n" | |
| 158 "decompress(string, wbits, bufsize) -- Decompress the data in string with a window buffer size of wbits and an initial output buffer size of bufsize.\n" | |
| 5722 | 159 ; |
| 160 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
161 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
162 PyZlib_decompress(PyObject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
163 { |
| 6007 | 164 PyObject *result_str; |
| 165 Byte *input; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
166 int length, err; |
| 6007 | 167 int wsize=DEF_WBITS, r_strlen=DEFAULTALLOC; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
168 z_stream zst; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
169 if (!PyArg_ParseTuple(args, "s#|ii:decompress", &input, &length, &wsize, &r_strlen)) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
170 return NULL; |
| 6236 | 171 |
| 172 if (r_strlen <= 0) | |
| 173 r_strlen = 1; | |
| 9657 | 174 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
175 zst.avail_in=length; |
| 6007 | 176 zst.avail_out=r_strlen; |
| 177 if (!(result_str = PyString_FromStringAndSize(NULL, r_strlen))) | |
| 178 { | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
179 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
180 "Can't allocate memory to decompress data"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
181 return NULL; |
| 6007 | 182 } |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
183 zst.zalloc=(alloc_func)NULL; |
|
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
184 zst.zfree=(free_func)Z_NULL; |
| 6007 | 185 zst.next_out=(Byte *)PyString_AsString(result_str); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
186 zst.next_in =(Byte *)input; |
| 6007 | 187 err=inflateInit2(&zst, wsize); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
188 switch(err) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
190 case(Z_OK): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
191 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
192 case(Z_MEM_ERROR): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
193 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
194 "Out of memory while decompressing data"); |
| 6236 | 195 Py_DECREF(result_str); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
196 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 default: |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
198 { |
| 6236 | 199 if (zst.msg == Z_NULL) |
| 200 PyErr_Format(ZlibError, "Error %i preparing to decompress data", | |
| 201 err); | |
| 202 else | |
| 203 PyErr_Format(ZlibError, | |
| 204 "Error %i while preparing to decompress data: %.200s", | |
| 205 err, zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
206 inflateEnd(&zst); |
| 6236 | 207 Py_DECREF(result_str); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
208 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
209 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
210 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
211 do |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
212 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
213 err=inflate(&zst, Z_FINISH); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
214 switch(err) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
215 { |
| 6007 | 216 case(Z_STREAM_END): |
| 217 break; | |
|
8128
fdba6397b729
Tiny patch for zlib 1.1.2
Guido van Rossum <guido@python.org>
parents:
6911
diff
changeset
|
218 case(Z_BUF_ERROR): |
|
15098
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
219 /* |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
220 * If there is at least 1 byte of room according to zst.avail_out |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
221 * and we get this error, assume that it means zlib cannot |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
222 * process the inflate call() due to an error in the data. |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
223 */ |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
224 if (zst.avail_out > 0) |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
225 { |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
226 PyErr_Format(ZlibError, "Error %i while decompressing data", |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
227 err); |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
228 inflateEnd(&zst); |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
229 Py_DECREF(result_str); |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
230 return NULL; |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
231 } |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
232 /* fall through */ |
|
7de0808f1fe3
Patch #101810: check whether zst.avail_out is non-zero when getting
Andrew M. Kuchling <amk@amk.ca>
parents:
13816
diff
changeset
|
233 case(Z_OK): |
| 6007 | 234 /* need more memory */ |
| 235 if (_PyString_Resize(&result_str, r_strlen << 1) == -1) | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
236 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
237 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
238 "Out of memory while decompressing data"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
239 inflateEnd(&zst); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
240 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
241 } |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
242 zst.next_out = (unsigned char *)PyString_AsString(result_str) + r_strlen; |
| 6007 | 243 zst.avail_out=r_strlen; |
| 244 r_strlen = r_strlen << 1; | |
| 245 break; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 default: |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
247 { |
| 6236 | 248 if (zst.msg == Z_NULL) |
| 249 PyErr_Format(ZlibError, "Error %i while decompressing data", | |
| 250 err); | |
| 251 else | |
| 252 PyErr_Format(ZlibError, | |
| 253 "Error %i while decompressing data: %.200s", | |
| 254 err, zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
255 inflateEnd(&zst); |
| 6236 | 256 Py_DECREF(result_str); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
257 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
258 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
259 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
260 } while(err!=Z_STREAM_END); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
261 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
262 err=inflateEnd(&zst); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
263 if (err!=Z_OK) |
| 6236 | 264 { |
| 265 if (zst.msg == Z_NULL) | |
| 266 PyErr_Format(ZlibError, | |
| 267 "Error %i while finishing data decompression", | |
| 268 err); | |
| 269 else | |
| 270 PyErr_Format(ZlibError, | |
| 271 "Error %i while finishing data decompression: %.200s", | |
| 272 err, zst.msg); | |
| 273 Py_DECREF(result_str); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
274 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
275 } |
| 6007 | 276 _PyString_Resize(&result_str, zst.total_out); |
| 277 return result_str; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
278 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
279 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
280 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
281 PyZlib_compressobj(PyObject *selfptr, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
282 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
283 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
284 int level=Z_DEFAULT_COMPRESSION, method=DEFLATED; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 int wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=0, err; |
| 6007 | 286 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
287 if (!PyArg_ParseTuple(args, "|iiiii:compressobj", &level, &method, &wbits, |
| 6007 | 288 &memLevel, &strategy)) |
| 289 return NULL; | |
| 290 | |
| 6236 | 291 self = newcompobject(&Comptype); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
292 if (self==NULL) return(NULL); |
| 6236 | 293 self->zst.zalloc = (alloc_func)NULL; |
| 294 self->zst.zfree = (free_func)Z_NULL; | |
| 295 err = deflateInit2(&self->zst, level, method, wbits, memLevel, strategy); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
296 switch(err) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
297 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
298 case (Z_OK): |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
299 self->is_initialised = 1; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
300 return (PyObject*)self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
301 case (Z_MEM_ERROR): |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
302 Py_DECREF(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
303 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
304 "Can't allocate memory for compression object"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
305 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
306 case(Z_STREAM_ERROR): |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
307 Py_DECREF(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
308 PyErr_SetString(PyExc_ValueError, |
| 6236 | 309 "Invalid initialization option"); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
310 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
311 default: |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
312 { |
| 6236 | 313 if (self->zst.msg == Z_NULL) |
| 314 PyErr_Format(ZlibError, | |
| 315 "Error %i while creating compression object", | |
| 316 err); | |
| 317 else | |
| 318 PyErr_Format(ZlibError, | |
| 319 "Error %i while creating compression object: %.200s", | |
| 320 err, self->zst.msg); | |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
321 Py_DECREF(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
322 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
323 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
324 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
325 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
326 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
327 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
328 PyZlib_decompressobj(PyObject *selfptr, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
329 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
330 int wbits=DEF_WBITS, err; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
331 compobject *self; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
332 if (!PyArg_ParseTuple(args, "|i:decompressobj", &wbits)) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
333 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
334 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
335 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
336 self=newcompobject(&Decomptype); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
337 if (self==NULL) return(NULL); |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
338 self->zst.zalloc=(alloc_func)NULL; |
|
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
339 self->zst.zfree=(free_func)Z_NULL; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
340 err=inflateInit2(&self->zst, wbits); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
341 switch(err) |
| 6236 | 342 { |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
343 case (Z_OK): |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
344 self->is_initialised = 1; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
345 return (PyObject*)self; |
| 6236 | 346 case(Z_STREAM_ERROR): |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
347 Py_DECREF(self); |
| 6236 | 348 PyErr_SetString(PyExc_ValueError, |
| 349 "Invalid initialization option"); | |
| 350 return NULL; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
351 case (Z_MEM_ERROR): |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
352 Py_DECREF(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
353 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
354 "Can't allocate memory for decompression object"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
355 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
356 default: |
| 6236 | 357 { |
| 358 if (self->zst.msg == Z_NULL) | |
| 359 PyErr_Format(ZlibError, | |
| 360 "Error %i while creating decompression object", | |
| 361 err); | |
| 362 else | |
| 363 PyErr_Format(ZlibError, | |
| 364 "Error %i while creating decompression object: %.200s", | |
| 365 err, self->zst.msg); | |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
366 Py_DECREF(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
368 } |
| 6236 | 369 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
370 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
371 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
372 static void |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
373 Comp_dealloc(compobject *self) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
374 { |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
375 if (self->is_initialised) |
|
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
376 deflateEnd(&self->zst); |
|
10467
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
377 Py_XDECREF(self->unused_data); |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12255
diff
changeset
|
378 PyObject_Del(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
379 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
380 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
381 static void |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
382 Decomp_dealloc(compobject *self) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
383 { |
| 6236 | 384 inflateEnd(&self->zst); |
|
10467
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
385 Py_XDECREF(self->unused_data); |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12255
diff
changeset
|
386 PyObject_Del(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
387 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
388 |
| 5722 | 389 static char comp_compress__doc__[] = |
| 390 "compress(data) -- Return a string containing a compressed version of the data.\n\n" | |
| 391 "After calling this function, some of the input data may still\n" | |
| 392 "be stored in internal buffers for later processing.\n" | |
| 393 "Call the flush() method to clear these buffers." | |
| 394 ; | |
| 395 | |
| 396 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
397 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
398 PyZlib_objcompress(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
399 { |
| 6042 | 400 int err = Z_OK, inplen; |
| 401 int length = DEFAULTALLOC; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
402 PyObject *RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
403 Byte *input; |
| 6236 | 404 unsigned long start_total_out; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
405 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
406 if (!PyArg_ParseTuple(args, "s#:compress", &input, &inplen)) |
| 6042 | 407 return NULL; |
| 6236 | 408 self->zst.avail_in = inplen; |
| 409 self->zst.next_in = input; | |
| 6042 | 410 if (!(RetVal = PyString_FromStringAndSize(NULL, length))) { |
| 411 PyErr_SetString(PyExc_MemoryError, | |
| 412 "Can't allocate memory to compress data"); | |
| 413 return NULL; | |
| 414 } | |
| 6236 | 415 start_total_out = self->zst.total_out; |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
416 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6042 | 417 self->zst.avail_out = length; |
| 418 while (self->zst.avail_in != 0 && err == Z_OK) | |
| 419 { | |
| 420 err = deflate(&(self->zst), Z_NO_FLUSH); | |
| 421 if (self->zst.avail_out <= 0) { | |
| 422 if (_PyString_Resize(&RetVal, length << 1) == -1) { | |
| 423 PyErr_SetString(PyExc_MemoryError, | |
| 424 "Can't allocate memory to compress data"); | |
| 425 return NULL; | |
| 426 } | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
427 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length; |
| 6042 | 428 self->zst.avail_out = length; |
| 429 length = length << 1; | |
| 430 } | |
| 431 } | |
| 432 if (err != Z_OK) | |
| 6236 | 433 { |
| 434 if (self->zst.msg == Z_NULL) | |
| 435 PyErr_Format(ZlibError, "Error %i while compressing", | |
| 436 err); | |
| 437 else | |
| 438 PyErr_Format(ZlibError, "Error %i while compressing: %.200s", | |
| 439 err, self->zst.msg); | |
| 440 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
441 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
442 } |
| 6236 | 443 _PyString_Resize(&RetVal, self->zst.total_out - start_total_out); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
444 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
445 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
446 |
| 5722 | 447 static char decomp_decompress__doc__[] = |
| 448 "decompress(data) -- Return a string containing the decompressed version of the data.\n\n" | |
| 449 "After calling this function, some of the input data may still\n" | |
| 450 "be stored in internal buffers for later processing.\n" | |
| 451 "Call the flush() method to clear these buffers." | |
| 452 ; | |
| 453 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
454 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
455 PyZlib_objdecompress(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
456 { |
| 6007 | 457 int length, err, inplen; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
458 PyObject *RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
459 Byte *input; |
| 6236 | 460 unsigned long start_total_out; |
| 461 | |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
462 if (!PyArg_ParseTuple(args, "s#:decompress", &input, &inplen)) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
463 return NULL; |
| 6236 | 464 start_total_out = self->zst.total_out; |
| 6007 | 465 RetVal = PyString_FromStringAndSize(NULL, DEFAULTALLOC); |
| 6236 | 466 self->zst.avail_in = inplen; |
| 467 self->zst.next_in = input; | |
| 6007 | 468 self->zst.avail_out = length = DEFAULTALLOC; |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
469 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6007 | 470 err = Z_OK; |
|
6003
508921950f2c
Must update the available space in the output buffer after
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
5723
diff
changeset
|
471 |
| 6007 | 472 while (self->zst.avail_in != 0 && err == Z_OK) |
| 473 { | |
| 474 err = inflate(&(self->zst), Z_NO_FLUSH); | |
| 475 if (err == Z_OK && self->zst.avail_out <= 0) | |
| 476 { | |
| 477 if (_PyString_Resize(&RetVal, length << 1) == -1) | |
| 478 { | |
| 479 PyErr_SetString(PyExc_MemoryError, | |
| 480 "Can't allocate memory to compress data"); | |
| 481 return NULL; | |
| 482 } | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
483 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length; |
| 6007 | 484 self->zst.avail_out = length; |
| 485 length = length << 1; | |
| 486 } | |
| 487 } | |
| 488 | |
| 6236 | 489 if (err != Z_OK && err != Z_STREAM_END) |
| 490 { | |
| 491 if (self->zst.msg == Z_NULL) | |
| 492 PyErr_Format(ZlibError, "Error %i while decompressing", | |
| 493 err); | |
| 494 else | |
| 495 PyErr_Format(ZlibError, "Error %i while decompressing: %.200s", | |
| 496 err, self->zst.msg); | |
| 497 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
498 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
499 } |
|
10467
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
500 |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
501 if (err == Z_STREAM_END) |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
502 { |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
503 /* The end of the compressed data has been reached, so set |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
504 the unused_data attribute to a string containing the |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
505 remainder of the data in the string. */ |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
506 int pos = self->zst.next_in - input; /* Position in the string */ |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
507 Py_XDECREF(self->unused_data); /* Free the original, empty string */ |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
508 |
|
10571
4aff39175137
Cast added by Jack Jansen (for Mac port).
Guido van Rossum <guido@python.org>
parents:
10538
diff
changeset
|
509 self->unused_data = PyString_FromStringAndSize((char *)input+pos, |
|
4aff39175137
Cast added by Jack Jansen (for Mac port).
Guido van Rossum <guido@python.org>
parents:
10538
diff
changeset
|
510 inplen-pos); |
|
10467
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
511 if (self->unused_data == NULL) return NULL; |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
512 } |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
513 |
| 6236 | 514 _PyString_Resize(&RetVal, self->zst.total_out - start_total_out); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
515 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
516 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
517 |
| 5722 | 518 static char comp_flush__doc__[] = |
| 9657 | 519 "flush( [mode] ) -- Return a string containing any remaining compressed data.\n" |
| 520 "mode can be one of the constants Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH; the \n" | |
| 521 "default value used when mode is not specified is Z_FINISH.\n" | |
| 522 "If mode == Z_FINISH, the compressor object can no longer be used after\n" | |
| 523 "calling the flush() method. Otherwise, more data can still be compressed.\n" | |
| 5722 | 524 ; |
| 525 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
526 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
527 PyZlib_flush(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
528 { |
| 6042 | 529 int length=DEFAULTALLOC, err = Z_OK; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
530 PyObject *RetVal; |
| 9657 | 531 int flushmode = Z_FINISH; |
| 532 unsigned long start_total_out; | |
| 533 | |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
534 if (!PyArg_ParseTuple(args, "|i:flush", &flushmode)) |
| 9657 | 535 return NULL; |
| 536 | |
| 537 /* Flushing with Z_NO_FLUSH is a no-op, so there's no point in | |
| 538 doing any work at all; just return an empty string. */ | |
| 539 if (flushmode == Z_NO_FLUSH) | |
| 540 { | |
| 541 return PyString_FromStringAndSize(NULL, 0); | |
| 542 } | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
543 |
| 6042 | 544 self->zst.avail_in = 0; |
| 545 self->zst.next_in = Z_NULL; | |
| 546 if (!(RetVal = PyString_FromStringAndSize(NULL, length))) { | |
| 547 PyErr_SetString(PyExc_MemoryError, | |
| 548 "Can't allocate memory to compress data"); | |
| 549 return NULL; | |
| 550 } | |
| 9657 | 551 start_total_out = self->zst.total_out; |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
552 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6042 | 553 self->zst.avail_out = length; |
| 9657 | 554 |
| 555 /* When flushing the zstream, there's no input data. | |
| 556 If zst.avail_out == 0, that means that more output space is | |
| 557 needed to complete the flush operation. */ | |
|
10440
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
558 while (1) { |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
559 err = deflate(&(self->zst), flushmode); |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
560 |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
561 /* If the output is Z_OK, and there's still room in the output |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
562 buffer, then the flush is complete. */ |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
563 if ( (err == Z_OK) && self->zst.avail_out > 0) break; |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
564 |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
565 /* A nonzero return indicates some sort of error (but see |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
566 the comment for the error handler below) */ |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
567 if ( err != Z_OK ) break; |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
568 |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
569 /* There's no space left for output, so increase the buffer and loop |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
570 again */ |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
571 if (_PyString_Resize(&RetVal, length << 1) == -1) { |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
572 PyErr_SetString(PyExc_MemoryError, |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
573 "Can't allocate memory to compress data"); |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
574 return NULL; |
| 6042 | 575 } |
|
10440
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
576 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length; |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
577 self->zst.avail_out = length; |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
578 length = length << 1; |
|
9796
7ef5a1520ae5
fix bug in PyZlib_flush.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
9662
diff
changeset
|
579 } |
| 9657 | 580 |
|
10440
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
581 /* Raise an exception indicating an error. The condition for |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
582 detecting a error is kind of complicated; Z_OK indicates no |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
583 error, but if the flushmode is Z_FINISH, then Z_STREAM_END is |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
584 also not an error. */ |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
585 if (err!=Z_OK && !(flushmode == Z_FINISH && err == Z_STREAM_END) ) |
| 9657 | 586 { |
| 6236 | 587 if (self->zst.msg == Z_NULL) |
| 9657 | 588 PyErr_Format(ZlibError, "Error %i while flushing", |
| 6236 | 589 err); |
| 590 else | |
| 9657 | 591 PyErr_Format(ZlibError, "Error %i while flushing: %.200s", |
| 6236 | 592 err, self->zst.msg); |
| 593 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
594 return NULL; |
|
9796
7ef5a1520ae5
fix bug in PyZlib_flush.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
9662
diff
changeset
|
595 } |
|
10440
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
596 |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
597 /* If flushmode is Z_FINISH, we also have to call deflateEnd() to |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
598 free various data structures */ |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
599 |
| 9657 | 600 if (flushmode == Z_FINISH) { |
| 601 err=deflateEnd(&(self->zst)); | |
| 602 if (err!=Z_OK) { | |
| 6236 | 603 if (self->zst.msg == Z_NULL) |
| 9657 | 604 PyErr_Format(ZlibError, "Error %i from deflateEnd()", |
| 605 err); | |
| 6236 | 606 else |
| 9657 | 607 PyErr_Format(ZlibError, |
| 608 "Error %i from deflateEnd(): %.200s", | |
| 609 err, self->zst.msg); | |
| 6236 | 610 Py_DECREF(RetVal); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
611 return NULL; |
| 9657 | 612 } |
| 6042 | 613 } |
| 9657 | 614 _PyString_Resize(&RetVal, self->zst.total_out - start_total_out); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
615 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
616 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
617 |
| 5722 | 618 static char decomp_flush__doc__[] = |
| 619 "flush() -- Return a string containing any remaining decompressed data. " | |
| 620 "The decompressor object can no longer be used after this call." | |
| 621 ; | |
| 622 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
623 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
624 PyZlib_unflush(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
625 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
626 int length=0, err; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
627 PyObject *RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
628 |
|
13816
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
629 if (!PyArg_ParseTuple(args, "")) |
| 6007 | 630 return NULL; |
| 6042 | 631 if (!(RetVal = PyString_FromStringAndSize(NULL, DEFAULTALLOC))) |
| 632 { | |
| 633 PyErr_SetString(PyExc_MemoryError, | |
| 634 "Can't allocate memory to decompress data"); | |
| 635 return NULL; | |
| 636 } | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
637 self->zst.avail_in=0; |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
638 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6007 | 639 length = self->zst.avail_out = DEFAULTALLOC; |
| 640 | |
|
10538
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
641 /* I suspect that Z_BUF_ERROR is the only error code we need to check for |
|
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
642 in the following loop, but will leave the Z_OK in for now to avoid |
|
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
643 destabilizing this function. --amk */ |
| 6007 | 644 err = Z_OK; |
|
10538
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
645 while ( err == Z_OK ) |
| 6007 | 646 { |
| 647 err = inflate(&(self->zst), Z_FINISH); | |
|
10538
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
648 if ( ( err == Z_OK || err == Z_BUF_ERROR ) && self->zst.avail_out == 0) |
| 6007 | 649 { |
| 650 if (_PyString_Resize(&RetVal, length << 1) == -1) | |
| 651 { | |
| 652 PyErr_SetString(PyExc_MemoryError, | |
| 653 "Can't allocate memory to decompress data"); | |
| 654 return NULL; | |
| 655 } | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
656 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length; |
| 6007 | 657 self->zst.avail_out = length; |
| 658 length = length << 1; | |
|
10538
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
659 err = Z_OK; |
| 6007 | 660 } |
| 661 } | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
662 if (err!=Z_STREAM_END) |
| 6236 | 663 { |
| 664 if (self->zst.msg == Z_NULL) | |
| 665 PyErr_Format(ZlibError, "Error %i while decompressing", | |
| 666 err); | |
| 667 else | |
| 668 PyErr_Format(ZlibError, "Error %i while decompressing: %.200s", | |
| 669 err, self->zst.msg); | |
| 670 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
671 return NULL; |
| 6236 | 672 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
673 err=inflateEnd(&(self->zst)); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
674 if (err!=Z_OK) |
| 6236 | 675 { |
| 676 if (self->zst.msg == Z_NULL) | |
| 677 PyErr_Format(ZlibError, | |
| 678 "Error %i while flushing decompression object", | |
| 679 err); | |
| 680 else | |
| 681 PyErr_Format(ZlibError, | |
| 682 "Error %i while flushing decompression object: %.200s", | |
| 683 err, self->zst.msg); | |
| 684 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
685 return NULL; |
| 6236 | 686 } |
| 6042 | 687 _PyString_Resize(&RetVal, |
| 688 (char *)self->zst.next_out - PyString_AsString(RetVal)); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
689 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
690 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
691 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
692 static PyMethodDef comp_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
693 { |
|
13816
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
694 {"compress", (binaryfunc)PyZlib_objcompress, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
695 METH_VARARGS, comp_compress__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
696 {"flush", (binaryfunc)PyZlib_flush, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
697 METH_VARARGS, comp_flush__doc__}, |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
698 {NULL, NULL} |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
699 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
700 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
701 static PyMethodDef Decomp_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
702 { |
|
13816
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
703 {"decompress", (binaryfunc)PyZlib_objdecompress, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
704 METH_VARARGS, decomp_decompress__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
705 {"flush", (binaryfunc)PyZlib_unflush, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
706 METH_VARARGS, decomp_flush__doc__}, |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
707 {NULL, NULL} |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
708 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
709 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
710 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
711 Comp_getattr(compobject *self, char *name) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
712 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
713 return Py_FindMethod(comp_methods, (PyObject *)self, name); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
714 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
715 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
716 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
717 Decomp_getattr(compobject *self, char *name) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
718 { |
|
10467
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
719 if (strcmp(name, "unused_data") == 0) |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
720 { |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
721 Py_INCREF(self->unused_data); |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
722 return self->unused_data; |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
723 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
724 return Py_FindMethod(Decomp_methods, (PyObject *)self, name); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
725 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
726 |
| 5722 | 727 static char adler32__doc__[] = |
| 728 "adler32(string) -- Compute an Adler-32 checksum of string, using " | |
| 729 "a default starting value, and returning an integer value.\n" | |
| 730 "adler32(string, value) -- Compute an Adler-32 checksum of string, using " | |
| 731 "the starting value provided, and returning an integer value\n" | |
| 732 ; | |
| 733 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
734 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
735 PyZlib_adler32(PyObject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
736 { |
| 6236 | 737 uLong adler32val=adler32(0L, Z_NULL, 0); |
| 738 Byte *buf; | |
| 739 int len; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
740 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
741 if (!PyArg_ParseTuple(args, "s#|l:adler32", &buf, &len, &adler32val)) |
| 6236 | 742 { |
| 743 return NULL; | |
| 744 } | |
| 745 adler32val = adler32(adler32val, buf, len); | |
| 746 return PyInt_FromLong(adler32val); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
747 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
748 |
| 5722 | 749 static char crc32__doc__[] = |
| 750 "crc32(string) -- Compute a CRC-32 checksum of string, using " | |
| 751 "a default starting value, and returning an integer value.\n" | |
| 752 "crc32(string, value) -- Compute a CRC-32 checksum of string, using " | |
| 753 "the starting value provided, and returning an integer value.\n" | |
| 754 ; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
755 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
756 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
757 PyZlib_crc32(PyObject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
758 { |
| 6236 | 759 uLong crc32val=crc32(0L, Z_NULL, 0); |
| 760 Byte *buf; | |
| 761 int len; | |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
762 if (!PyArg_ParseTuple(args, "s#|l:crc32", &buf, &len, &crc32val)) |
| 6236 | 763 { |
| 764 return NULL; | |
| 765 } | |
| 766 crc32val = crc32(crc32val, buf, len); | |
| 767 return PyInt_FromLong(crc32val); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
768 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
769 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
770 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
771 static PyMethodDef zlib_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
772 { |
|
13816
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
773 {"adler32", (PyCFunction)PyZlib_adler32, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
774 METH_VARARGS, adler32__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
775 {"compress", (PyCFunction)PyZlib_compress, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
776 METH_VARARGS, compress__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
777 {"compressobj", (PyCFunction)PyZlib_compressobj, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
778 METH_VARARGS, compressobj__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
779 {"crc32", (PyCFunction)PyZlib_crc32, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
780 METH_VARARGS, crc32__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
781 {"decompress", (PyCFunction)PyZlib_decompress, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
782 METH_VARARGS, decompress__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
783 {"decompressobj", (PyCFunction)PyZlib_decompressobj, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
784 METH_VARARGS, decompressobj__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
785 {NULL, NULL} |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
786 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
787 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
788 statichere PyTypeObject Comptype = { |
| 6911 | 789 PyObject_HEAD_INIT(0) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
790 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
791 "Compress", |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
792 sizeof(compobject), |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
793 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
794 (destructor)Comp_dealloc, /*tp_dealloc*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
795 0, /*tp_print*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
796 (getattrfunc)Comp_getattr, /*tp_getattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
797 0, /*tp_setattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
798 0, /*tp_compare*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
799 0, /*tp_repr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
800 0, /*tp_as_number*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
801 0, /*tp_as_sequence*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
802 0, /*tp_as_mapping*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
803 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
804 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
805 statichere PyTypeObject Decomptype = { |
| 6911 | 806 PyObject_HEAD_INIT(0) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
807 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
808 "Decompress", |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
809 sizeof(compobject), |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
810 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
811 (destructor)Decomp_dealloc, /*tp_dealloc*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
812 0, /*tp_print*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
813 (getattrfunc)Decomp_getattr, /*tp_getattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
814 0, /*tp_setattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
815 0, /*tp_compare*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
816 0, /*tp_repr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
817 0, /*tp_as_number*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
818 0, /*tp_as_sequence*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
819 0, /*tp_as_mapping*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
820 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
821 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
822 /* The following insint() routine was blatantly ripped off from |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
823 socketmodule.c */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
824 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
825 /* Convenience routine to export an integer value. |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
826 For simplicity, errors (which are unlikely anyway) are ignored. */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
827 static void |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
828 insint(PyObject *d, char *name, int value) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
829 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
830 PyObject *v = PyInt_FromLong((long) value); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
831 if (v == NULL) { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
832 /* Don't bother reporting this error */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
833 PyErr_Clear(); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
834 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
835 else { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
836 PyDict_SetItemString(d, name, v); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
837 Py_DECREF(v); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
838 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
839 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
840 |
| 5722 | 841 static char zlib_module_documentation[]= |
| 842 "The functions in this module allow compression and decompression " | |
| 843 "using the zlib library, which is based on GNU zip. \n\n" | |
| 844 "adler32(string) -- Compute an Adler-32 checksum.\n" | |
| 845 "adler32(string, start) -- Compute an Adler-32 checksum using a given starting value.\n" | |
| 846 "compress(string) -- Compress a string.\n" | |
| 847 "compress(string, level) -- Compress a string with the given level of compression (1--9).\n" | |
| 848 "compressobj([level]) -- Return a compressor object.\n" | |
| 849 "crc32(string) -- Compute a CRC-32 checksum.\n" | |
| 850 "crc32(string, start) -- Compute a CRC-32 checksum using a given starting value.\n" | |
|
11607
69216c11a1bd
Fix typo in docstring: wbites -> wbits
Andrew M. Kuchling <amk@amk.ca>
parents:
10571
diff
changeset
|
851 "decompress(string,[wbits],[bufsize]) -- Decompresses a compressed string.\n" |
| 5722 | 852 "decompressobj([wbits]) -- Return a decompressor object (wbits=window buffer size).\n\n" |
| 853 "Compressor objects support compress() and flush() methods; decompressor \n" | |
| 854 "objects support decompress() and flush()." | |
| 855 ; | |
| 856 | |
|
9588
38023a425e48
Add DL_EXPORT() to all modules that could possibly be used
Guido van Rossum <guido@python.org>
parents:
8636
diff
changeset
|
857 DL_EXPORT(void) |
|
13651
8a063423e0b7
Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents:
13496
diff
changeset
|
858 PyInit_zlib(void) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
859 { |
| 6236 | 860 PyObject *m, *d, *ver; |
| 6911 | 861 Comptype.ob_type = &PyType_Type; |
| 862 Decomptype.ob_type = &PyType_Type; | |
| 5722 | 863 m = Py_InitModule4("zlib", zlib_methods, |
| 864 zlib_module_documentation, | |
| 865 (PyObject*)NULL,PYTHON_API_VERSION); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
866 d = PyModule_GetDict(m); |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
6236
diff
changeset
|
867 ZlibError = PyErr_NewException("zlib.error", NULL, NULL); |
|
11619
91245dc940eb
For ZlibError and ZLIB_VERSION, only attempt to add entry to the
Fred Drake <fdrake@acm.org>
parents:
11607
diff
changeset
|
868 if (ZlibError != NULL) |
|
91245dc940eb
For ZlibError and ZLIB_VERSION, only attempt to add entry to the
Fred Drake <fdrake@acm.org>
parents:
11607
diff
changeset
|
869 PyDict_SetItemString(d, "error", ZlibError); |
| 6236 | 870 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
871 insint(d, "MAX_WBITS", MAX_WBITS); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
872 insint(d, "DEFLATED", DEFLATED); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
873 insint(d, "DEF_MEM_LEVEL", DEF_MEM_LEVEL); |
| 6236 | 874 insint(d, "Z_BEST_SPEED", Z_BEST_SPEED); |
| 875 insint(d, "Z_BEST_COMPRESSION", Z_BEST_COMPRESSION); | |
| 876 insint(d, "Z_DEFAULT_COMPRESSION", Z_DEFAULT_COMPRESSION); | |
| 877 insint(d, "Z_FILTERED", Z_FILTERED); | |
| 878 insint(d, "Z_HUFFMAN_ONLY", Z_HUFFMAN_ONLY); | |
| 879 insint(d, "Z_DEFAULT_STRATEGY", Z_DEFAULT_STRATEGY); | |
| 9657 | 880 |
| 881 insint(d, "Z_FINISH", Z_FINISH); | |
| 882 insint(d, "Z_NO_FLUSH", Z_NO_FLUSH); | |
| 883 insint(d, "Z_SYNC_FLUSH", Z_SYNC_FLUSH); | |
| 884 insint(d, "Z_FULL_FLUSH", Z_FULL_FLUSH); | |
| 885 | |
| 6236 | 886 ver = PyString_FromString(ZLIB_VERSION); |
|
11619
91245dc940eb
For ZlibError and ZLIB_VERSION, only attempt to add entry to the
Fred Drake <fdrake@acm.org>
parents:
11607
diff
changeset
|
887 if (ver != NULL) { |
|
91245dc940eb
For ZlibError and ZLIB_VERSION, only attempt to add entry to the
Fred Drake <fdrake@acm.org>
parents:
11607
diff
changeset
|
888 PyDict_SetItemString(d, "ZLIB_VERSION", ver); |
|
91245dc940eb
For ZlibError and ZLIB_VERSION, only attempt to add entry to the
Fred Drake <fdrake@acm.org>
parents:
11607
diff
changeset
|
889 Py_DECREF(ver); |
|
91245dc940eb
For ZlibError and ZLIB_VERSION, only attempt to add entry to the
Fred Drake <fdrake@acm.org>
parents:
11607
diff
changeset
|
890 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
891 } |
