Mercurial > cpython-lru_cache-weakref
annotate Modules/zlibmodule.c @ 6719:faebc1940432 legacy-trunk
Understand -Xlinker option.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 02 Dec 1997 20:38:11 +0000 |
| parents | 2c29b8982643 |
| children | 2c49c02cf747 |
| 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 */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
3 #include "Python.h" |
|
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
4 #include "zlib.h" |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 /* 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
|
7 #define DEFLATED 8 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 #if MAX_MEM_LEVEL >= 8 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 # define DEF_MEM_LEVEL 8 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 #else |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 # define DEF_MEM_LEVEL MAX_MEM_LEVEL |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 #endif |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 #define DEF_WBITS MAX_WBITS |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 /* The output buffer will be increased in chunks of ADDCHUNK bytes. */ |
| 6007 | 16 #define DEFAULTALLOC 16*1024 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 #define PyInit_zlib initzlib |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 staticforward PyTypeObject Comptype; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 staticforward PyTypeObject Decomptype; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 static PyObject *ZlibError; |
|
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 typedef struct |
|
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 PyObject_HEAD |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 z_stream zst; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 } compobject; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 |
| 5722 | 30 static char compressobj__doc__[] = |
| 31 "compressobj() -- Return a compressor object.\n" | |
| 32 "compressobj(level) -- Return a compressor object, using the given compression level.\n" | |
| 33 ; | |
| 34 | |
| 35 static char decompressobj__doc__[] = | |
| 36 "decompressobj() -- Return a decompressor object.\n" | |
| 37 "decompressobj(wbits) -- Return a decompressor object, setting the window buffer size to wbits.\n" | |
| 38 ; | |
| 39 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 static compobject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 newcompobject(type) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 PyTypeObject *type; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 self = PyObject_NEW(compobject, type); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 if (self == NULL) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 return self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 |
| 5722 | 51 static char compress__doc__[] = |
| 52 "compress(string) -- Compress string using the default compression level, " | |
| 53 "returning a string containing compressed data.\n" | |
| 54 "compress(string, level) -- Compress string, using the chosen compression " | |
| 55 "level (from 1 to 9). Return a string containing the compressed data.\n" | |
| 56 ; | |
| 57 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 PyZlib_compress(self, args) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 PyObject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 PyObject *args; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 PyObject *ReturnVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 Byte *input, *output; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 int length, level=Z_DEFAULT_COMPRESSION, err; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 z_stream zst; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 if (!PyArg_ParseTuple(args, "s#|i", &input, &length, &level)) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 return NULL; |
| 6236 | 70 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
|
71 output=(Byte*)malloc(zst.avail_out); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 if (output==NULL) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 "Can't allocate memory to compress data"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 } |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
78 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
|
79 zst.zfree=(free_func)Z_NULL; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 zst.next_out=(Byte *)output; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 zst.next_in =(Byte *)input; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 zst.avail_in=length; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 err=deflateInit(&zst, level); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 switch(err) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 case(Z_OK): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 case(Z_MEM_ERROR): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 "Out of memory while compressing data"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 free(output); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 case(Z_STREAM_ERROR): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 PyErr_SetString(ZlibError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 "Bad compression level"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 free(output); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 default: |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 { |
| 6236 | 102 if (zst.msg == Z_NULL) |
| 103 PyErr_Format(ZlibError, "Error %i while compressing data", | |
| 104 err); | |
| 105 else | |
| 106 PyErr_Format(ZlibError, "Error %i while compressing data: %.200s", | |
| 107 err, zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 deflateEnd(&zst); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
109 free(output); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
111 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
112 break; |
|
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 err=deflate(&zst, Z_FINISH); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 switch(err) |
| 6236 | 117 { |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
118 case(Z_STREAM_END): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
119 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
120 /* Are there other errors to be trapped here? */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
121 default: |
| 6236 | 122 { |
| 123 if (zst.msg == Z_NULL) | |
| 124 PyErr_Format(ZlibError, "Error %i while compressing data", | |
| 125 err); | |
| 126 else | |
| 127 PyErr_Format(ZlibError, "Error %i while compressing data: %.200s", | |
| 128 err, zst.msg); | |
| 129 deflateEnd(&zst); | |
| 130 free(output); | |
| 131 return NULL; | |
| 132 } | |
| 133 } | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
134 err=deflateEnd(&zst); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
135 if (err!=Z_OK) |
| 6236 | 136 { |
| 137 if (zst.msg == Z_NULL) | |
| 138 PyErr_Format(ZlibError, "Error %i while finishing compression", | |
| 139 err); | |
| 140 else | |
| 141 PyErr_Format(ZlibError, | |
| 142 "Error %i while finishing compression: %.200s", | |
| 143 err, zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 free(output); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
145 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
146 } |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
147 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
|
148 free(output); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
149 return ReturnVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
151 |
| 5722 | 152 static char decompress__doc__[] = |
| 6007 | 153 "decompress(string) -- Decompress the data in string, returning a string containing the decompressed data.\n" |
| 154 "decompress(string, wbits) -- Decompress the data in string with a window buffer size of wbits.\n" | |
| 155 "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 | 156 ; |
| 157 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
158 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
159 PyZlib_decompress(self, args) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
160 PyObject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
161 PyObject *args; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
162 { |
| 6007 | 163 PyObject *result_str; |
| 164 Byte *input; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
165 int length, err; |
| 6007 | 166 int wsize=DEF_WBITS, r_strlen=DEFAULTALLOC; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
167 z_stream zst; |
| 6007 | 168 if (!PyArg_ParseTuple(args, "s#|ii", &input, &length, &wsize, &r_strlen)) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
169 return NULL; |
| 6236 | 170 |
| 171 if (r_strlen <= 0) | |
| 172 r_strlen = 1; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
173 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
174 zst.avail_in=length; |
| 6007 | 175 zst.avail_out=r_strlen; |
| 176 if (!(result_str = PyString_FromStringAndSize(NULL, r_strlen))) | |
| 177 { | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
178 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
179 "Can't allocate memory to decompress data"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
180 return NULL; |
| 6007 | 181 } |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
182 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
|
183 zst.zfree=(free_func)Z_NULL; |
| 6007 | 184 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
|
185 zst.next_in =(Byte *)input; |
| 6007 | 186 err=inflateInit2(&zst, wsize); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
187 switch(err) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
188 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 case(Z_OK): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
190 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
191 case(Z_MEM_ERROR): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
192 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
193 "Out of memory while decompressing data"); |
| 6236 | 194 Py_DECREF(result_str); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
195 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
196 default: |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 { |
| 6236 | 198 if (zst.msg == Z_NULL) |
| 199 PyErr_Format(ZlibError, "Error %i preparing to decompress data", | |
| 200 err); | |
| 201 else | |
| 202 PyErr_Format(ZlibError, | |
| 203 "Error %i while preparing to decompress data: %.200s", | |
| 204 err, zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
205 inflateEnd(&zst); |
| 6236 | 206 Py_DECREF(result_str); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
207 return NULL; |
|
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 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
210 do |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
211 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
212 err=inflate(&zst, Z_FINISH); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
213 switch(err) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
214 { |
| 6007 | 215 case(Z_STREAM_END): |
| 216 break; | |
|
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); |
| 6236 | 224 Py_DECREF(result_str); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
225 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
226 } |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
227 zst.next_out = (unsigned char *)PyString_AsString(result_str) + r_strlen; |
| 6007 | 228 zst.avail_out=r_strlen; |
| 229 r_strlen = r_strlen << 1; | |
| 230 break; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
231 default: |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
232 { |
| 6236 | 233 if (zst.msg == Z_NULL) |
| 234 PyErr_Format(ZlibError, "Error %i while decompressing data", | |
| 235 err); | |
| 236 else | |
| 237 PyErr_Format(ZlibError, | |
| 238 "Error %i while decompressing data: %.200s", | |
| 239 err, zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
240 inflateEnd(&zst); |
| 6236 | 241 Py_DECREF(result_str); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
242 return NULL; |
|
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 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
245 } while(err!=Z_STREAM_END); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
247 err=inflateEnd(&zst); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
248 if (err!=Z_OK) |
| 6236 | 249 { |
| 250 if (zst.msg == Z_NULL) | |
| 251 PyErr_Format(ZlibError, | |
| 252 "Error %i while finishing data decompression", | |
| 253 err); | |
| 254 else | |
| 255 PyErr_Format(ZlibError, | |
| 256 "Error %i while finishing data decompression: %.200s", | |
| 257 err, zst.msg); | |
| 258 Py_DECREF(result_str); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
259 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
260 } |
| 6007 | 261 _PyString_Resize(&result_str, zst.total_out); |
| 262 return result_str; | |
|
5352
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 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
265 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
266 PyZlib_compressobj(selfptr, args) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
267 PyObject *selfptr; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
268 PyObject *args; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
269 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
270 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
271 int level=Z_DEFAULT_COMPRESSION, method=DEFLATED; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
272 int wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=0, err; |
| 6007 | 273 |
| 274 if (!PyArg_ParseTuple(args, "|iiiii", &level, &method, &wbits, | |
| 275 &memLevel, &strategy)) | |
| 276 return NULL; | |
| 277 | |
| 6236 | 278 self = newcompobject(&Comptype); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
279 if (self==NULL) return(NULL); |
| 6236 | 280 self->zst.zalloc = (alloc_func)NULL; |
| 281 self->zst.zfree = (free_func)Z_NULL; | |
| 282 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
|
283 switch(err) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
284 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 case (Z_OK): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
286 return (PyObject*)self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
287 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
288 case (Z_MEM_ERROR): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
289 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
290 "Can't allocate memory for compression object"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
291 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
292 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
293 case(Z_STREAM_ERROR): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
294 PyErr_SetString(PyExc_ValueError, |
| 6236 | 295 "Invalid initialization option"); |
|
5352
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 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
298 default: |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
299 { |
| 6236 | 300 if (self->zst.msg == Z_NULL) |
| 301 PyErr_Format(ZlibError, | |
| 302 "Error %i while creating compression object", | |
| 303 err); | |
| 304 else | |
| 305 PyErr_Format(ZlibError, | |
| 306 "Error %i while creating compression object: %.200s", | |
| 307 err, self->zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
308 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
309 break; |
|
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 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
312 } |
|
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 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
315 PyZlib_decompressobj(selfptr, args) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
316 PyObject *selfptr; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
317 PyObject *args; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
318 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
319 int wbits=DEF_WBITS, err; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
320 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
321 if (!PyArg_ParseTuple(args, "|i", &wbits)) |
|
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 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
324 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
325 self=newcompobject(&Decomptype); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
326 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
|
327 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
|
328 self->zst.zfree=(free_func)Z_NULL; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
329 err=inflateInit2(&self->zst, wbits); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
330 switch(err) |
| 6236 | 331 { |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
332 case (Z_OK): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
333 return (PyObject*)self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
334 break; |
| 6236 | 335 case(Z_STREAM_ERROR): |
| 336 PyErr_SetString(PyExc_ValueError, | |
| 337 "Invalid initialization option"); | |
| 338 return NULL; | |
| 339 break; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
340 case (Z_MEM_ERROR): |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
341 PyErr_SetString(PyExc_MemoryError, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
342 "Can't allocate memory for decompression object"); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
343 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
344 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
345 default: |
| 6236 | 346 { |
| 347 if (self->zst.msg == Z_NULL) | |
| 348 PyErr_Format(ZlibError, | |
| 349 "Error %i while creating decompression object", | |
| 350 err); | |
| 351 else | |
| 352 PyErr_Format(ZlibError, | |
| 353 "Error %i while creating decompression object: %.200s", | |
| 354 err, self->zst.msg); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
355 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
356 break; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
357 } |
| 6236 | 358 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
359 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
360 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
361 static void |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
362 Comp_dealloc(self) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
363 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
364 { |
| 6236 | 365 deflateEnd(&self->zst); |
| 366 PyMem_DEL(self); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
368 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
369 static void |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
370 Decomp_dealloc(self) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
371 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
372 { |
| 6236 | 373 inflateEnd(&self->zst); |
| 374 PyMem_DEL(self); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
375 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
376 |
| 5722 | 377 static char comp_compress__doc__[] = |
| 378 "compress(data) -- Return a string containing a compressed version of the data.\n\n" | |
| 379 "After calling this function, some of the input data may still\n" | |
| 380 "be stored in internal buffers for later processing.\n" | |
| 381 "Call the flush() method to clear these buffers." | |
| 382 ; | |
| 383 | |
| 384 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
385 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
386 PyZlib_objcompress(self, args) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
387 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
388 PyObject *args; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
389 { |
| 6042 | 390 int err = Z_OK, inplen; |
| 391 int length = DEFAULTALLOC; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
392 PyObject *RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
393 Byte *input; |
| 6236 | 394 unsigned long start_total_out; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
395 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
396 if (!PyArg_ParseTuple(args, "s#", &input, &inplen)) |
| 6042 | 397 return NULL; |
| 6236 | 398 self->zst.avail_in = inplen; |
| 399 self->zst.next_in = input; | |
| 6042 | 400 if (!(RetVal = PyString_FromStringAndSize(NULL, length))) { |
| 401 PyErr_SetString(PyExc_MemoryError, | |
| 402 "Can't allocate memory to compress data"); | |
| 403 return NULL; | |
| 404 } | |
| 6236 | 405 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
|
406 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6042 | 407 self->zst.avail_out = length; |
| 408 while (self->zst.avail_in != 0 && err == Z_OK) | |
| 409 { | |
| 410 err = deflate(&(self->zst), Z_NO_FLUSH); | |
| 411 if (self->zst.avail_out <= 0) { | |
| 412 if (_PyString_Resize(&RetVal, length << 1) == -1) { | |
| 413 PyErr_SetString(PyExc_MemoryError, | |
| 414 "Can't allocate memory to compress data"); | |
| 6236 | 415 Py_DECREF(RetVal); |
| 6042 | 416 return NULL; |
| 417 } | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
418 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length; |
| 6042 | 419 self->zst.avail_out = length; |
| 420 length = length << 1; | |
| 421 } | |
| 422 } | |
| 423 if (err != Z_OK) | |
| 6236 | 424 { |
| 425 if (self->zst.msg == Z_NULL) | |
| 426 PyErr_Format(ZlibError, "Error %i while compressing", | |
| 427 err); | |
| 428 else | |
| 429 PyErr_Format(ZlibError, "Error %i while compressing: %.200s", | |
| 430 err, self->zst.msg); | |
| 431 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
432 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
433 } |
| 6236 | 434 _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
|
435 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
436 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
437 |
| 5722 | 438 static char decomp_decompress__doc__[] = |
| 439 "decompress(data) -- Return a string containing the decompressed version of the data.\n\n" | |
| 440 "After calling this function, some of the input data may still\n" | |
| 441 "be stored in internal buffers for later processing.\n" | |
| 442 "Call the flush() method to clear these buffers." | |
| 443 ; | |
| 444 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
445 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
446 PyZlib_objdecompress(self, args) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
447 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
448 PyObject *args; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
449 { |
| 6007 | 450 int length, err, inplen; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
451 PyObject *RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
452 Byte *input; |
| 6236 | 453 unsigned long start_total_out; |
| 454 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
455 if (!PyArg_ParseTuple(args, "s#", &input, &inplen)) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
456 return NULL; |
| 6236 | 457 start_total_out = self->zst.total_out; |
| 6007 | 458 RetVal = PyString_FromStringAndSize(NULL, DEFAULTALLOC); |
| 6236 | 459 self->zst.avail_in = inplen; |
| 460 self->zst.next_in = input; | |
| 6007 | 461 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
|
462 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6007 | 463 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
|
464 |
| 6007 | 465 while (self->zst.avail_in != 0 && err == Z_OK) |
| 466 { | |
| 467 err = inflate(&(self->zst), Z_NO_FLUSH); | |
| 468 if (err == Z_OK && self->zst.avail_out <= 0) | |
| 469 { | |
| 470 if (_PyString_Resize(&RetVal, length << 1) == -1) | |
| 471 { | |
| 472 PyErr_SetString(PyExc_MemoryError, | |
| 473 "Can't allocate memory to compress data"); | |
| 6236 | 474 Py_DECREF(RetVal); |
| 6007 | 475 return NULL; |
| 476 } | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
477 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length; |
| 6007 | 478 self->zst.avail_out = length; |
| 479 length = length << 1; | |
| 480 } | |
| 481 } | |
| 482 | |
| 6236 | 483 if (err != Z_OK && err != Z_STREAM_END) |
| 484 { | |
| 485 if (self->zst.msg == Z_NULL) | |
| 486 PyErr_Format(ZlibError, "Error %i while decompressing", | |
| 487 err); | |
| 488 else | |
| 489 PyErr_Format(ZlibError, "Error %i while decompressing: %.200s", | |
| 490 err, self->zst.msg); | |
| 491 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
492 return NULL; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
493 } |
| 6236 | 494 _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
|
495 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
496 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
497 |
| 5722 | 498 static char comp_flush__doc__[] = |
| 499 "flush() -- Return a string containing any remaining compressed data. " | |
| 500 "The compressor object can no longer be used after this call." | |
| 501 ; | |
| 502 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
503 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
504 PyZlib_flush(self, args) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
505 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
506 PyObject *args; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
507 { |
| 6042 | 508 int length=DEFAULTALLOC, err = Z_OK; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
509 PyObject *RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
510 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
511 if (!PyArg_NoArgs(args)) |
| 6042 | 512 return NULL; |
| 513 self->zst.avail_in = 0; | |
| 514 self->zst.next_in = Z_NULL; | |
| 515 if (!(RetVal = PyString_FromStringAndSize(NULL, length))) { | |
| 516 PyErr_SetString(PyExc_MemoryError, | |
| 517 "Can't allocate memory to compress data"); | |
| 518 return NULL; | |
| 519 } | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
520 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6042 | 521 self->zst.avail_out = length; |
| 522 while (err == Z_OK) | |
| 523 { | |
| 524 err = deflate(&(self->zst), Z_FINISH); | |
| 525 if (self->zst.avail_out <= 0) { | |
| 526 if (_PyString_Resize(&RetVal, length << 1) == -1) { | |
| 527 PyErr_SetString(PyExc_MemoryError, | |
| 528 "Can't allocate memory to compress data"); | |
| 6236 | 529 Py_DECREF(RetVal); |
| 6042 | 530 return NULL; |
| 531 } | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
532 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length; |
| 6042 | 533 self->zst.avail_out = length; |
| 534 length = length << 1; | |
| 535 } | |
| 536 } | |
| 537 if (err!=Z_STREAM_END) { | |
| 6236 | 538 if (self->zst.msg == Z_NULL) |
| 539 PyErr_Format(ZlibError, "Error %i while compressing", | |
| 540 err); | |
| 541 else | |
| 542 PyErr_Format(ZlibError, "Error %i while compressing: %.200s", | |
| 543 err, self->zst.msg); | |
| 544 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
545 return NULL; |
| 6042 | 546 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
547 err=deflateEnd(&(self->zst)); |
| 6042 | 548 if (err!=Z_OK) { |
| 6236 | 549 if (self->zst.msg == Z_NULL) |
| 550 PyErr_Format(ZlibError, "Error %i while flushing compression object", | |
| 551 err); | |
| 552 else | |
| 553 PyErr_Format(ZlibError, | |
| 554 "Error %i while flushing compression object: %.200s", | |
| 555 err, self->zst.msg); | |
| 556 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
557 return NULL; |
| 6042 | 558 } |
| 559 _PyString_Resize(&RetVal, | |
| 560 (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
|
561 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
562 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
563 |
| 5722 | 564 static char decomp_flush__doc__[] = |
| 565 "flush() -- Return a string containing any remaining decompressed data. " | |
| 566 "The decompressor object can no longer be used after this call." | |
| 567 ; | |
| 568 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
569 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
570 PyZlib_unflush(self, args) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
571 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
572 PyObject *args; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
573 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
574 int length=0, err; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
575 PyObject *RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
576 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
577 if (!PyArg_NoArgs(args)) |
| 6007 | 578 return NULL; |
| 6042 | 579 if (!(RetVal = PyString_FromStringAndSize(NULL, DEFAULTALLOC))) |
| 580 { | |
| 581 PyErr_SetString(PyExc_MemoryError, | |
| 582 "Can't allocate memory to decompress data"); | |
| 583 return NULL; | |
| 584 } | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
585 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
|
586 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal); |
| 6007 | 587 length = self->zst.avail_out = DEFAULTALLOC; |
| 588 | |
| 589 err = Z_OK; | |
| 590 while (err == Z_OK) | |
| 591 { | |
| 592 err = inflate(&(self->zst), Z_FINISH); | |
| 593 if (err == Z_OK && self->zst.avail_out == 0) | |
| 594 { | |
| 595 if (_PyString_Resize(&RetVal, length << 1) == -1) | |
| 596 { | |
| 597 PyErr_SetString(PyExc_MemoryError, | |
| 598 "Can't allocate memory to decompress data"); | |
| 6236 | 599 Py_DECREF(RetVal); |
| 6007 | 600 return NULL; |
| 601 } | |
|
6094
a22fca7a5c5a
Casts by Jack to shut up the Mac compiler.
Guido van Rossum <guido@python.org>
parents:
6042
diff
changeset
|
602 self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length; |
| 6007 | 603 self->zst.avail_out = length; |
| 604 length = length << 1; | |
| 605 } | |
| 606 } | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
607 if (err!=Z_STREAM_END) |
| 6236 | 608 { |
| 609 if (self->zst.msg == Z_NULL) | |
| 610 PyErr_Format(ZlibError, "Error %i while decompressing", | |
| 611 err); | |
| 612 else | |
| 613 PyErr_Format(ZlibError, "Error %i while decompressing: %.200s", | |
| 614 err, self->zst.msg); | |
| 615 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
616 return NULL; |
| 6236 | 617 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
618 err=inflateEnd(&(self->zst)); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
619 if (err!=Z_OK) |
| 6236 | 620 { |
| 621 if (self->zst.msg == Z_NULL) | |
| 622 PyErr_Format(ZlibError, | |
| 623 "Error %i while flushing decompression object", | |
| 624 err); | |
| 625 else | |
| 626 PyErr_Format(ZlibError, | |
| 627 "Error %i while flushing decompression object: %.200s", | |
| 628 err, self->zst.msg); | |
| 629 Py_DECREF(RetVal); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
630 return NULL; |
| 6236 | 631 } |
| 6042 | 632 _PyString_Resize(&RetVal, |
| 633 (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
|
634 return RetVal; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
635 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
636 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
637 static PyMethodDef comp_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
638 { |
|
6184
11249d439840
Added (binaryfunc) casts to function pointers in method lists.
Guido van Rossum <guido@python.org>
parents:
6094
diff
changeset
|
639 {"compress", (binaryfunc)PyZlib_objcompress, 1, comp_compress__doc__}, |
|
11249d439840
Added (binaryfunc) casts to function pointers in method lists.
Guido van Rossum <guido@python.org>
parents:
6094
diff
changeset
|
640 {"flush", (binaryfunc)PyZlib_flush, 0, comp_flush__doc__}, |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
641 {NULL, NULL} |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
642 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
643 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
644 static PyMethodDef Decomp_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
645 { |
|
6184
11249d439840
Added (binaryfunc) casts to function pointers in method lists.
Guido van Rossum <guido@python.org>
parents:
6094
diff
changeset
|
646 {"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
|
647 {"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
|
648 {NULL, NULL} |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
649 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
650 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
651 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
652 Comp_getattr(self, name) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
653 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
654 char *name; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
655 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
656 return Py_FindMethod(comp_methods, (PyObject *)self, name); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
657 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
658 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
659 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
660 Decomp_getattr(self, name) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
661 compobject *self; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
662 char *name; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
663 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
664 return Py_FindMethod(Decomp_methods, (PyObject *)self, name); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
665 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
666 |
| 5722 | 667 static char adler32__doc__[] = |
| 668 "adler32(string) -- Compute an Adler-32 checksum of string, using " | |
| 669 "a default starting value, and returning an integer value.\n" | |
| 670 "adler32(string, value) -- Compute an Adler-32 checksum of string, using " | |
| 671 "the starting value provided, and returning an integer value\n" | |
| 672 ; | |
| 673 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
674 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
675 PyZlib_adler32(self, args) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
676 PyObject *self, *args; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
677 { |
| 6236 | 678 uLong adler32val=adler32(0L, Z_NULL, 0); |
| 679 Byte *buf; | |
| 680 int len; | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
681 |
| 6236 | 682 if (!PyArg_ParseTuple(args, "s#|l", &buf, &len, &adler32val)) |
| 683 { | |
| 684 return NULL; | |
| 685 } | |
| 686 adler32val = adler32(adler32val, buf, len); | |
| 687 return PyInt_FromLong(adler32val); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
688 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
689 |
| 5722 | 690 static char crc32__doc__[] = |
| 691 "crc32(string) -- Compute a CRC-32 checksum of string, using " | |
| 692 "a default starting value, and returning an integer value.\n" | |
| 693 "crc32(string, value) -- Compute a CRC-32 checksum of string, using " | |
| 694 "the starting value provided, and returning an integer value.\n" | |
| 695 ; | |
|
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 static PyObject * |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
698 PyZlib_crc32(self, args) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
699 PyObject *self, *args; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
700 { |
| 6236 | 701 uLong crc32val=crc32(0L, Z_NULL, 0); |
| 702 Byte *buf; | |
| 703 int len; | |
| 704 if (!PyArg_ParseTuple(args, "s#|l", &buf, &len, &crc32val)) | |
| 705 { | |
| 706 return NULL; | |
| 707 } | |
| 708 crc32val = crc32(crc32val, buf, len); | |
| 709 return PyInt_FromLong(crc32val); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
710 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
711 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
712 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
713 static PyMethodDef zlib_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
714 { |
| 5722 | 715 {"adler32", (PyCFunction)PyZlib_adler32, 1, adler32__doc__}, |
| 716 {"compress", (PyCFunction)PyZlib_compress, 1, compress__doc__}, | |
| 717 {"compressobj", (PyCFunction)PyZlib_compressobj, 1, compressobj__doc__}, | |
| 718 {"crc32", (PyCFunction)PyZlib_crc32, 1, crc32__doc__}, | |
| 719 {"decompress", (PyCFunction)PyZlib_decompress, 1, decompress__doc__}, | |
| 720 {"decompressobj", (PyCFunction)PyZlib_decompressobj, 1, decompressobj__doc__}, | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
721 {NULL, NULL} |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
722 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
723 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
724 statichere PyTypeObject Comptype = { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
725 PyObject_HEAD_INIT(&PyType_Type) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
726 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
727 "Compress", |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
728 sizeof(compobject), |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
729 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
730 (destructor)Comp_dealloc, /*tp_dealloc*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
731 0, /*tp_print*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
732 (getattrfunc)Comp_getattr, /*tp_getattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
733 0, /*tp_setattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
734 0, /*tp_compare*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
735 0, /*tp_repr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
736 0, /*tp_as_number*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
737 0, /*tp_as_sequence*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
738 0, /*tp_as_mapping*/ |
|
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 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
741 statichere PyTypeObject Decomptype = { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
742 PyObject_HEAD_INIT(&PyType_Type) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
743 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
744 "Decompress", |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
745 sizeof(compobject), |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
746 0, |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
747 (destructor)Decomp_dealloc, /*tp_dealloc*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
748 0, /*tp_print*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
749 (getattrfunc)Decomp_getattr, /*tp_getattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
750 0, /*tp_setattr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
751 0, /*tp_compare*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
752 0, /*tp_repr*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
753 0, /*tp_as_number*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
754 0, /*tp_as_sequence*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
755 0, /*tp_as_mapping*/ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
756 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
757 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
758 /* 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
|
759 socketmodule.c */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
760 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
761 /* Convenience routine to export an integer value. |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
762 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
|
763 static void |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
764 insint(d, name, value) |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
765 PyObject *d; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
766 char *name; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
767 int value; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
768 { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
769 PyObject *v = PyInt_FromLong((long) value); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
770 if (v == NULL) { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
771 /* Don't bother reporting this error */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
772 PyErr_Clear(); |
|
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 else { |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
775 PyDict_SetItemString(d, name, v); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
776 Py_DECREF(v); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
777 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
778 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
779 |
| 5722 | 780 static char zlib_module_documentation[]= |
| 781 "The functions in this module allow compression and decompression " | |
| 782 "using the zlib library, which is based on GNU zip. \n\n" | |
| 783 "adler32(string) -- Compute an Adler-32 checksum.\n" | |
| 784 "adler32(string, start) -- Compute an Adler-32 checksum using a given starting value.\n" | |
| 785 "compress(string) -- Compress a string.\n" | |
| 786 "compress(string, level) -- Compress a string with the given level of compression (1--9).\n" | |
| 787 "compressobj([level]) -- Return a compressor object.\n" | |
| 788 "crc32(string) -- Compute a CRC-32 checksum.\n" | |
| 789 "crc32(string, start) -- Compute a CRC-32 checksum using a given starting value.\n" | |
| 6007 | 790 "decompress(string,[wbites],[bufsize]) -- Decompresses a compressed string.\n" |
| 5722 | 791 "decompressobj([wbits]) -- Return a decompressor object (wbits=window buffer size).\n\n" |
| 792 "Compressor objects support compress() and flush() methods; decompressor \n" | |
| 793 "objects support decompress() and flush()." | |
| 794 ; | |
| 795 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
796 void |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
797 PyInit_zlib() |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
798 { |
| 6236 | 799 PyObject *m, *d, *ver; |
| 5722 | 800 m = Py_InitModule4("zlib", zlib_methods, |
| 801 zlib_module_documentation, | |
| 802 (PyObject*)NULL,PYTHON_API_VERSION); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
803 d = PyModule_GetDict(m); |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
6236
diff
changeset
|
804 ZlibError = PyErr_NewException("zlib.error", NULL, NULL); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
805 PyDict_SetItemString(d, "error", ZlibError); |
| 6236 | 806 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
807 insint(d, "MAX_WBITS", MAX_WBITS); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
808 insint(d, "DEFLATED", DEFLATED); |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
809 insint(d, "DEF_MEM_LEVEL", DEF_MEM_LEVEL); |
| 6236 | 810 insint(d, "Z_BEST_SPEED", Z_BEST_SPEED); |
| 811 insint(d, "Z_BEST_COMPRESSION", Z_BEST_COMPRESSION); | |
| 812 insint(d, "Z_DEFAULT_COMPRESSION", Z_DEFAULT_COMPRESSION); | |
| 813 insint(d, "Z_FILTERED", Z_FILTERED); | |
| 814 insint(d, "Z_HUFFMAN_ONLY", Z_HUFFMAN_ONLY); | |
| 815 insint(d, "Z_DEFAULT_STRATEGY", Z_DEFAULT_STRATEGY); | |
| 816 ver = PyString_FromString(ZLIB_VERSION); | |
| 817 PyDict_SetItemString(d, "ZLIB_VERSION", ver); | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
818 } |
