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