Mercurial > cpython-lru_cache-weakref
annotate Modules/zlibmodule.c @ 14984:ece6c19edcc1 legacy-trunk
Remove some debugging prints.
| author | Greg Ward <gward@python.net> |
|---|---|
| date | Tue, 03 Oct 2000 03:32:37 +0000 |
| parents | afbbe674d58a |
| children | 7de0808f1fe3 |
| 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): |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
217 case(Z_OK): |
| 6007 | 218 /* need more memory */ |
| 219 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
|
220 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
221 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
222 "Out of memory while decompressing data"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
223 inflateEnd(&zst); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
224 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
225 } |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
226 zst.next_out = (unsigned char *)PyString_AsString(result_str) + r_strlen; |
| 6007 | 227 zst.avail_out=r_strlen; |
| 228 r_strlen = r_strlen << 1; | |
| 229 break; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
230 default: |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
231 { |
| 6236 | 232 if (zst.msg == Z_NULL) |
| 233 PyErr_Format(ZlibError, "Error %i while decompressing data", | |
| 234 err); | |
| 235 else | |
| 236 PyErr_Format(ZlibError, | |
| 237 "Error %i while decompressing data: %.200s", | |
| 238 err, zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
239 inflateEnd(&zst); |
| 6236 | 240 Py_DECREF(result_str); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
241 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
242 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
243 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
244 } while(err!=Z_STREAM_END); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
245 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 err=inflateEnd(&zst); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
247 if (err!=Z_OK) |
| 6236 | 248 { |
| 249 if (zst.msg == Z_NULL) | |
| 250 PyErr_Format(ZlibError, | |
| 251 "Error %i while finishing data decompression", | |
| 252 err); | |
| 253 else | |
| 254 PyErr_Format(ZlibError, | |
| 255 "Error %i while finishing data decompression: %.200s", | |
| 256 err, zst.msg); | |
| 257 Py_DECREF(result_str); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
258 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
259 } |
| 6007 | 260 _PyString_Resize(&result_str, zst.total_out); |
| 261 return result_str; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
262 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
263 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
264 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
265 PyZlib_compressobj(PyObject *selfptr, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
266 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
267 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
268 int level=Z_DEFAULT_COMPRESSION, method=DEFLATED; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
269 int wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=0, err; |
| 6007 | 270 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
271 if (!PyArg_ParseTuple(args, "|iiiii:compressobj", &level, &method, &wbits, |
| 6007 | 272 &memLevel, &strategy)) |
| 273 return NULL; | |
| 274 | |
| 6236 | 275 self = newcompobject(&Comptype); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
276 if (self==NULL) return(NULL); |
| 6236 | 277 self->zst.zalloc = (alloc_func)NULL; |
| 278 self->zst.zfree = (free_func)Z_NULL; | |
| 279 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
|
280 switch(err) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
281 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
282 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
|
283 self->is_initialised = 1; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
284 return (PyObject*)self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 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
|
286 Py_DECREF(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
287 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
288 "Can't allocate memory for compression object"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
289 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
290 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
|
291 Py_DECREF(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
292 PyErr_SetString(PyExc_ValueError, |
| 6236 | 293 "Invalid initialization option"); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
294 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
295 default: |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
296 { |
| 6236 | 297 if (self->zst.msg == Z_NULL) |
| 298 PyErr_Format(ZlibError, | |
| 299 "Error %i while creating compression object", | |
| 300 err); | |
| 301 else | |
| 302 PyErr_Format(ZlibError, | |
| 303 "Error %i while creating compression object: %.200s", | |
| 304 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
|
305 Py_DECREF(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
306 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
307 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
308 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
309 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
310 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
311 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
312 PyZlib_decompressobj(PyObject *selfptr, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
313 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
314 int wbits=DEF_WBITS, err; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
315 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
|
316 if (!PyArg_ParseTuple(args, "|i:decompressobj", &wbits)) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
317 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
318 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
319 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
320 self=newcompobject(&Decomptype); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
321 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
|
322 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
|
323 self->zst.zfree=(free_func)Z_NULL; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
324 err=inflateInit2(&self->zst, wbits); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
325 switch(err) |
| 6236 | 326 { |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
327 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
|
328 self->is_initialised = 1; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
329 return (PyObject*)self; |
| 6236 | 330 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
|
331 Py_DECREF(self); |
| 6236 | 332 PyErr_SetString(PyExc_ValueError, |
| 333 "Invalid initialization option"); | |
| 334 return NULL; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
335 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
|
336 Py_DECREF(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
337 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
338 "Can't allocate memory for decompression object"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
339 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
340 default: |
| 6236 | 341 { |
| 342 if (self->zst.msg == Z_NULL) | |
| 343 PyErr_Format(ZlibError, | |
| 344 "Error %i while creating decompression object", | |
| 345 err); | |
| 346 else | |
| 347 PyErr_Format(ZlibError, | |
| 348 "Error %i while creating decompression object: %.200s", | |
| 349 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
|
350 Py_DECREF(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
351 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
352 } |
| 6236 | 353 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
354 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
355 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
356 static void |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
357 Comp_dealloc(compobject *self) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
358 { |
|
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
|
359 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
|
360 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
|
361 Py_XDECREF(self->unused_data); |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12255
diff
changeset
|
362 PyObject_Del(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
363 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
364 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
365 static void |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
366 Decomp_dealloc(compobject *self) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 { |
| 6236 | 368 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
|
369 Py_XDECREF(self->unused_data); |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12255
diff
changeset
|
370 PyObject_Del(self); |
|
5352
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 |
| 5722 | 373 static char comp_compress__doc__[] = |
| 374 "compress(data) -- Return a string containing a compressed version of the data.\n\n" | |
| 375 "After calling this function, some of the input data may still\n" | |
| 376 "be stored in internal buffers for later processing.\n" | |
| 377 "Call the flush() method to clear these buffers." | |
| 378 ; | |
| 379 | |
| 380 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
381 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
382 PyZlib_objcompress(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
383 { |
| 6042 | 384 int err = Z_OK, inplen; |
| 385 int length = DEFAULTALLOC; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
386 PyObject *RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
387 Byte *input; |
| 6236 | 388 unsigned long start_total_out; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
389 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
390 if (!PyArg_ParseTuple(args, "s#:compress", &input, &inplen)) |
| 6042 | 391 return NULL; |
| 6236 | 392 self->zst.avail_in = inplen; |
| 393 self->zst.next_in = input; | |
| 6042 | 394 if (!(RetVal = PyString_FromStringAndSize(NULL, length))) { |
| 395 PyErr_SetString(PyExc_MemoryError, | |
| 396 "Can't allocate memory to compress data"); | |
| 397 return NULL; | |
| 398 } | |
| 6236 | 399 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
|
400 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6042 | 401 self->zst.avail_out = length; |
| 402 while (self->zst.avail_in != 0 && err == Z_OK) | |
| 403 { | |
| 404 err = deflate(&(self->zst), Z_NO_FLUSH); | |
| 405 if (self->zst.avail_out <= 0) { | |
| 406 if (_PyString_Resize(&RetVal, length << 1) == -1) { | |
| 407 PyErr_SetString(PyExc_MemoryError, | |
| 408 "Can't allocate memory to compress data"); | |
| 409 return NULL; | |
| 410 } | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
411 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length; |
| 6042 | 412 self->zst.avail_out = length; |
| 413 length = length << 1; | |
| 414 } | |
| 415 } | |
| 416 if (err != Z_OK) | |
| 6236 | 417 { |
| 418 if (self->zst.msg == Z_NULL) | |
| 419 PyErr_Format(ZlibError, "Error %i while compressing", | |
| 420 err); | |
| 421 else | |
| 422 PyErr_Format(ZlibError, "Error %i while compressing: %.200s", | |
| 423 err, self->zst.msg); | |
| 424 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
425 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
426 } |
| 6236 | 427 _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
|
428 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
429 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
430 |
| 5722 | 431 static char decomp_decompress__doc__[] = |
| 432 "decompress(data) -- Return a string containing the decompressed version of the data.\n\n" | |
| 433 "After calling this function, some of the input data may still\n" | |
| 434 "be stored in internal buffers for later processing.\n" | |
| 435 "Call the flush() method to clear these buffers." | |
| 436 ; | |
| 437 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
438 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
439 PyZlib_objdecompress(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
440 { |
| 6007 | 441 int length, err, inplen; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
442 PyObject *RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
443 Byte *input; |
| 6236 | 444 unsigned long start_total_out; |
| 445 | |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
446 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
|
447 return NULL; |
| 6236 | 448 start_total_out = self->zst.total_out; |
| 6007 | 449 RetVal = PyString_FromStringAndSize(NULL, DEFAULTALLOC); |
| 6236 | 450 self->zst.avail_in = inplen; |
| 451 self->zst.next_in = input; | |
| 6007 | 452 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
|
453 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6007 | 454 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
|
455 |
| 6007 | 456 while (self->zst.avail_in != 0 && err == Z_OK) |
| 457 { | |
| 458 err = inflate(&(self->zst), Z_NO_FLUSH); | |
| 459 if (err == Z_OK && self->zst.avail_out <= 0) | |
| 460 { | |
| 461 if (_PyString_Resize(&RetVal, length << 1) == -1) | |
| 462 { | |
| 463 PyErr_SetString(PyExc_MemoryError, | |
| 464 "Can't allocate memory to compress data"); | |
| 465 return NULL; | |
| 466 } | |
|
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) + length; |
| 6007 | 468 self->zst.avail_out = length; |
| 469 length = length << 1; | |
| 470 } | |
| 471 } | |
| 472 | |
| 6236 | 473 if (err != Z_OK && err != Z_STREAM_END) |
| 474 { | |
| 475 if (self->zst.msg == Z_NULL) | |
| 476 PyErr_Format(ZlibError, "Error %i while decompressing", | |
| 477 err); | |
| 478 else | |
| 479 PyErr_Format(ZlibError, "Error %i while decompressing: %.200s", | |
| 480 err, self->zst.msg); | |
| 481 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
482 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
483 } |
|
10467
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
484 |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
485 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
|
486 { |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
487 /* 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
|
488 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
|
489 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
|
490 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
|
491 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
|
492 |
|
10571
4aff39175137
Cast added by Jack Jansen (for Mac port).
Guido van Rossum <guido@python.org>
parents:
10538
diff
changeset
|
493 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
|
494 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
|
495 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
|
496 } |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
497 |
| 6236 | 498 _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
|
499 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
500 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
501 |
| 5722 | 502 static char comp_flush__doc__[] = |
| 9657 | 503 "flush( [mode] ) -- Return a string containing any remaining compressed data.\n" |
| 504 "mode can be one of the constants Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH; the \n" | |
| 505 "default value used when mode is not specified is Z_FINISH.\n" | |
| 506 "If mode == Z_FINISH, the compressor object can no longer be used after\n" | |
| 507 "calling the flush() method. Otherwise, more data can still be compressed.\n" | |
| 5722 | 508 ; |
| 509 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
510 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
511 PyZlib_flush(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
512 { |
| 6042 | 513 int length=DEFAULTALLOC, err = Z_OK; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
514 PyObject *RetVal; |
| 9657 | 515 int flushmode = Z_FINISH; |
| 516 unsigned long start_total_out; | |
| 517 | |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
518 if (!PyArg_ParseTuple(args, "|i:flush", &flushmode)) |
| 9657 | 519 return NULL; |
| 520 | |
| 521 /* Flushing with Z_NO_FLUSH is a no-op, so there's no point in | |
| 522 doing any work at all; just return an empty string. */ | |
| 523 if (flushmode == Z_NO_FLUSH) | |
| 524 { | |
| 525 return PyString_FromStringAndSize(NULL, 0); | |
| 526 } | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
527 |
| 6042 | 528 self->zst.avail_in = 0; |
| 529 self->zst.next_in = Z_NULL; | |
| 530 if (!(RetVal = PyString_FromStringAndSize(NULL, length))) { | |
| 531 PyErr_SetString(PyExc_MemoryError, | |
| 532 "Can't allocate memory to compress data"); | |
| 533 return NULL; | |
| 534 } | |
| 9657 | 535 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
|
536 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6042 | 537 self->zst.avail_out = length; |
| 9657 | 538 |
| 539 /* When flushing the zstream, there's no input data. | |
| 540 If zst.avail_out == 0, that means that more output space is | |
| 541 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
|
542 while (1) { |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
543 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
|
544 |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
545 /* 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
|
546 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
|
547 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
|
548 |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
549 /* 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
|
550 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
|
551 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
|
552 |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
553 /* 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
|
554 again */ |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
555 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
|
556 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
|
557 "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
|
558 return NULL; |
| 6042 | 559 } |
|
10440
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
560 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
|
561 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
|
562 length = length << 1; |
|
9796
7ef5a1520ae5
fix bug in PyZlib_flush.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
9662
diff
changeset
|
563 } |
| 9657 | 564 |
|
10440
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
565 /* 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
|
566 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
|
567 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
|
568 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
|
569 if (err!=Z_OK && !(flushmode == Z_FINISH && err == Z_STREAM_END) ) |
| 9657 | 570 { |
| 6236 | 571 if (self->zst.msg == Z_NULL) |
| 9657 | 572 PyErr_Format(ZlibError, "Error %i while flushing", |
| 6236 | 573 err); |
| 574 else | |
| 9657 | 575 PyErr_Format(ZlibError, "Error %i while flushing: %.200s", |
| 6236 | 576 err, self->zst.msg); |
| 577 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
578 return NULL; |
|
9796
7ef5a1520ae5
fix bug in PyZlib_flush.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
9662
diff
changeset
|
579 } |
|
10440
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
580 |
|
b94144de2f32
Fixed the flush() method of compression objects; the test for
Andrew M. Kuchling <amk@amk.ca>
parents:
10028
diff
changeset
|
581 /* 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
|
582 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
|
583 |
| 9657 | 584 if (flushmode == Z_FINISH) { |
| 585 err=deflateEnd(&(self->zst)); | |
| 586 if (err!=Z_OK) { | |
| 6236 | 587 if (self->zst.msg == Z_NULL) |
| 9657 | 588 PyErr_Format(ZlibError, "Error %i from deflateEnd()", |
| 589 err); | |
| 6236 | 590 else |
| 9657 | 591 PyErr_Format(ZlibError, |
| 592 "Error %i from deflateEnd(): %.200s", | |
| 593 err, self->zst.msg); | |
| 6236 | 594 Py_DECREF(RetVal); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
595 return NULL; |
| 9657 | 596 } |
| 6042 | 597 } |
| 9657 | 598 _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
|
599 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
600 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
601 |
| 5722 | 602 static char decomp_flush__doc__[] = |
| 603 "flush() -- Return a string containing any remaining decompressed data. " | |
| 604 "The decompressor object can no longer be used after this call." | |
| 605 ; | |
| 606 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
607 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
608 PyZlib_unflush(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
609 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
610 int length=0, err; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
611 PyObject *RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
612 |
|
13816
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
613 if (!PyArg_ParseTuple(args, "")) |
| 6007 | 614 return NULL; |
| 6042 | 615 if (!(RetVal = PyString_FromStringAndSize(NULL, DEFAULTALLOC))) |
| 616 { | |
| 617 PyErr_SetString(PyExc_MemoryError, | |
| 618 "Can't allocate memory to decompress data"); | |
| 619 return NULL; | |
| 620 } | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
621 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
|
622 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6007 | 623 length = self->zst.avail_out = DEFAULTALLOC; |
| 624 | |
|
10538
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
625 /* 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
|
626 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
|
627 destabilizing this function. --amk */ |
| 6007 | 628 err = Z_OK; |
|
10538
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
629 while ( err == Z_OK ) |
| 6007 | 630 { |
| 631 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
|
632 if ( ( err == Z_OK || err == Z_BUF_ERROR ) && self->zst.avail_out == 0) |
| 6007 | 633 { |
| 634 if (_PyString_Resize(&RetVal, length << 1) == -1) | |
| 635 { | |
| 636 PyErr_SetString(PyExc_MemoryError, | |
| 637 "Can't allocate memory to decompress data"); | |
| 638 return NULL; | |
| 639 } | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
640 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length; |
| 6007 | 641 self->zst.avail_out = length; |
| 642 length = length << 1; | |
|
10538
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
643 err = Z_OK; |
| 6007 | 644 } |
| 645 } | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
646 if (err!=Z_STREAM_END) |
| 6236 | 647 { |
| 648 if (self->zst.msg == Z_NULL) | |
| 649 PyErr_Format(ZlibError, "Error %i while decompressing", | |
| 650 err); | |
| 651 else | |
| 652 PyErr_Format(ZlibError, "Error %i while decompressing: %.200s", | |
| 653 err, self->zst.msg); | |
| 654 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
655 return NULL; |
| 6236 | 656 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
657 err=inflateEnd(&(self->zst)); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
658 if (err!=Z_OK) |
| 6236 | 659 { |
| 660 if (self->zst.msg == Z_NULL) | |
| 661 PyErr_Format(ZlibError, | |
| 662 "Error %i while flushing decompression object", | |
| 663 err); | |
| 664 else | |
| 665 PyErr_Format(ZlibError, | |
| 666 "Error %i while flushing decompression object: %.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 } |
| 6042 | 671 _PyString_Resize(&RetVal, |
| 672 (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
|
673 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
674 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
675 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
676 static PyMethodDef comp_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
677 { |
|
13816
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
678 {"compress", (binaryfunc)PyZlib_objcompress, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
679 METH_VARARGS, comp_compress__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
680 {"flush", (binaryfunc)PyZlib_flush, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
681 METH_VARARGS, comp_flush__doc__}, |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
682 {NULL, NULL} |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
683 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
684 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
685 static PyMethodDef Decomp_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
686 { |
|
13816
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
687 {"decompress", (binaryfunc)PyZlib_objdecompress, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
688 METH_VARARGS, decomp_decompress__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
689 {"flush", (binaryfunc)PyZlib_unflush, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
690 METH_VARARGS, decomp_flush__doc__}, |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
691 {NULL, NULL} |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
692 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
693 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
694 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
695 Comp_getattr(compobject *self, char *name) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
696 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
697 return Py_FindMethod(comp_methods, (PyObject *)self, name); |
|
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 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
700 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
701 Decomp_getattr(compobject *self, char *name) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
702 { |
|
10467
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
703 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
|
704 { |
|
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
705 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
|
706 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
|
707 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
708 return Py_FindMethod(Decomp_methods, (PyObject *)self, name); |
|
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 |
| 5722 | 711 static char adler32__doc__[] = |
| 712 "adler32(string) -- Compute an Adler-32 checksum of string, using " | |
| 713 "a default starting value, and returning an integer value.\n" | |
| 714 "adler32(string, value) -- Compute an Adler-32 checksum of string, using " | |
| 715 "the starting value provided, and returning an integer value\n" | |
| 716 ; | |
| 717 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
718 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
719 PyZlib_adler32(PyObject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
720 { |
| 6236 | 721 uLong adler32val=adler32(0L, Z_NULL, 0); |
| 722 Byte *buf; | |
| 723 int len; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
724 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11619
diff
changeset
|
725 if (!PyArg_ParseTuple(args, "s#|l:adler32", &buf, &len, &adler32val)) |
| 6236 | 726 { |
| 727 return NULL; | |
| 728 } | |
| 729 adler32val = adler32(adler32val, buf, len); | |
| 730 return PyInt_FromLong(adler32val); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
731 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
732 |
| 5722 | 733 static char crc32__doc__[] = |
| 734 "crc32(string) -- Compute a CRC-32 checksum of string, using " | |
| 735 "a default starting value, and returning an integer value.\n" | |
| 736 "crc32(string, value) -- Compute a CRC-32 checksum of string, using " | |
| 737 "the starting value provided, and returning an integer value.\n" | |
| 738 ; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
739 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
740 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
741 PyZlib_crc32(PyObject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
742 { |
| 6236 | 743 uLong crc32val=crc32(0L, Z_NULL, 0); |
| 744 Byte *buf; | |
| 745 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
|
746 if (!PyArg_ParseTuple(args, "s#|l:crc32", &buf, &len, &crc32val)) |
| 6236 | 747 { |
| 748 return NULL; | |
| 749 } | |
| 750 crc32val = crc32(crc32val, buf, len); | |
| 751 return PyInt_FromLong(crc32val); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
752 } |
|
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 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
755 static PyMethodDef zlib_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
756 { |
|
13816
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
757 {"adler32", (PyCFunction)PyZlib_adler32, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
758 METH_VARARGS, adler32__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
759 {"compress", (PyCFunction)PyZlib_compress, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
760 METH_VARARGS, compress__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
761 {"compressobj", (PyCFunction)PyZlib_compressobj, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
762 METH_VARARGS, compressobj__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
763 {"crc32", (PyCFunction)PyZlib_crc32, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
764 METH_VARARGS, crc32__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
765 {"decompress", (PyCFunction)PyZlib_decompress, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
766 METH_VARARGS, decompress__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
767 {"decompressobj", (PyCFunction)PyZlib_decompressobj, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
768 METH_VARARGS, decompressobj__doc__}, |
|
afbbe674d58a
Use METH_VARARGS instead of numeric constant 1
Andrew M. Kuchling <amk@amk.ca>
parents:
13651
diff
changeset
|
769 {NULL, NULL} |
|
5352
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 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
772 statichere PyTypeObject Comptype = { |
| 6911 | 773 PyObject_HEAD_INIT(0) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
774 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
775 "Compress", |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
776 sizeof(compobject), |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
777 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
778 (destructor)Comp_dealloc, /*tp_dealloc*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
779 0, /*tp_print*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
780 (getattrfunc)Comp_getattr, /*tp_getattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
781 0, /*tp_setattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
782 0, /*tp_compare*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
783 0, /*tp_repr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
784 0, /*tp_as_number*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
785 0, /*tp_as_sequence*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
786 0, /*tp_as_mapping*/ |
|
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 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
789 statichere PyTypeObject Decomptype = { |
| 6911 | 790 PyObject_HEAD_INIT(0) |
|
5352
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 "Decompress", |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
793 sizeof(compobject), |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
794 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
795 (destructor)Decomp_dealloc, /*tp_dealloc*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
796 0, /*tp_print*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
797 (getattrfunc)Decomp_getattr, /*tp_getattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
798 0, /*tp_setattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
799 0, /*tp_compare*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
800 0, /*tp_repr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
801 0, /*tp_as_number*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
802 0, /*tp_as_sequence*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
803 0, /*tp_as_mapping*/ |
|
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 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
806 /* 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
|
807 socketmodule.c */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
808 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
809 /* Convenience routine to export an integer value. |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
810 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
|
811 static void |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
812 insint(PyObject *d, char *name, int value) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
813 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
814 PyObject *v = PyInt_FromLong((long) value); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
815 if (v == NULL) { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
816 /* Don't bother reporting this error */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
817 PyErr_Clear(); |
|
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 else { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
820 PyDict_SetItemString(d, name, v); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
821 Py_DECREF(v); |
|
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 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
824 |
| 5722 | 825 static char zlib_module_documentation[]= |
| 826 "The functions in this module allow compression and decompression " | |
| 827 "using the zlib library, which is based on GNU zip. \n\n" | |
| 828 "adler32(string) -- Compute an Adler-32 checksum.\n" | |
| 829 "adler32(string, start) -- Compute an Adler-32 checksum using a given starting value.\n" | |
| 830 "compress(string) -- Compress a string.\n" | |
| 831 "compress(string, level) -- Compress a string with the given level of compression (1--9).\n" | |
| 832 "compressobj([level]) -- Return a compressor object.\n" | |
| 833 "crc32(string) -- Compute a CRC-32 checksum.\n" | |
| 834 "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
|
835 "decompress(string,[wbits],[bufsize]) -- Decompresses a compressed string.\n" |
| 5722 | 836 "decompressobj([wbits]) -- Return a decompressor object (wbits=window buffer size).\n\n" |
| 837 "Compressor objects support compress() and flush() methods; decompressor \n" | |
| 838 "objects support decompress() and flush()." | |
| 839 ; | |
| 840 | |
|
9588
38023a425e48
Add DL_EXPORT() to all modules that could possibly be used
Guido van Rossum <guido@python.org>
parents:
8636
diff
changeset
|
841 DL_EXPORT(void) |
|
13651
8a063423e0b7
Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents:
13496
diff
changeset
|
842 PyInit_zlib(void) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
843 { |
| 6236 | 844 PyObject *m, *d, *ver; |
| 6911 | 845 Comptype.ob_type = &PyType_Type; |
| 846 Decomptype.ob_type = &PyType_Type; | |
| 5722 | 847 m = Py_InitModule4("zlib", zlib_methods, |
| 848 zlib_module_documentation, | |
| 849 (PyObject*)NULL,PYTHON_API_VERSION); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
850 d = PyModule_GetDict(m); |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
6236
diff
changeset
|
851 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
|
852 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
|
853 PyDict_SetItemString(d, "error", ZlibError); |
| 6236 | 854 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
855 insint(d, "MAX_WBITS", MAX_WBITS); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
856 insint(d, "DEFLATED", DEFLATED); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
857 insint(d, "DEF_MEM_LEVEL", DEF_MEM_LEVEL); |
| 6236 | 858 insint(d, "Z_BEST_SPEED", Z_BEST_SPEED); |
| 859 insint(d, "Z_BEST_COMPRESSION", Z_BEST_COMPRESSION); | |
| 860 insint(d, "Z_DEFAULT_COMPRESSION", Z_DEFAULT_COMPRESSION); | |
| 861 insint(d, "Z_FILTERED", Z_FILTERED); | |
| 862 insint(d, "Z_HUFFMAN_ONLY", Z_HUFFMAN_ONLY); | |
| 863 insint(d, "Z_DEFAULT_STRATEGY", Z_DEFAULT_STRATEGY); | |
| 9657 | 864 |
| 865 insint(d, "Z_FINISH", Z_FINISH); | |
| 866 insint(d, "Z_NO_FLUSH", Z_NO_FLUSH); | |
| 867 insint(d, "Z_SYNC_FLUSH", Z_SYNC_FLUSH); | |
| 868 insint(d, "Z_FULL_FLUSH", Z_FULL_FLUSH); | |
| 869 | |
| 6236 | 870 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
|
871 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
|
872 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
|
873 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
|
874 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
875 } |
