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