[Python-checkins] CVS: python/dist/src/Objects abstract.c,2.91,2.92

Jeremy Hylton jhylton@users.sourceforge.net
Fri, 09 Nov 2001 13:59:44 -0800


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

Modified Files:
	abstract.c 
Log Message:
Add PyObject_CheckReadBuffer(), which returns true if its argument
supports the single-segment readable buffer interface.

Add documentation for this and other PyObject_XXXBuffer() calls.


Index: abstract.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v
retrieving revision 2.91
retrieving revision 2.92
diff -C2 -d -r2.91 -r2.92
*** abstract.c	2001/11/01 20:26:12	2.91
--- abstract.c	2001/11/09 21:59:42	2.92
***************
*** 183,207 ****
  	}
  	pb = obj->ob_type->tp_as_buffer;
! 	if ( pb == NULL ||
  	     pb->bf_getcharbuffer == NULL ||
! 	     pb->bf_getsegcount == NULL ) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a character buffer object");
! 		goto onError;
  	}
! 	if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a single-segment buffer object");
! 		goto onError;
  	}
! 	len = (*pb->bf_getcharbuffer)(obj,0,&pp);
  	if (len < 0)
! 		goto onError;
  	*buffer = pp;
  	*buffer_len = len;
  	return 0;
  
!  onError:
! 	return -1;
  }
  
--- 183,217 ----
  	}
  	pb = obj->ob_type->tp_as_buffer;
! 	if (pb == NULL ||
  	     pb->bf_getcharbuffer == NULL ||
! 	     pb->bf_getsegcount == NULL) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a character buffer object");
! 		return -1;
  	}
! 	if ((*pb->bf_getsegcount)(obj,NULL) != 1) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a single-segment buffer object");
! 		return -1;
  	}
! 	len = (*pb->bf_getcharbuffer)(obj, 0, &pp);
  	if (len < 0)
! 		return -1;
  	*buffer = pp;
  	*buffer_len = len;
  	return 0;
+ }
  
! int
! PyObject_CheckReadBuffer(PyObject *obj)
! {
! 	PyBufferProcs *pb = obj->ob_type->tp_as_buffer;
! 
! 	if (pb == NULL ||
! 	    pb->bf_getreadbuffer == NULL ||
! 	    pb->bf_getsegcount == NULL ||
! 	    (*pb->bf_getsegcount)(obj, NULL) != 1)
! 		return 0;
! 	return 1;
  }
  
***************
*** 219,243 ****
  	}
  	pb = obj->ob_type->tp_as_buffer;
! 	if ( pb == NULL ||
  	     pb->bf_getreadbuffer == NULL ||
! 	     pb->bf_getsegcount == NULL ) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a readable buffer object");
! 		goto onError;
  	}
! 	if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a single-segment buffer object");
! 		goto onError;
  	}
! 	len = (*pb->bf_getreadbuffer)(obj,0,&pp);
  	if (len < 0)
! 		goto onError;
  	*buffer = pp;
  	*buffer_len = len;
  	return 0;
- 
-  onError:
- 	return -1;
  }
  
--- 229,250 ----
  	}
  	pb = obj->ob_type->tp_as_buffer;
! 	if (pb == NULL ||
  	     pb->bf_getreadbuffer == NULL ||
! 	     pb->bf_getsegcount == NULL) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a readable buffer object");
! 		return -1;
  	}
! 	if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a single-segment buffer object");
! 		return -1;
  	}
! 	len = (*pb->bf_getreadbuffer)(obj, 0, &pp);
  	if (len < 0)
! 		return -1;
  	*buffer = pp;
  	*buffer_len = len;
  	return 0;
  }
  
***************
*** 255,279 ****
  	}
  	pb = obj->ob_type->tp_as_buffer;
! 	if ( pb == NULL ||
  	     pb->bf_getwritebuffer == NULL ||
! 	     pb->bf_getsegcount == NULL ) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a writeable buffer object");
! 		goto onError;
  	}
! 	if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a single-segment buffer object");
! 		goto onError;
  	}
  	len = (*pb->bf_getwritebuffer)(obj,0,&pp);
  	if (len < 0)
! 		goto onError;
  	*buffer = pp;
  	*buffer_len = len;
  	return 0;
- 
-  onError:
- 	return -1;
  }
  
--- 262,283 ----
  	}
  	pb = obj->ob_type->tp_as_buffer;
! 	if (pb == NULL ||
  	     pb->bf_getwritebuffer == NULL ||
! 	     pb->bf_getsegcount == NULL) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a writeable buffer object");
! 		return -1;
  	}
! 	if ((*pb->bf_getsegcount)(obj, NULL) != 1) {
  		PyErr_SetString(PyExc_TypeError,
  				"expected a single-segment buffer object");
! 		return -1;
  	}
  	len = (*pb->bf_getwritebuffer)(obj,0,&pp);
  	if (len < 0)
! 		return -1;
  	*buffer = pp;
  	*buffer_len = len;
  	return 0;
  }
  
***************
*** 1981,1985 ****
  		if (PySequence_Check(o))
  			return PySeqIter_New(o);
! 		PyErr_SetString(PyExc_TypeError, "iteration over non-sequence");
  		return NULL;
  	}
--- 1985,1990 ----
  		if (PySequence_Check(o))
  			return PySeqIter_New(o);
! 		PyErr_SetString(PyExc_TypeError, 
! 				"iteration over non-sequence");
  		return NULL;
  	}
***************
*** 2022,2023 ****
--- 2027,2029 ----
  	return result;
  }
+