[Python-checkins] CVS: python/dist/src/Modules zlibmodule.c,2.46,2.47

Jeremy Hylton jhylton@users.sourceforge.net
Tue, 16 Oct 2001 14:56:11 -0700


Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv9643

Modified Files:
	zlibmodule.c 
Log Message:
Add zlib_error() helper.

It sets a ZlibError exception, using the msg from the z_stream pointer
if one is available.


Index: zlibmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/zlibmodule.c,v
retrieving revision 2.46
retrieving revision 2.47
diff -C2 -d -r2.46 -r2.47
*** zlibmodule.c	2001/10/16 21:23:58	2.46
--- zlibmodule.c	2001/10/16 21:56:09	2.47
***************
*** 83,86 ****
--- 83,95 ----
  } compobject;
  
+ static void
+ zlib_error(z_stream zst, int err, char *msg)
+ {
+     if (zst.msg == Z_NULL)
+ 	PyErr_Format(ZlibError, "Error %d %s", err, msg);
+     else
+ 	PyErr_Format(ZlibError, "Error %d %s: %.200s", err, msg, zst.msg);
+ }
+ 
  static char compressobj__doc__[] = 
  "compressobj() -- Return a compressor object.\n"
***************
*** 176,213 ****
  	return_error = 1;
  	break;
!     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);
  	return_error = 1;
- 	}
      }
  
      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: {
! 	    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);
- 
  	    return_error = 1;
- 	    }
  	}
      
--- 185,203 ----
  	return_error = 1;
  	break;
!     default:
          deflateEnd(&zst);
+ 	zlib_error(zst, err, "while compressing data");
  	return_error = 1;
      }
  
      if (!return_error) {
  	Py_BEGIN_ALLOW_THREADS;
!         err = deflate(&zst, Z_FINISH);
  	Py_END_ALLOW_THREADS;
  
! 	if (err != Z_STREAM_END) {
! 	    zlib_error(zst, err, "while compressing data");
  	    deflateEnd(&zst);
  	    return_error = 1;
  	}
      
***************
*** 217,230 ****
  		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);  
! 	    }
  	}
      }
--- 207,212 ----
  		ReturnVal = PyString_FromStringAndSize((char *)output, 
  						       zst.total_out);
! 	    else 
! 		zlib_error(zst, err, "while finishing compression");
  	}
      }
***************
*** 287,302 ****
  			"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); 
! 	else
! 	    PyErr_Format(ZlibError,
! 			 "Error %i while preparing to decompress data: %.200s",
! 			 err, zst.msg);  
          inflateEnd(&zst);
! 
  	return_error = 1;
- 	}
      }
  
--- 269,276 ----
  			"Out of memory while decompressing data");
  	return_error = 1;
!     default:
          inflateEnd(&zst);
! 	zlib_error(zst, err, "while preparing to decompress data");
  	return_error = 1;
      }
  
***************
*** 318,323 ****
  	     * 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);
--- 292,296 ----
  	     * 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);
***************
*** 339,353 ****
  	    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);
  	    return_error = 1;
- 	    }
  	}
      } while (err != Z_STREAM_END);
--- 312,319 ----
  	    r_strlen = r_strlen << 1;
  	    break;
! 	default:
  	    inflateEnd(&zst);
+ 	    zlib_error(zst, err, "while decompressing data");
  	    return_error = 1;
  	}
      } while (err != Z_STREAM_END);
***************
*** 356,369 ****
  	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;
  	}
--- 322,326 ----
  	err = inflateEnd(&zst);
  	if (err != Z_OK) {
! 	    zlib_error(zst, err, "while finishing data decompression");
  	    return NULL;
  	}
***************
*** 411,426 ****
        return NULL;
      default:
!       {
! 	if (self->zst.msg == Z_NULL)
! 	    PyErr_Format(ZlibError,
! 			 "Error %i while creating compression object",
! 			 err); 
! 	else
! 	    PyErr_Format(ZlibError,
! 			 "Error %i while creating compression object: %.200s",
! 			 err, self->zst.msg);  
          Py_DECREF(self);
  	return NULL;
-       }
      }
  }
--- 368,374 ----
        return NULL;
      default:
! 	zlib_error(self->zst, err, "while creating compression object");
          Py_DECREF(self);
  	return NULL;
      }
  }
***************
*** 456,471 ****
        return NULL;
      default:
!     {
! 	if (self->zst.msg == Z_NULL)
! 	    PyErr_Format(ZlibError,
! 			 "Error %i while creating decompression object",
! 			 err); 
! 	else
! 	    PyErr_Format(ZlibError,
! 			 "Error %i while creating decompression object: %.200s",
! 			 err, self->zst.msg);  
          Py_DECREF(self);
  	return NULL;
-     }
    }
  }
--- 404,410 ----
        return NULL;
      default:
! 	zlib_error(self->zst, err, "while creating decompression object");
          Py_DECREF(self);
  	return NULL;
    }
  }
***************
*** 852,862 ****
      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);  
! 
  	retval = NULL;
      } else {
--- 791,795 ----
      err = inflateEnd(&(self->zst));
      if (err != Z_OK) {
! 	zlib_error(self->zst, err, "from inflateEnd()");
  	retval = NULL;
      } else {