Commit 9714f99d authored by Jeremy Hylton's avatar Jeremy Hylton

Reformat!

Consistently indent 4 spaces.
Use whitespace around operators.
Put braces in the right places.
parent 3c28863e
......@@ -75,11 +75,11 @@ static PyObject *ZlibError;
typedef struct
{
PyObject_HEAD
z_stream zst;
PyObject *unused_data;
PyObject *unconsumed_tail;
int is_initialised;
PyObject_HEAD
z_stream zst;
PyObject *unused_data;
PyObject *unconsumed_tail;
int is_initialised;
} compobject;
static char compressobj__doc__[] =
......@@ -95,22 +95,22 @@ static char decompressobj__doc__[] =
static compobject *
newcompobject(PyTypeObject *type)
{
compobject *self;
self = PyObject_New(compobject, type);
if (self == NULL)
return NULL;
self->is_initialised = 0;
self->unused_data = PyString_FromString("");
if (self->unused_data == NULL) {
Py_DECREF(self);
return NULL;
}
self->unconsumed_tail = PyString_FromString("");
if (self->unconsumed_tail == NULL) {
Py_DECREF(self);
return NULL;
}
return self;
compobject *self;
self = PyObject_New(compobject, type);
if (self == NULL)
return NULL;
self->is_initialised = 0;
self->unused_data = PyString_FromString("");
if (self->unused_data == NULL) {
Py_DECREF(self);
return NULL;
}
self->unconsumed_tail = PyString_FromString("");
if (self->unconsumed_tail == NULL) {
Py_DECREF(self);
return NULL;
}
return self;
}
static char compress__doc__[] =
......@@ -123,62 +123,61 @@ static char compress__doc__[] =
static PyObject *
PyZlib_compress(PyObject *self, PyObject *args)
{
PyObject *ReturnVal = NULL;
Byte *input, *output;
int length, level=Z_DEFAULT_COMPRESSION, err;
z_stream zst;
int return_error;
PyObject * inputString;
PyObject *ReturnVal = NULL;
Byte *input, *output;
int length, level=Z_DEFAULT_COMPRESSION, err;
z_stream zst;
int return_error;
PyObject * inputString;
/* require Python string object, optional 'level' arg */
if (!PyArg_ParseTuple(args, "S|i:compress", &inputString, &level))
return NULL;
/* require Python string object, optional 'level' arg */
if (!PyArg_ParseTuple(args, "S|i:compress", &inputString, &level))
return NULL;
/* now get a pointer to the internal string */
if (PyString_AsStringAndSize(inputString, (char**)&input, &length) == -1)
return NULL;
/* now get a pointer to the internal string */
if (PyString_AsStringAndSize(inputString, (char**)&input, &length) == -1)
return NULL;
zst.avail_out = length + length/1000 + 12 + 1;
zst.avail_out = length + length/1000 + 12 + 1;
output=(Byte*)malloc(zst.avail_out);
if (output==NULL)
output=(Byte*)malloc(zst.avail_out);
if (output==NULL)
{
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
free(output);
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
free(output);
return NULL;
return NULL;
}
/* Past the point of no return. From here on out, we need to make sure
we clean up mallocs & INCREFs. */
/* Past the point of no return. From here on out, we need to make sure
we clean up mallocs & INCREFs. */
Py_INCREF(inputString); /* increment so that we hold ref */
Py_INCREF(inputString); /* increment so that we hold ref */
zst.zalloc=(alloc_func)NULL;
zst.zfree=(free_func)Z_NULL;
zst.next_out=(Byte *)output;
zst.next_in =(Byte *)input;
zst.avail_in=length;
err=deflateInit(&zst, level);
zst.zalloc=(alloc_func)NULL;
zst.zfree=(free_func)Z_NULL;
zst.next_out=(Byte *)output;
zst.next_in =(Byte *)input;
zst.avail_in=length;
err=deflateInit(&zst, level);
return_error = 0;
switch(err)
return_error = 0;
switch(err)
{
case(Z_OK):
break;
break;
case(Z_MEM_ERROR):
PyErr_SetString(PyExc_MemoryError,
"Out of memory while compressing data");
return_error = 1;
break;
PyErr_SetString(PyExc_MemoryError,
"Out of memory while compressing data");
return_error = 1;
break;
case(Z_STREAM_ERROR):
PyErr_SetString(ZlibError,
"Bad compression level");
return_error = 1;
break;
default:
{
PyErr_SetString(ZlibError,
"Bad compression level");
return_error = 1;
break;
default: {
if (zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while compressing data",
err);
......@@ -187,57 +186,55 @@ PyZlib_compress(PyObject *self, PyObject *args)
err, zst.msg);
deflateEnd(&zst);
return_error = 1;
}
}
}
if (!return_error) {
Py_BEGIN_ALLOW_THREADS
err=deflate(&zst, Z_FINISH);
Py_END_ALLOW_THREADS
if (!return_error) {
Py_BEGIN_ALLOW_THREADS;
err=deflate(&zst, Z_FINISH);
Py_END_ALLOW_THREADS;
switch(err)
{
case(Z_STREAM_END):
break;
/* Are there other errors to be trapped here? */
default:
switch(err)
{
if (zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while compressing data",
err);
else
PyErr_Format(ZlibError, "Error %i while compressing data: %.200s",
err, zst.msg);
case(Z_STREAM_END):
break;
/* Are there other errors to be trapped here? */
default: {
if (zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while compressing data",
err);
else
PyErr_Format(ZlibError, "Error %i while compressing data: %.200s",
err, zst.msg);
deflateEnd(&zst);
deflateEnd(&zst);
return_error = 1;
return_error = 1;
}
}
}
if (!return_error) {
err=deflateEnd(&zst);
if (err == Z_OK)
ReturnVal = PyString_FromStringAndSize((char *)output, zst.total_out);
else {
{
if (zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while finishing compression",
err);
else
PyErr_Format(ZlibError,
"Error %i while finishing compression: %.200s",
err, zst.msg);
if (!return_error) {
err=deflateEnd(&zst);
if (err == Z_OK)
ReturnVal = PyString_FromStringAndSize((char *)output,
zst.total_out);
else {
if (zst.msg == Z_NULL)
PyErr_Format(ZlibError,
"Error %i while finishing compression",
err);
else
PyErr_Format(ZlibError,
"Error %i while finishing compression: %.200s",
err, zst.msg);
}
}
}
}
}
free(output);
Py_DECREF(inputString);
free(output);
Py_DECREF(inputString);
return ReturnVal;
return ReturnVal;
}
static char decompress__doc__[] =
......@@ -249,54 +246,52 @@ static char decompress__doc__[] =
static PyObject *
PyZlib_decompress(PyObject *self, PyObject *args)
{
PyObject *result_str;
Byte *input;
int length, err;
int wsize=DEF_WBITS, r_strlen=DEFAULTALLOC;
z_stream zst;
int return_error;
PyObject * inputString;
if (!PyArg_ParseTuple(args, "S|ii:decompress", &inputString, &wsize, &r_strlen))
return NULL;
if (PyString_AsStringAndSize(inputString, (char**)&input, &length) == -1)
return NULL;
if (r_strlen <= 0)
r_strlen = 1;
zst.avail_in=length;
zst.avail_out=r_strlen;
if (!(result_str = PyString_FromStringAndSize(NULL, r_strlen)))
{
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to decompress data");
return NULL;
}
PyObject *result_str;
Byte *input;
int length, err;
int wsize=DEF_WBITS, r_strlen=DEFAULTALLOC;
z_stream zst;
int return_error;
PyObject * inputString;
if (!PyArg_ParseTuple(args, "S|ii:decompress",
&inputString, &wsize, &r_strlen))
return NULL;
if (PyString_AsStringAndSize(inputString, (char**)&input, &length) == -1)
return NULL;
/* Past the point of no return. From here on out, we need to make sure
we clean up mallocs & INCREFs. */
if (r_strlen <= 0)
r_strlen = 1;
Py_INCREF(inputString); /* increment so that we hold ref */
zst.avail_in = length;
zst.avail_out = r_strlen;
zst.zalloc=(alloc_func)NULL;
zst.zfree=(free_func)Z_NULL;
zst.next_out=(Byte *)PyString_AsString(result_str);
zst.next_in =(Byte *)input;
err=inflateInit2(&zst, wsize);
if (!(result_str = PyString_FromStringAndSize(NULL, r_strlen))) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to decompress data");
return NULL;
}
return_error = 0;
switch(err)
{
/* Past the point of no return. From here on out, we need to make sure
we clean up mallocs & INCREFs. */
Py_INCREF(inputString); /* increment so that we hold ref */
zst.zalloc = (alloc_func)NULL;
zst.zfree = (free_func)Z_NULL;
zst.next_out = (Byte *)PyString_AsString(result_str);
zst.next_in = (Byte *)input;
err = inflateInit2(&zst, wsize);
return_error = 0;
switch(err) {
case(Z_OK):
break;
break;
case(Z_MEM_ERROR):
PyErr_SetString(PyExc_MemoryError,
"Out of memory while decompressing data");
return_error = 1;
default:
{
PyErr_SetString(PyExc_MemoryError,
"Out of memory while decompressing data");
return_error = 1;
default: {
if (zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i preparing to decompress data",
err);
......@@ -307,21 +302,19 @@ PyZlib_decompress(PyObject *self, PyObject *args)
inflateEnd(&zst);
return_error = 1;
}
}
}
do
{
if (return_error)
break;
do {
if (return_error)
break;
Py_BEGIN_ALLOW_THREADS
err=inflate(&zst, Z_FINISH);
Py_END_ALLOW_THREADS
Py_BEGIN_ALLOW_THREADS
err=inflate(&zst, Z_FINISH);
Py_END_ALLOW_THREADS
switch(err)
{
case(Z_STREAM_END):
switch(err) {
case(Z_STREAM_END):
break;
case(Z_BUF_ERROR):
/*
......@@ -330,69 +323,66 @@ PyZlib_decompress(PyObject *self, PyObject *args)
* process the inflate call() due to an error in the data.
*/
if (zst.avail_out > 0)
{
PyErr_Format(ZlibError, "Error %i while decompressing data",
err);
inflateEnd(&zst);
return_error = 1;
break;
}
{
PyErr_Format(ZlibError, "Error %i while decompressing data",
err);
inflateEnd(&zst);
return_error = 1;
break;
}
/* fall through */
case(Z_OK):
/* need more memory */
if (_PyString_Resize(&result_str, r_strlen << 1) == -1)
{
PyErr_SetString(PyExc_MemoryError,
"Out of memory while decompressing data");
inflateEnd(&zst);
result_str = NULL;
return_error = 1;
}
zst.next_out = (unsigned char *)PyString_AsString(result_str) + r_strlen;
zst.avail_out=r_strlen;
if (_PyString_Resize(&result_str, r_strlen << 1) == -1) {
PyErr_SetString(PyExc_MemoryError,
"Out of memory while decompressing data");
inflateEnd(&zst);
result_str = NULL;
return_error = 1;
}
zst.next_out = (unsigned char *)PyString_AsString(result_str) \
+ r_strlen;
zst.avail_out = r_strlen;
r_strlen = r_strlen << 1;
break;
default:
{
if (zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while decompressing data",
err);
else
PyErr_Format(ZlibError,
"Error %i while decompressing data: %.200s",
err, zst.msg);
inflateEnd(&zst);
default: {
if (zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while decompressing data",
err);
else
PyErr_Format(ZlibError,
"Error %i while decompressing data: %.200s",
err, zst.msg);
inflateEnd(&zst);
return_error = 1;
}
}
} while(err!=Z_STREAM_END);
}
}
} while (err != Z_STREAM_END);
if (!return_error) {
err=inflateEnd(&zst);
if (err!=Z_OK)
{
if (zst.msg == Z_NULL)
PyErr_Format(ZlibError,
"Error %i while finishing data decompression",
err);
else
PyErr_Format(ZlibError,
"Error %i while finishing data decompression: %.200s",
err, zst.msg);
if (!return_error) {
err = inflateEnd(&zst);
if (err != Z_OK) {
if (zst.msg == Z_NULL)
PyErr_Format(ZlibError,
"Error %i while finishing data decompression",
err);
else
PyErr_Format(ZlibError,
"Error %i while finishing data decompression: %.200s",
err, zst.msg);
return_error = 1;
return NULL;
return_error = 1;
return NULL;
}
}
}
if (!return_error)
_PyString_Resize(&result_str, zst.total_out);
else {
Py_XDECREF(result_str); /* sets result_str == NULL, if not already */
}
Py_DECREF(inputString);
if (!return_error)
_PyString_Resize(&result_str, zst.total_out);
else
Py_XDECREF(result_str); /* sets result_str == NULL, if not already */
Py_DECREF(inputString);
return result_str;
return result_str;
}
static PyObject *
......@@ -526,84 +516,87 @@ static char comp_compress__doc__[] =
static PyObject *
PyZlib_objcompress(compobject *self, PyObject *args)
{
int err, inplen, length = DEFAULTALLOC;
PyObject *RetVal;
Byte *input;
unsigned long start_total_out;
int return_error;
PyObject * inputString;
int err, inplen, length = DEFAULTALLOC;
PyObject *RetVal;
Byte *input;
unsigned long start_total_out;
int return_error;
PyObject * inputString;
if (!PyArg_ParseTuple(args, "S:compress", &inputString))
return NULL;
if (PyString_AsStringAndSize(inputString, (char**)&input, &inplen) == -1)
return NULL;
if (!(RetVal = PyString_FromStringAndSize(NULL, length))) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return NULL;
}
if (!PyArg_ParseTuple(args, "S:compress", &inputString))
return NULL;
if (PyString_AsStringAndSize(inputString, (char**)&input, &inplen) == -1)
return NULL;
if (!(RetVal = PyString_FromStringAndSize(NULL, length))) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return NULL;
}
ENTER_ZLIB
ENTER_ZLIB
Py_INCREF(inputString);
Py_INCREF(inputString);
start_total_out = self->zst.total_out;
self->zst.avail_in = inplen;
self->zst.next_in = input;
self->zst.avail_out = length;
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal);
Py_BEGIN_ALLOW_THREADS
err = deflate(&(self->zst), Z_NO_FLUSH);
Py_END_ALLOW_THREADS
return_error = 0;
/* while Z_OK and the output buffer is full, there might be more output,
so extend the output buffer and try again */
while (err == Z_OK && self->zst.avail_out == 0) {
if (_PyString_Resize(&RetVal, length << 1) == -1) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return_error = 1;
break;
}
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length;
start_total_out = self->zst.total_out;
self->zst.avail_in = inplen;
self->zst.next_in = input;
self->zst.avail_out = length;
length = length << 1;
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal);
Py_BEGIN_ALLOW_THREADS
err = deflate(&(self->zst), Z_NO_FLUSH);
Py_END_ALLOW_THREADS
}
/* We will only get Z_BUF_ERROR if the output buffer was full but there
wasn't more output when we tried again, so it is not an error condition */
if (!return_error) {
if (err != Z_OK && err != Z_BUF_ERROR) {
if (self->zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while compressing",
err);
else
PyErr_Format(ZlibError, "Error %i while compressing: %.200s",
err, self->zst.msg);
return_error = 1;
Py_DECREF(RetVal);
return_error = 0;
/* while Z_OK and the output buffer is full, there might be more output,
so extend the output buffer and try again */
while (err == Z_OK && self->zst.avail_out == 0) {
if (_PyString_Resize(&RetVal, length << 1) == -1) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return_error = 1;
break;
}
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) \
+ length;
self->zst.avail_out = length;
length = length << 1;
Py_BEGIN_ALLOW_THREADS
err = deflate(&(self->zst), Z_NO_FLUSH);
Py_END_ALLOW_THREADS
}
}
/* We will only get Z_BUF_ERROR if the output buffer was full but
there wasn't more output when we tried again, so it is not an error
condition.
*/
if (return_error)
RetVal = NULL; /* should have been handled by DECREF */
else
_PyString_Resize(&RetVal, self->zst.total_out - start_total_out);
if (!return_error) {
if (err != Z_OK && err != Z_BUF_ERROR) {
if (self->zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while compressing",
err);
else
PyErr_Format(ZlibError, "Error %i while compressing: %.200s",
err, self->zst.msg);
return_error = 1;
Py_DECREF(RetVal);
}
}
if (return_error)
RetVal = NULL; /* should have been handled by DECREF */
else
_PyString_Resize(&RetVal, self->zst.total_out - start_total_out);
Py_DECREF(inputString);
Py_DECREF(inputString);
LEAVE_ZLIB
LEAVE_ZLIB
return RetVal;
return RetVal;
}
static char decomp_decompress__doc__[] =
......@@ -620,130 +613,134 @@ static char decomp_decompress__doc__[] =
static PyObject *
PyZlib_objdecompress(compobject *self, PyObject *args)
{
int err, inplen, old_length, length = DEFAULTALLOC;
int max_length = 0;
PyObject *RetVal;
Byte *input;
unsigned long start_total_out;
int return_error;
PyObject * inputString;
if (!PyArg_ParseTuple(args, "S|i:decompress", &inputString, &max_length))
return NULL;
if (max_length < 0) {
PyErr_SetString(PyExc_ValueError,
"max_length must be greater than zero");
return NULL;
}
int err, inplen, old_length, length = DEFAULTALLOC;
int max_length = 0;
PyObject *RetVal;
Byte *input;
unsigned long start_total_out;
int return_error;
PyObject * inputString;
if (!PyArg_ParseTuple(args, "S|i:decompress", &inputString, &max_length))
return NULL;
if (max_length < 0) {
PyErr_SetString(PyExc_ValueError,
"max_length must be greater than zero");
return NULL;
}
if (PyString_AsStringAndSize(inputString, (char**)&input, &inplen) == -1)
return NULL;
if (PyString_AsStringAndSize(inputString, (char**)&input, &inplen) == -1)
return NULL;
/* limit amount of data allocated to max_length */
if (max_length && length > max_length)
length = max_length;
if (!(RetVal = PyString_FromStringAndSize(NULL, length))) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return NULL;
}
/* limit amount of data allocated to max_length */
if (max_length && length > max_length)
length = max_length;
if (!(RetVal = PyString_FromStringAndSize(NULL, length))) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return NULL;
}
ENTER_ZLIB
return_error = 0;
ENTER_ZLIB
return_error = 0;
Py_INCREF(inputString);
Py_INCREF(inputString);
start_total_out = self->zst.total_out;
self->zst.avail_in = inplen;
self->zst.next_in = input;
self->zst.avail_out = length;
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal);
start_total_out = self->zst.total_out;
self->zst.avail_in = inplen;
self->zst.next_in = input;
self->zst.avail_out = length;
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal);
Py_BEGIN_ALLOW_THREADS
err = inflate(&(self->zst), Z_SYNC_FLUSH);
Py_END_ALLOW_THREADS
Py_BEGIN_ALLOW_THREADS
err = inflate(&(self->zst), Z_SYNC_FLUSH);
Py_END_ALLOW_THREADS
/* While Z_OK and the output buffer is full, there might be more output.
So extend the output buffer and try again.
*/
while (err == Z_OK && self->zst.avail_out == 0) {
/* If max_length set, don't continue decompressing if we've already
reached the limit.
/* While Z_OK and the output buffer is full, there might be more output.
So extend the output buffer and try again.
*/
if (max_length && length >= max_length)
break;
while (err == Z_OK && self->zst.avail_out == 0) {
/* If max_length set, don't continue decompressing if we've already
reached the limit.
*/
if (max_length && length >= max_length)
break;
/* otherwise, ... */
old_length = length;
length = length << 1;
if (max_length && length > max_length)
length = max_length;
/* otherwise, ... */
old_length = length;
length = length << 1;
if (max_length && length > max_length)
length = max_length;
if (_PyString_Resize(&RetVal, length) == -1) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return_error = 1;
break;
}
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal)+old_length;
self->zst.avail_out = length - old_length;
Py_BEGIN_ALLOW_THREADS
err = inflate(&(self->zst), Z_SYNC_FLUSH);
Py_END_ALLOW_THREADS
}
if (_PyString_Resize(&RetVal, length) == -1) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return_error = 1;
break;
}
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) \
+ old_length;
self->zst.avail_out = length - old_length;
/* Not all of the compressed data could be accomodated in the output buffer
of specified size. Return the unconsumed tail in an attribute.*/
if(max_length) {
Py_DECREF(self->unconsumed_tail);
self->unconsumed_tail = PyString_FromStringAndSize(self->zst.next_in,
self->zst.avail_in);
if(!self->unconsumed_tail)
return_error = 1;
}
Py_BEGIN_ALLOW_THREADS
err = inflate(&(self->zst), Z_SYNC_FLUSH);
Py_END_ALLOW_THREADS
}
/* The end of the compressed data has been reached, so set the unused_data
attribute to a string containing the remainder of the data in the string.
Note that this is also a logical place to call inflateEnd, but the old
behaviour of only calling it on flush() is preserved.*/
if (!return_error) {
if (err == Z_STREAM_END) {
Py_XDECREF(self->unused_data); /* Free the original, empty string */
self->unused_data = PyString_FromStringAndSize((char *)self->zst.next_in,
self->zst.avail_in);
if (self->unused_data == NULL) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to unused_data");
Py_DECREF(RetVal);
return_error = 1;
/* Not all of the compressed data could be accomodated in the output buffer
of specified size. Return the unconsumed tail in an attribute.*/
if(max_length) {
Py_DECREF(self->unconsumed_tail);
self->unconsumed_tail = PyString_FromStringAndSize(self->zst.next_in,
self->zst.avail_in);
if(!self->unconsumed_tail)
return_error = 1;
}
/* We will only get Z_BUF_ERROR if the output buffer was full but there
wasn't more output when we tried again, so it is not an error
condition */
} else if (err != Z_OK && err != Z_BUF_ERROR) {
if (self->zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while decompressing",
err);
else
PyErr_Format(ZlibError, "Error %i while decompressing: %.200s",
err, self->zst.msg);
Py_DECREF(RetVal);
return_error = 1;
/* The end of the compressed data has been reached, so set the
unused_data attribute to a string containing the remainder of the
data in the string. Note that this is also a logical place to call
inflateEnd, but the old behaviour of only calling it on flush() is
preserved.
*/
if (!return_error) {
if (err == Z_STREAM_END) {
Py_XDECREF(self->unused_data); /* Free original empty string */
self->unused_data = PyString_FromStringAndSize(
(char *)self->zst.next_in, self->zst.avail_in);
if (self->unused_data == NULL) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to unused_data");
Py_DECREF(RetVal);
return_error = 1;
}
/* We will only get Z_BUF_ERROR if the output buffer was full
but there wasn't more output when we tried again, so it is
not an error condition.
*/
} else if (err != Z_OK && err != Z_BUF_ERROR) {
if (self->zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while decompressing",
err);
else
PyErr_Format(ZlibError, "Error %i while decompressing: %.200s",
err, self->zst.msg);
Py_DECREF(RetVal);
return_error = 1;
}
}
}
if (!return_error) {
_PyString_Resize(&RetVal, self->zst.total_out - start_total_out);
}
else
RetVal = NULL; /* should be handled by DECREF */
if (!return_error) {
_PyString_Resize(&RetVal, self->zst.total_out - start_total_out);
}
else
RetVal = NULL; /* should be handled by DECREF */
Py_DECREF(inputString);
Py_DECREF(inputString);
LEAVE_ZLIB
LEAVE_ZLIB
return RetVal;
return RetVal;
}
static char comp_flush__doc__[] =
......@@ -757,101 +754,103 @@ static char comp_flush__doc__[] =
static PyObject *
PyZlib_flush(compobject *self, PyObject *args)
{
int err, length=DEFAULTALLOC;
PyObject *RetVal;
int flushmode = Z_FINISH;
unsigned long start_total_out;
int return_error;
if (!PyArg_ParseTuple(args, "|i:flush", &flushmode))
return NULL;
/* Flushing with Z_NO_FLUSH is a no-op, so there's no point in
doing any work at all; just return an empty string. */
if (flushmode == Z_NO_FLUSH) {
return PyString_FromStringAndSize(NULL, 0);
}
if (!(RetVal = PyString_FromStringAndSize(NULL, length))) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return NULL;
}
ENTER_ZLIB
start_total_out = self->zst.total_out;
self->zst.avail_in = 0;
self->zst.avail_out = length;
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal);
int err, length = DEFAULTALLOC;
PyObject *RetVal;
int flushmode = Z_FINISH;
unsigned long start_total_out;
int return_error;
Py_BEGIN_ALLOW_THREADS
err = deflate(&(self->zst), flushmode);
Py_END_ALLOW_THREADS
if (!PyArg_ParseTuple(args, "|i:flush", &flushmode))
return NULL;
return_error = 0;
/* Flushing with Z_NO_FLUSH is a no-op, so there's no point in
doing any work at all; just return an empty string. */
if (flushmode == Z_NO_FLUSH) {
return PyString_FromStringAndSize(NULL, 0);
}
/* while Z_OK and the output buffer is full, there might be more output,
so extend the output buffer and try again */
while (err == Z_OK && self->zst.avail_out == 0) {
if (_PyString_Resize(&RetVal, length << 1) == -1) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return_error = 1;
break;
if (!(RetVal = PyString_FromStringAndSize(NULL, length))) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return NULL;
}
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) + length;
ENTER_ZLIB
start_total_out = self->zst.total_out;
self->zst.avail_in = 0;
self->zst.avail_out = length;
length = length << 1;
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal);
Py_BEGIN_ALLOW_THREADS
err = deflate(&(self->zst), flushmode);
Py_END_ALLOW_THREADS
}
/* If flushmode is Z_FINISH, we also have to call deflateEnd() to free
various data structures. Note we should only get Z_STREAM_END when
flushmode is Z_FINISH, but checking both for safety*/
if (!return_error) {
if (err == Z_STREAM_END && flushmode == Z_FINISH) {
err=deflateEnd(&(self->zst));
if (err!=Z_OK) {
if (self->zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i from deflateEnd()",
err);
else
PyErr_Format(ZlibError,"Error %i from deflateEnd(): %.200s",
err, self->zst.msg);
return_error = 0;
Py_DECREF(RetVal);
return_error = 1;
}
else
self->is_initialised = 0;
/* while Z_OK and the output buffer is full, there might be more output,
so extend the output buffer and try again */
while (err == Z_OK && self->zst.avail_out == 0) {
if (_PyString_Resize(&RetVal, length << 1) == -1) {
PyErr_SetString(PyExc_MemoryError,
"Can't allocate memory to compress data");
return_error = 1;
break;
}
self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) \
+ length;
self->zst.avail_out = length;
length = length << 1;
Py_BEGIN_ALLOW_THREADS
err = deflate(&(self->zst), flushmode);
Py_END_ALLOW_THREADS
}
/* We will only get Z_BUF_ERROR if the output buffer was full but there
wasn't more output when we tried again, so it is not an error
condition */
} else if (err!=Z_OK && err!=Z_BUF_ERROR) {
if (self->zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while flushing",
err);
else
PyErr_Format(ZlibError, "Error %i while flushing: %.200s",
err, self->zst.msg);
Py_DECREF(RetVal);
return_error = 1;
/* If flushmode is Z_FINISH, we also have to call deflateEnd() to free
various data structures. Note we should only get Z_STREAM_END when
flushmode is Z_FINISH, but checking both for safety*/
if (!return_error) {
if (err == Z_STREAM_END && flushmode == Z_FINISH) {
err = deflateEnd(&(self->zst));
if (err != Z_OK) {
if (self->zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i from deflateEnd()",
err);
else
PyErr_Format(ZlibError,
"Error %i from deflateEnd(): %.200s",
err, self->zst.msg);
Py_DECREF(RetVal);
return_error = 1;
} else
self->is_initialised = 0;
/* We will only get Z_BUF_ERROR if the output buffer was full
but there wasn't more output when we tried again, so it is
not an error condition.
*/
} else if (err!=Z_OK && err!=Z_BUF_ERROR) {
if (self->zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i while flushing",
err);
else
PyErr_Format(ZlibError, "Error %i while flushing: %.200s",
err, self->zst.msg);
Py_DECREF(RetVal);
return_error = 1;
}
}
}
if (!return_error)
_PyString_Resize(&RetVal, self->zst.total_out - start_total_out);
else
RetVal = NULL; /* should have been handled by DECREF */
if (!return_error)
_PyString_Resize(&RetVal, self->zst.total_out - start_total_out);
else
RetVal = NULL; /* should have been handled by DECREF */
LEAVE_ZLIB
LEAVE_ZLIB
return RetVal;
return RetVal;
}
static char decomp_flush__doc__[] =
......@@ -866,51 +865,50 @@ PyZlib_unflush(compobject *self, PyObject *args)
inflateEnd, causing any further decompress or flush calls to raise
exceptions. This behaviour has been preserved.*/
{
int err;
PyObject * retval;
int err;
PyObject * retval;
if (!PyArg_ParseTuple(args, ""))
return NULL;
ENTER_ZLIB
if (!PyArg_ParseTuple(args, ""))
return NULL;
err=inflateEnd(&(self->zst));
if (err!=Z_OK) {
if (self->zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i from inflateEnd()",
err);
else
PyErr_Format(ZlibError, "Error %i from inflateEnd(): %.200s",
err, self->zst.msg);
ENTER_ZLIB
retval = NULL;
err = inflateEnd(&(self->zst));
if (err != Z_OK) {
if (self->zst.msg == Z_NULL)
PyErr_Format(ZlibError, "Error %i from inflateEnd()",
err);
else
PyErr_Format(ZlibError, "Error %i from inflateEnd(): %.200s",
err, self->zst.msg);
} else {
self->is_initialised = 0;
retval = PyString_FromStringAndSize(NULL, 0);
}
retval = NULL;
} else {
self->is_initialised = 0;
retval = PyString_FromStringAndSize(NULL, 0);
}
LEAVE_ZLIB
LEAVE_ZLIB
return retval;
return retval;
}
static PyMethodDef comp_methods[] =
{
{"compress", (binaryfunc)PyZlib_objcompress,
METH_VARARGS, comp_compress__doc__},
{"flush", (binaryfunc)PyZlib_flush,
METH_VARARGS, comp_flush__doc__},
{NULL, NULL}
{"compress", (binaryfunc)PyZlib_objcompress, METH_VARARGS,
comp_compress__doc__},
{"flush", (binaryfunc)PyZlib_flush, METH_VARARGS,
comp_flush__doc__},
{NULL, NULL}
};
static PyMethodDef Decomp_methods[] =
{
{"decompress", (binaryfunc)PyZlib_objdecompress,
METH_VARARGS, decomp_decompress__doc__},
{"flush", (binaryfunc)PyZlib_unflush,
METH_VARARGS, decomp_flush__doc__},
{NULL, NULL}
{"decompress", (binaryfunc)PyZlib_objdecompress, METH_VARARGS,
decomp_decompress__doc__},
{"flush", (binaryfunc)PyZlib_unflush, METH_VARARGS,
decomp_flush__doc__},
{NULL, NULL}
};
static PyObject *
......@@ -925,26 +923,22 @@ Comp_getattr(compobject *self, char *name)
static PyObject *
Decomp_getattr(compobject *self, char *name)
{
PyObject * retval;
ENTER_ZLIB
if (strcmp(name, "unused_data") == 0)
{
Py_INCREF(self->unused_data);
retval = self->unused_data;
}
else if (strcmp(name, "unconsumed_tail") == 0)
{
Py_INCREF(self->unconsumed_tail);
retval = self->unconsumed_tail;
}
else
retval = Py_FindMethod(Decomp_methods, (PyObject *)self, name);
LEAVE_ZLIB
return retval;
PyObject * retval;
ENTER_ZLIB
if (strcmp(name, "unused_data") == 0) {
Py_INCREF(self->unused_data);
retval = self->unused_data;
} else if (strcmp(name, "unconsumed_tail") == 0) {
Py_INCREF(self->unconsumed_tail);
retval = self->unconsumed_tail;
} else
retval = Py_FindMethod(Decomp_methods, (PyObject *)self, name);
LEAVE_ZLIB
return retval;
}
static char adler32__doc__[] =
......@@ -957,14 +951,12 @@ static char adler32__doc__[] =
static PyObject *
PyZlib_adler32(PyObject *self, PyObject *args)
{
uLong adler32val=adler32(0L, Z_NULL, 0);
uLong adler32val = adler32(0L, Z_NULL, 0);
Byte *buf;
int len;
if (!PyArg_ParseTuple(args, "s#|l:adler32", &buf, &len, &adler32val))
{
return NULL;
}
adler32val = adler32(adler32val, buf, len);
return PyInt_FromLong(adler32val);
}
......@@ -979,13 +971,11 @@ static char crc32__doc__[] =
static PyObject *
PyZlib_crc32(PyObject *self, PyObject *args)
{
uLong crc32val=crc32(0L, Z_NULL, 0);
uLong crc32val = crc32(0L, Z_NULL, 0);
Byte *buf;
int len;
if (!PyArg_ParseTuple(args, "s#|l:crc32", &buf, &len, &crc32val))
{
return NULL;
}
crc32val = crc32(crc32val, buf, len);
return PyInt_FromLong(crc32val);
}
......@@ -993,53 +983,53 @@ PyZlib_crc32(PyObject *self, PyObject *args)
static PyMethodDef zlib_methods[] =
{
{"adler32", (PyCFunction)PyZlib_adler32,
METH_VARARGS, adler32__doc__},
{"compress", (PyCFunction)PyZlib_compress,
METH_VARARGS, compress__doc__},
{"compressobj", (PyCFunction)PyZlib_compressobj,
METH_VARARGS, compressobj__doc__},
{"crc32", (PyCFunction)PyZlib_crc32,
METH_VARARGS, crc32__doc__},
{"decompress", (PyCFunction)PyZlib_decompress,
METH_VARARGS, decompress__doc__},
{"decompressobj", (PyCFunction)PyZlib_decompressobj,
METH_VARARGS, decompressobj__doc__},
{NULL, NULL}
{"adler32", (PyCFunction)PyZlib_adler32, METH_VARARGS,
adler32__doc__},
{"compress", (PyCFunction)PyZlib_compress, METH_VARARGS,
compress__doc__},
{"compressobj", (PyCFunction)PyZlib_compressobj, METH_VARARGS,
compressobj__doc__},
{"crc32", (PyCFunction)PyZlib_crc32, METH_VARARGS,
crc32__doc__},
{"decompress", (PyCFunction)PyZlib_decompress, METH_VARARGS,
decompress__doc__},
{"decompressobj", (PyCFunction)PyZlib_decompressobj, METH_VARARGS,
decompressobj__doc__},
{NULL, NULL}
};
statichere PyTypeObject Comptype = {
PyObject_HEAD_INIT(0)
0,
"Compress",
sizeof(compobject),
0,
(destructor)Comp_dealloc, /*tp_dealloc*/
0, /*tp_print*/
(getattrfunc)Comp_getattr, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
PyObject_HEAD_INIT(0)
0,
"Compress",
sizeof(compobject),
0,
(destructor)Comp_dealloc, /*tp_dealloc*/
0, /*tp_print*/
(getattrfunc)Comp_getattr, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
};
statichere PyTypeObject Decomptype = {
PyObject_HEAD_INIT(0)
0,
"Decompress",
sizeof(compobject),
0,
(destructor)Decomp_dealloc, /*tp_dealloc*/
0, /*tp_print*/
(getattrfunc)Decomp_getattr, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
PyObject_HEAD_INIT(0)
0,
"Decompress",
sizeof(compobject),
0,
(destructor)Decomp_dealloc, /*tp_dealloc*/
0, /*tp_print*/
(getattrfunc)Decomp_getattr, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
};
/* The following insint() routine was blatantly ripped off from
......@@ -1080,39 +1070,39 @@ static char zlib_module_documentation[]=
DL_EXPORT(void)
PyInit_zlib(void)
{
PyObject *m, *d, *ver;
Comptype.ob_type = &PyType_Type;
Decomptype.ob_type = &PyType_Type;
m = Py_InitModule4("zlib", zlib_methods,
zlib_module_documentation,
(PyObject*)NULL,PYTHON_API_VERSION);
d = PyModule_GetDict(m);
ZlibError = PyErr_NewException("zlib.error", NULL, NULL);
if (ZlibError != NULL)
PyDict_SetItemString(d, "error", ZlibError);
insint(d, "MAX_WBITS", MAX_WBITS);
insint(d, "DEFLATED", DEFLATED);
insint(d, "DEF_MEM_LEVEL", DEF_MEM_LEVEL);
insint(d, "Z_BEST_SPEED", Z_BEST_SPEED);
insint(d, "Z_BEST_COMPRESSION", Z_BEST_COMPRESSION);
insint(d, "Z_DEFAULT_COMPRESSION", Z_DEFAULT_COMPRESSION);
insint(d, "Z_FILTERED", Z_FILTERED);
insint(d, "Z_HUFFMAN_ONLY", Z_HUFFMAN_ONLY);
insint(d, "Z_DEFAULT_STRATEGY", Z_DEFAULT_STRATEGY);
insint(d, "Z_FINISH", Z_FINISH);
insint(d, "Z_NO_FLUSH", Z_NO_FLUSH);
insint(d, "Z_SYNC_FLUSH", Z_SYNC_FLUSH);
insint(d, "Z_FULL_FLUSH", Z_FULL_FLUSH);
ver = PyString_FromString(ZLIB_VERSION);
if (ver != NULL) {
PyDict_SetItemString(d, "ZLIB_VERSION", ver);
Py_DECREF(ver);
}
PyObject *m, *d, *ver;
Comptype.ob_type = &PyType_Type;
Decomptype.ob_type = &PyType_Type;
m = Py_InitModule4("zlib", zlib_methods,
zlib_module_documentation,
(PyObject*)NULL,PYTHON_API_VERSION);
d = PyModule_GetDict(m);
ZlibError = PyErr_NewException("zlib.error", NULL, NULL);
if (ZlibError != NULL)
PyDict_SetItemString(d, "error", ZlibError);
PyModule_AddIntConstant(m, "MAX_WBITS", MAX_WBITS);
PyModule_AddIntConstant(m, "DEFLATED", DEFLATED);
PyModule_AddIntConstant(m, "DEF_MEM_LEVEL", DEF_MEM_LEVEL);
PyModule_AddIntConstant(m, "Z_BEST_SPEED", Z_BEST_SPEED);
PyModule_AddIntConstant(m, "Z_BEST_COMPRESSION", Z_BEST_COMPRESSION);
PyModule_AddIntConstant(m, "Z_DEFAULT_COMPRESSION", Z_DEFAULT_COMPRESSION);
PyModule_AddIntConstant(m, "Z_FILTERED", Z_FILTERED);
PyModule_AddIntConstant(m, "Z_HUFFMAN_ONLY", Z_HUFFMAN_ONLY);
PyModule_AddIntConstant(m, "Z_DEFAULT_STRATEGY", Z_DEFAULT_STRATEGY);
PyModule_AddIntConstant(m, "Z_FINISH", Z_FINISH);
PyModule_AddIntConstant(m, "Z_NO_FLUSH", Z_NO_FLUSH);
PyModule_AddIntConstant(m, "Z_SYNC_FLUSH", Z_SYNC_FLUSH);
PyModule_AddIntConstant(m, "Z_FULL_FLUSH", Z_FULL_FLUSH);
ver = PyString_FromString(ZLIB_VERSION);
if (ver != NULL) {
PyDict_SetItemString(d, "ZLIB_VERSION", ver);
Py_DECREF(ver);
}
#ifdef WITH_THREAD
zlib_lock = PyThread_allocate_lock();
zlib_lock = PyThread_allocate_lock();
#endif // WITH_THREAD
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment