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

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


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

Modified Files:
	zlibmodule.c 
Log Message:
Undo needless INCREF chicanery introduced by SF patch #450702.

    Apparently this patch (rev 2.41) replaced all the good old "s#"
    formats in PyArg_ParseTuple() with "S".  Then it did
    PyString_FromStringAndSize() to get back the values setup by the
    "s#" format.  It also incref'd and decref'd the string obtained by
    "S" even though the argument tuple had a reference to it.

Replace PyString_AsString() calls with PyString_AS_STRING().

    A good rule of thumb -- if you never check the return value of
    PyString_AsString() to see if it's NULL, you ought to be using the
    macro <wink>.



Index: zlibmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/zlibmodule.c,v
retrieving revision 2.49
retrieving revision 2.50
diff -C2 -d -r2.49 -r2.50
*** zlibmodule.c	2001/10/16 23:02:32	2.49
--- zlibmodule.c	2001/10/16 23:26:08	2.50
***************
*** 137,148 ****
      int length, level=Z_DEFAULT_COMPRESSION, err;
      z_stream zst;
-     PyObject * inputString;
    
      /* 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;
  
--- 137,143 ----
      int length, level=Z_DEFAULT_COMPRESSION, err;
      z_stream zst;
    
      /* require Python string object, optional 'level' arg */
!     if (!PyArg_ParseTuple(args, "s#|i:compress", &input, &length, &level))
  	return NULL;
  
***************
*** 159,164 ****
         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;
--- 154,157 ----
***************
*** 204,208 ****
   error:
      free(output);
-     Py_DECREF(inputString);
  
      return ReturnVal;
--- 197,200 ----
***************
*** 223,232 ****
      int wsize=DEF_WBITS, r_strlen=DEFAULTALLOC;
      z_stream zst;
-     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;
  
--- 215,221 ----
      int wsize=DEF_WBITS, r_strlen=DEFAULTALLOC;
      z_stream zst;
  
!     if (!PyArg_ParseTuple(args, "s#|ii:decompress", 
! 			  &input, &length, &wsize, &r_strlen))
  	return NULL;
  
***************
*** 240,251 ****
  	return NULL;
  
-     /* 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);
--- 229,235 ----
  	return NULL;
  
      zst.zalloc = (alloc_func)NULL;
      zst.zfree = (free_func)Z_NULL;
!     zst.next_out = (Byte *)PyString_AS_STRING(result_str);
      zst.next_in = (Byte *)input;
      err = inflateInit2(&zst, wsize);
***************
*** 292,296 ****
  		goto error;
  	    }
! 	    zst.next_out = (unsigned char *)PyString_AsString(result_str) \
  		+ r_strlen;
  	    zst.avail_out = r_strlen;
--- 276,280 ----
  		goto error;
  	    }
! 	    zst.next_out = (unsigned char *)PyString_AS_STRING(result_str) \
  		+ r_strlen;
  	    zst.avail_out = r_strlen;
***************
*** 307,319 ****
      if (err != Z_OK) {
  	zlib_error(zst, err, "while finishing data decompression");
! 	return NULL;
      }
  
      _PyString_Resize(&result_str, zst.total_out);
-     Py_DECREF(inputString);
      return result_str;
  
   error:
-     Py_DECREF(inputString);
      Py_XDECREF(result_str);
      return NULL;
--- 291,301 ----
      if (err != Z_OK) {
  	zlib_error(zst, err, "while finishing data decompression");
! 	goto error;
      }
  
      _PyString_Resize(&result_str, zst.total_out);
      return result_str;
  
   error:
      Py_XDECREF(result_str);
      return NULL;
***************
*** 434,443 ****
      Byte *input;
      unsigned long start_total_out;
-     PyObject *inputString;
    
!     if (!PyArg_ParseTuple(args, "S:compress", &inputString))
! 	return NULL;
! 
!     if (PyString_AsStringAndSize(inputString, (char**)&input, &inplen) == -1)
  	return NULL;
  
--- 416,421 ----
      Byte *input;
      unsigned long start_total_out;
    
!     if (!PyArg_ParseTuple(args, "s#:compress", &input, &inplen))
  	return NULL;
  
***************
*** 447,457 ****
      ENTER_ZLIB
  
-     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
--- 425,433 ----
      ENTER_ZLIB
  
      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_AS_STRING(RetVal);
  
      Py_BEGIN_ALLOW_THREADS
***************
*** 466,470 ****
  	    goto error;
  	}
! 	self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) \
  	    + length;
  	self->zst.avail_out = length;
--- 442,446 ----
  	    goto error;
  	}
! 	self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal) \
  	    + length;
  	self->zst.avail_out = length;
***************
*** 491,495 ****
  
   error:
-     Py_DECREF(inputString);
      LEAVE_ZLIB
      return RetVal;
--- 467,470 ----
***************
*** 515,521 ****
      Byte *input;
      unsigned long start_total_out;
-     PyObject * inputString;
  
!     if (!PyArg_ParseTuple(args, "S|i:decompress", &inputString, &max_length))
  	return NULL;
      if (max_length < 0) {
--- 490,496 ----
      Byte *input;
      unsigned long start_total_out;
  
!     if (!PyArg_ParseTuple(args, "s#|i:decompress", &input, 
! 			  &inplen, &max_length))
  	return NULL;
      if (max_length < 0) {
***************
*** 525,531 ****
      }
  
-     if (PyString_AsStringAndSize(inputString, (char**)&input, &inplen) == -1)
- 	return NULL;
- 
      /* limit amount of data allocated to max_length */
      if (max_length && length > max_length) 
--- 500,503 ----
***************
*** 536,546 ****
      ENTER_ZLIB
  
-     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
--- 508,516 ----
      ENTER_ZLIB
  
      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_AS_STRING(RetVal);
  
      Py_BEGIN_ALLOW_THREADS
***************
*** 568,572 ****
  	    goto error;
  	}
! 	self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) \
  	    + old_length;
  	self->zst.avail_out = length - old_length;
--- 538,542 ----
  	    goto error;
  	}
! 	self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal) \
  	    + old_length;
  	self->zst.avail_out = length - old_length;
***************
*** 619,624 ****
  
   error:
-     Py_DECREF(inputString);
- 
      LEAVE_ZLIB
  
--- 589,592 ----
***************
*** 659,663 ****
      self->zst.avail_in = 0;
      self->zst.avail_out = length;
!     self->zst.next_out = (unsigned char *)PyString_AsString(RetVal);
  
      Py_BEGIN_ALLOW_THREADS
--- 627,631 ----
      self->zst.avail_in = 0;
      self->zst.avail_out = length;
!     self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal);
  
      Py_BEGIN_ALLOW_THREADS
***************
*** 672,676 ****
  	    goto error;
  	}
! 	self->zst.next_out = (unsigned char *)PyString_AsString(RetVal) \
  	    + length;
  	self->zst.avail_out = length;
--- 640,644 ----
  	    goto error;
  	}
! 	self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal) \
  	    + length;
  	self->zst.avail_out = length;