2 /* New getargs implementation */
9 int PyArg_Parse(PyObject
*, char *, ...);
10 int PyArg_ParseTuple(PyObject
*, char *, ...);
11 int PyArg_VaParse(PyObject
*, char *, va_list);
13 int PyArg_ParseTupleAndKeywords(PyObject
*, PyObject
*,
14 char *, char **, ...);
15 int PyArg_VaParseTupleAndKeywords(PyObject
*, PyObject
*,
16 char *, char **, va_list);
20 static int vgetargs1(PyObject
*, char *, va_list *, int);
21 static void seterror(int, char *, int *, char *, char *);
22 static char *convertitem(PyObject
*, char **, va_list *, int *, char *,
24 static char *converttuple(PyObject
*, char **, va_list *,
25 int *, char *, size_t, int, PyObject
**);
26 static char *convertsimple(PyObject
*, char **, va_list *, char *,
28 static int convertbuffer(PyObject
*, void **p
, char **);
30 static int vgetargskeywords(PyObject
*, PyObject
*,
31 char *, char **, va_list *);
32 static char *skipitem(char **, va_list *);
35 PyArg_Parse(PyObject
*args
, char *format
, ...)
41 retval
= vgetargs1(args
, format
, &va
, 1);
48 PyArg_ParseTuple(PyObject
*args
, char *format
, ...)
54 retval
= vgetargs1(args
, format
, &va
, 0);
61 PyArg_VaParse(PyObject
*args
, char *format
, va_list va
)
65 #ifdef VA_LIST_IS_ARRAY
66 memcpy(lva
, va
, sizeof(va_list));
75 return vgetargs1(args
, format
, &lva
, 0);
79 /* Handle cleanup of allocated memory in case of exception */
82 addcleanup(void *ptr
, PyObject
**freelist
)
86 *freelist
= PyList_New(0);
92 cobj
= PyCObject_FromVoidPtr(ptr
, NULL
);
97 if(PyList_Append(*freelist
, cobj
)) {
107 cleanreturn(int retval
, PyObject
*freelist
)
111 int len
= PyList_GET_SIZE(freelist
), i
;
112 for (i
= 0; i
< len
; i
++)
113 PyMem_FREE(PyCObject_AsVoidPtr(
114 PyList_GET_ITEM(freelist
, i
)));
123 vgetargs1(PyObject
*args
, char *format
, va_list *p_va
, int compat
)
128 char *message
= NULL
;
133 char *formatsave
= format
;
136 PyObject
*freelist
= NULL
;
138 assert(compat
|| (args
!= (PyObject
*)NULL
));
140 while (endfmt
== 0) {
150 Py_FatalError("excess ')' in getargs format");
169 else if (isalpha(c
)) {
170 if (c
!= 'e') /* skip encoded */
180 Py_FatalError(/* '(' */ "missing ')' in getargs format");
191 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
192 "%.200s%s takes no arguments",
193 fname
==NULL
? "function" : fname
,
194 fname
==NULL
? "" : "()");
195 PyErr_SetString(PyExc_TypeError
, msgbuf
);
198 else if (min
== 1 && max
== 1) {
200 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
201 "%.200s%s takes at least one argument",
202 fname
==NULL
? "function" : fname
,
203 fname
==NULL
? "" : "()");
204 PyErr_SetString(PyExc_TypeError
, msgbuf
);
207 msg
= convertitem(args
, &format
, p_va
, levels
, msgbuf
,
208 sizeof(msgbuf
), &freelist
);
210 return cleanreturn(1, freelist
);
211 seterror(levels
[0], msg
, levels
+1, fname
, message
);
212 return cleanreturn(0, freelist
);
215 PyErr_SetString(PyExc_SystemError
,
216 "old style getargs format uses new features");
221 if (!PyTuple_Check(args
)) {
222 PyErr_SetString(PyExc_SystemError
,
223 "new style getargs format but argument is not a tuple");
227 len
= PyTuple_GET_SIZE(args
);
229 if (len
< min
|| max
< len
) {
230 if (message
== NULL
) {
231 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
232 "%.150s%s takes %s %d argument%s "
234 fname
==NULL
? "function" : fname
,
235 fname
==NULL
? "" : "()",
237 : len
< min
? "at least" : "at most",
238 len
< min
? min
: max
,
239 (len
< min
? min
: max
) == 1 ? "" : "s",
243 PyErr_SetString(PyExc_TypeError
, message
);
247 for (i
= 0; i
< len
; i
++) {
250 msg
= convertitem(PyTuple_GET_ITEM(args
, i
), &format
, p_va
,
251 levels
, msgbuf
, sizeof(msgbuf
), &freelist
);
253 seterror(i
+1, msg
, levels
, fname
, message
);
254 return cleanreturn(0, freelist
);
258 if (*format
!= '\0' && !isalpha((int)(*format
)) &&
260 *format
!= '|' && *format
!= ':' && *format
!= ';') {
261 PyErr_Format(PyExc_SystemError
,
262 "bad format string: %.200s", formatsave
);
263 return cleanreturn(0, freelist
);
266 return cleanreturn(1, freelist
);
272 seterror(int iarg
, char *msg
, int *levels
, char *fname
, char *message
)
278 if (PyErr_Occurred())
280 else if (message
== NULL
) {
282 PyOS_snprintf(p
, sizeof(buf
), "%.200s() ", fname
);
286 PyOS_snprintf(p
, sizeof(buf
) - (p
- buf
),
287 "argument %d", iarg
);
290 while (levels
[i
] > 0 && (int)(p
-buf
) < 220) {
291 PyOS_snprintf(p
, sizeof(buf
) - (buf
- p
),
292 ", item %d", levels
[i
]-1);
298 PyOS_snprintf(p
, sizeof(buf
) - (p
- buf
), "argument");
301 PyOS_snprintf(p
, sizeof(buf
) - (p
- buf
), " %.256s", msg
);
304 PyErr_SetString(PyExc_TypeError
, message
);
308 /* Convert a tuple argument.
309 On entry, *p_format points to the character _after_ the opening '('.
310 On successful exit, *p_format points to the closing ')'.
312 *p_format and *p_va are updated,
313 *levels and *msgbuf are untouched,
314 and NULL is returned.
315 If the argument is invalid:
316 *p_format is unchanged,
318 *levels is a 0-terminated list of item numbers,
319 *msgbuf contains an error message, whose format is:
320 "must be <typename1>, not <typename2>", where:
321 <typename1> is the name of the expected type, and
322 <typename2> is the name of the actual type,
323 and msgbuf is returned.
327 converttuple(PyObject
*arg
, char **p_format
, va_list *p_va
, int *levels
,
328 char *msgbuf
, size_t bufsize
, int toplevel
, PyObject
**freelist
)
332 char *format
= *p_format
;
347 else if (c
== ':' || c
== ';' || c
== '\0')
349 else if (level
== 0 && isalpha(c
))
353 if (!PySequence_Check(arg
) || PyString_Check(arg
)) {
355 PyOS_snprintf(msgbuf
, bufsize
,
356 toplevel
? "expected %d arguments, not %.50s" :
357 "must be %d-item sequence, not %.50s",
359 arg
== Py_None
? "None" : arg
->ob_type
->tp_name
);
363 if ((i
= PySequence_Size(arg
)) != n
) {
365 PyOS_snprintf(msgbuf
, bufsize
,
366 toplevel
? "expected %d arguments, not %d" :
367 "must be sequence of length %d, not %d",
373 for (i
= 0; i
< n
; i
++) {
376 item
= PySequence_GetItem(arg
, i
);
377 msg
= convertitem(item
, &format
, p_va
, levels
+1, msgbuf
,
379 /* PySequence_GetItem calls tp->sq_item, which INCREFs */
392 /* Convert a single item. */
395 convertitem(PyObject
*arg
, char **p_format
, va_list *p_va
, int *levels
,
396 char *msgbuf
, size_t bufsize
, PyObject
**freelist
)
399 char *format
= *p_format
;
401 if (*format
== '(' /* ')' */) {
403 msg
= converttuple(arg
, &format
, p_va
, levels
, msgbuf
,
404 bufsize
, 0, freelist
);
409 msg
= convertsimple(arg
, &format
, p_va
, msgbuf
, bufsize
,
421 #define UNICODE_DEFAULT_ENCODING(arg) \
422 _PyUnicode_AsDefaultEncodedString(arg, NULL)
424 /* Format an error message generated by convertsimple(). */
427 converterr(char *expected
, PyObject
*arg
, char *msgbuf
, size_t bufsize
)
429 assert(expected
!= NULL
);
431 PyOS_snprintf(msgbuf
, bufsize
,
432 "must be %.50s, not %.50s", expected
,
433 arg
== Py_None
? "None" : arg
->ob_type
->tp_name
);
437 #define CONV_UNICODE "(unicode conversion error)"
439 /* explicitly check for float arguments when integers are expected. For now
440 * signal a warning. Returns true if an exception was raised. */
442 float_argument_error(PyObject
*arg
)
444 if (PyFloat_Check(arg
) &&
445 PyErr_Warn(PyExc_DeprecationWarning
,
446 "integer argument expected, got float" ))
452 /* Convert a non-tuple argument. Return NULL if conversion went OK,
453 or a string with a message describing the failure. The message is
454 formatted as "must be <desired type>, not <actual type>".
455 When failing, an exception may or may not have been raised.
456 Don't call if a tuple is expected.
460 convertsimple(PyObject
*arg
, char **p_format
, va_list *p_va
, char *msgbuf
,
461 size_t bufsize
, PyObject
**freelist
)
463 char *format
= *p_format
;
465 #ifdef Py_USING_UNICODE
471 case 'b': { /* unsigned byte -- very short int */
472 char *p
= va_arg(*p_va
, char *);
474 if (float_argument_error(arg
))
475 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
476 ival
= PyInt_AsLong(arg
);
477 if (ival
== -1 && PyErr_Occurred())
478 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
480 PyErr_SetString(PyExc_OverflowError
,
481 "unsigned byte integer is less than minimum");
482 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
484 else if (ival
> UCHAR_MAX
) {
485 PyErr_SetString(PyExc_OverflowError
,
486 "unsigned byte integer is greater than maximum");
487 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
490 *p
= (unsigned char) ival
;
494 case 'B': {/* byte sized bitfield - both signed and unsigned
496 char *p
= va_arg(*p_va
, char *);
498 if (float_argument_error(arg
))
499 return converterr("integer<B>", arg
, msgbuf
, bufsize
);
500 ival
= PyInt_AsUnsignedLongMask(arg
);
501 if (ival
== -1 && PyErr_Occurred())
502 return converterr("integer<B>", arg
, msgbuf
, bufsize
);
504 *p
= (unsigned char) ival
;
508 case 'h': {/* signed short int */
509 short *p
= va_arg(*p_va
, short *);
511 if (float_argument_error(arg
))
512 return converterr("integer<h>", arg
, msgbuf
, bufsize
);
513 ival
= PyInt_AsLong(arg
);
514 if (ival
== -1 && PyErr_Occurred())
515 return converterr("integer<h>", arg
, msgbuf
, bufsize
);
516 else if (ival
< SHRT_MIN
) {
517 PyErr_SetString(PyExc_OverflowError
,
518 "signed short integer is less than minimum");
519 return converterr("integer<h>", arg
, msgbuf
, bufsize
);
521 else if (ival
> SHRT_MAX
) {
522 PyErr_SetString(PyExc_OverflowError
,
523 "signed short integer is greater than maximum");
524 return converterr("integer<h>", arg
, msgbuf
, bufsize
);
531 case 'H': { /* short int sized bitfield, both signed and
533 unsigned short *p
= va_arg(*p_va
, unsigned short *);
535 if (float_argument_error(arg
))
536 return converterr("integer<H>", arg
, msgbuf
, bufsize
);
537 ival
= PyInt_AsUnsignedLongMask(arg
);
538 if (ival
== -1 && PyErr_Occurred())
539 return converterr("integer<H>", arg
, msgbuf
, bufsize
);
541 *p
= (unsigned short) ival
;
545 case 'i': {/* signed int */
546 int *p
= va_arg(*p_va
, int *);
548 if (float_argument_error(arg
))
549 return converterr("integer<i>", arg
, msgbuf
, bufsize
);
550 ival
= PyInt_AsLong(arg
);
551 if (ival
== -1 && PyErr_Occurred())
552 return converterr("integer<i>", arg
, msgbuf
, bufsize
);
553 else if (ival
> INT_MAX
) {
554 PyErr_SetString(PyExc_OverflowError
,
555 "signed integer is greater than maximum");
556 return converterr("integer<i>", arg
, msgbuf
, bufsize
);
558 else if (ival
< INT_MIN
) {
559 PyErr_SetString(PyExc_OverflowError
,
560 "signed integer is less than minimum");
561 return converterr("integer<i>", arg
, msgbuf
, bufsize
);
568 case 'I': { /* int sized bitfield, both signed and
570 unsigned int *p
= va_arg(*p_va
, unsigned int *);
572 if (float_argument_error(arg
))
573 return converterr("integer<I>", arg
, msgbuf
, bufsize
);
574 ival
= PyInt_AsUnsignedLongMask(arg
);
575 if (ival
== -1 && PyErr_Occurred())
576 return converterr("integer<I>", arg
, msgbuf
, bufsize
);
582 case 'l': {/* long int */
583 long *p
= va_arg(*p_va
, long *);
585 if (float_argument_error(arg
))
586 return converterr("integer<l>", arg
, msgbuf
, bufsize
);
587 ival
= PyInt_AsLong(arg
);
588 if (ival
== -1 && PyErr_Occurred())
589 return converterr("integer<l>", arg
, msgbuf
, bufsize
);
595 case 'k': { /* long sized bitfield */
596 unsigned long *p
= va_arg(*p_va
, unsigned long *);
598 if (PyInt_Check(arg
))
599 ival
= PyInt_AsUnsignedLongMask(arg
);
600 else if (PyLong_Check(arg
))
601 ival
= PyLong_AsUnsignedLongMask(arg
);
603 return converterr("integer<k>", arg
, msgbuf
, bufsize
);
608 #ifdef HAVE_LONG_LONG
609 case 'L': {/* PY_LONG_LONG */
610 PY_LONG_LONG
*p
= va_arg( *p_va
, PY_LONG_LONG
* );
611 PY_LONG_LONG ival
= PyLong_AsLongLong( arg
);
612 if( ival
== (PY_LONG_LONG
)-1 && PyErr_Occurred() ) {
613 return converterr("long<L>", arg
, msgbuf
, bufsize
);
620 case 'K': { /* long long sized bitfield */
621 unsigned PY_LONG_LONG
*p
= va_arg(*p_va
, unsigned PY_LONG_LONG
*);
622 unsigned PY_LONG_LONG ival
;
623 if (PyInt_Check(arg
))
624 ival
= PyInt_AsUnsignedLongMask(arg
);
625 else if (PyLong_Check(arg
))
626 ival
= PyLong_AsUnsignedLongLongMask(arg
);
628 return converterr("integer<K>", arg
, msgbuf
, bufsize
);
634 case 'f': {/* float */
635 float *p
= va_arg(*p_va
, float *);
636 double dval
= PyFloat_AsDouble(arg
);
637 if (PyErr_Occurred())
638 return converterr("float<f>", arg
, msgbuf
, bufsize
);
644 case 'd': {/* double */
645 double *p
= va_arg(*p_va
, double *);
646 double dval
= PyFloat_AsDouble(arg
);
647 if (PyErr_Occurred())
648 return converterr("float<d>", arg
, msgbuf
, bufsize
);
654 #ifndef WITHOUT_COMPLEX
655 case 'D': {/* complex double */
656 Py_complex
*p
= va_arg(*p_va
, Py_complex
*);
658 cval
= PyComplex_AsCComplex(arg
);
659 if (PyErr_Occurred())
660 return converterr("complex<D>", arg
, msgbuf
, bufsize
);
665 #endif /* WITHOUT_COMPLEX */
667 case 'c': {/* char */
668 char *p
= va_arg(*p_va
, char *);
669 if (PyString_Check(arg
) && PyString_Size(arg
) == 1)
670 *p
= PyString_AS_STRING(arg
)[0];
672 return converterr("char", arg
, msgbuf
, bufsize
);
676 case 's': {/* string */
677 if (*format
== '#') {
678 void **p
= (void **)va_arg(*p_va
, char **);
679 int *q
= va_arg(*p_va
, int *);
681 if (PyString_Check(arg
)) {
682 *p
= PyString_AS_STRING(arg
);
683 *q
= PyString_GET_SIZE(arg
);
685 #ifdef Py_USING_UNICODE
686 else if (PyUnicode_Check(arg
)) {
687 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
689 return converterr(CONV_UNICODE
,
690 arg
, msgbuf
, bufsize
);
691 *p
= PyString_AS_STRING(uarg
);
692 *q
= PyString_GET_SIZE(uarg
);
695 else { /* any buffer-like object */
697 int count
= convertbuffer(arg
, p
, &buf
);
699 return converterr(buf
, arg
, msgbuf
, bufsize
);
704 char **p
= va_arg(*p_va
, char **);
706 if (PyString_Check(arg
))
707 *p
= PyString_AS_STRING(arg
);
708 #ifdef Py_USING_UNICODE
709 else if (PyUnicode_Check(arg
)) {
710 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
712 return converterr(CONV_UNICODE
,
713 arg
, msgbuf
, bufsize
);
714 *p
= PyString_AS_STRING(uarg
);
718 return converterr("string", arg
, msgbuf
, bufsize
);
719 if ((int)strlen(*p
) != PyString_Size(arg
))
720 return converterr("string without null bytes",
721 arg
, msgbuf
, bufsize
);
726 case 'z': {/* string, may be NULL (None) */
727 if (*format
== '#') { /* any buffer-like object */
728 void **p
= (void **)va_arg(*p_va
, char **);
729 int *q
= va_arg(*p_va
, int *);
731 if (arg
== Py_None
) {
735 else if (PyString_Check(arg
)) {
736 *p
= PyString_AS_STRING(arg
);
737 *q
= PyString_GET_SIZE(arg
);
739 #ifdef Py_USING_UNICODE
740 else if (PyUnicode_Check(arg
)) {
741 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
743 return converterr(CONV_UNICODE
,
744 arg
, msgbuf
, bufsize
);
745 *p
= PyString_AS_STRING(uarg
);
746 *q
= PyString_GET_SIZE(uarg
);
749 else { /* any buffer-like object */
751 int count
= convertbuffer(arg
, p
, &buf
);
753 return converterr(buf
, arg
, msgbuf
, bufsize
);
758 char **p
= va_arg(*p_va
, char **);
762 else if (PyString_Check(arg
))
763 *p
= PyString_AS_STRING(arg
);
764 #ifdef Py_USING_UNICODE
765 else if (PyUnicode_Check(arg
)) {
766 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
768 return converterr(CONV_UNICODE
,
769 arg
, msgbuf
, bufsize
);
770 *p
= PyString_AS_STRING(uarg
);
774 return converterr("string or None",
775 arg
, msgbuf
, bufsize
);
776 if (*format
== '#') {
777 int *q
= va_arg(*p_va
, int *);
781 *q
= PyString_Size(arg
);
784 else if (*p
!= NULL
&&
785 (int)strlen(*p
) != PyString_Size(arg
))
787 "string without null bytes or None",
788 arg
, msgbuf
, bufsize
);
793 case 'e': {/* encoded string */
795 const char *encoding
;
797 int size
, recode_strings
;
799 /* Get 'e' parameter: the encoding name */
800 encoding
= (const char *)va_arg(*p_va
, const char *);
801 #ifdef Py_USING_UNICODE
802 if (encoding
== NULL
)
803 encoding
= PyUnicode_GetDefaultEncoding();
806 /* Get output buffer parameter:
807 's' (recode all objects via Unicode) or
808 't' (only recode non-string objects)
812 else if (*format
== 't')
816 "(unknown parser marker combination)",
817 arg
, msgbuf
, bufsize
);
818 buffer
= (char **)va_arg(*p_va
, char **);
821 return converterr("(buffer is NULL)",
822 arg
, msgbuf
, bufsize
);
825 if (!recode_strings
&& PyString_Check(arg
)) {
830 #ifdef Py_USING_UNICODE
833 /* Convert object to Unicode */
834 u
= PyUnicode_FromObject(arg
);
837 "string or unicode or text buffer",
838 arg
, msgbuf
, bufsize
);
840 /* Encode object; use default error handling */
841 s
= PyUnicode_AsEncodedString(u
,
846 return converterr("(encoding failed)",
847 arg
, msgbuf
, bufsize
);
848 if (!PyString_Check(s
)) {
851 "(encoder failed to return a string)",
852 arg
, msgbuf
, bufsize
);
855 return converterr("string<e>", arg
, msgbuf
, bufsize
);
858 size
= PyString_GET_SIZE(s
);
860 /* Write output; output is guaranteed to be 0-terminated */
861 if (*format
== '#') {
862 /* Using buffer length parameter '#':
864 - if *buffer is NULL, a new buffer of the
865 needed size is allocated and the data
866 copied into it; *buffer is updated to point
867 to the new buffer; the caller is
868 responsible for PyMem_Free()ing it after
871 - if *buffer is not NULL, the data is
872 copied to *buffer; *buffer_len has to be
873 set to the size of the buffer on input;
874 buffer overflow is signalled with an error;
875 buffer has to provide enough room for the
876 encoded string plus the trailing 0-byte
878 - in both cases, *buffer_len is updated to
879 the size of the buffer /excluding/ the
883 int *buffer_len
= va_arg(*p_va
, int *);
886 if (buffer_len
== NULL
) {
889 "(buffer_len is NULL)",
890 arg
, msgbuf
, bufsize
);
892 if (*buffer
== NULL
) {
893 *buffer
= PyMem_NEW(char, size
+ 1);
894 if (*buffer
== NULL
) {
898 arg
, msgbuf
, bufsize
);
900 if(addcleanup(*buffer
, freelist
)) {
904 arg
, msgbuf
, bufsize
);
907 if (size
+ 1 > *buffer_len
) {
911 arg
, msgbuf
, bufsize
);
915 PyString_AS_STRING(s
),
919 /* Using a 0-terminated buffer:
921 - the encoded string has to be 0-terminated
922 for this variant to work; if it is not, an
925 - a new buffer of the needed size is
926 allocated and the data copied into it;
927 *buffer is updated to point to the new
928 buffer; the caller is responsible for
929 PyMem_Free()ing it after usage
932 if ((int)strlen(PyString_AS_STRING(s
)) != size
) {
935 "(encoded string without NULL bytes)",
936 arg
, msgbuf
, bufsize
);
938 *buffer
= PyMem_NEW(char, size
+ 1);
939 if (*buffer
== NULL
) {
941 return converterr("(memory error)",
942 arg
, msgbuf
, bufsize
);
944 if(addcleanup(*buffer
, freelist
)) {
946 return converterr("(cleanup problem)",
947 arg
, msgbuf
, bufsize
);
950 PyString_AS_STRING(s
),
957 #ifdef Py_USING_UNICODE
958 case 'u': {/* raw unicode buffer (Py_UNICODE *) */
959 if (*format
== '#') { /* any buffer-like object */
960 void **p
= (void **)va_arg(*p_va
, char **);
961 int *q
= va_arg(*p_va
, int *);
962 if (PyUnicode_Check(arg
)) {
963 *p
= PyUnicode_AS_UNICODE(arg
);
964 *q
= PyUnicode_GET_SIZE(arg
);
968 int count
= convertbuffer(arg
, p
, &buf
);
970 return converterr(buf
, arg
, msgbuf
, bufsize
);
971 *q
= count
/(sizeof(Py_UNICODE
));
975 Py_UNICODE
**p
= va_arg(*p_va
, Py_UNICODE
**);
976 if (PyUnicode_Check(arg
))
977 *p
= PyUnicode_AS_UNICODE(arg
);
979 return converterr("unicode", arg
, msgbuf
, bufsize
);
985 case 'S': { /* string object */
986 PyObject
**p
= va_arg(*p_va
, PyObject
**);
987 if (PyString_Check(arg
))
990 return converterr("string", arg
, msgbuf
, bufsize
);
994 #ifdef Py_USING_UNICODE
995 case 'U': { /* Unicode object */
996 PyObject
**p
= va_arg(*p_va
, PyObject
**);
997 if (PyUnicode_Check(arg
))
1000 return converterr("unicode", arg
, msgbuf
, bufsize
);
1005 case 'O': { /* object */
1008 if (*format
== '!') {
1009 type
= va_arg(*p_va
, PyTypeObject
*);
1010 p
= va_arg(*p_va
, PyObject
**);
1012 if (PyType_IsSubtype(arg
->ob_type
, type
))
1015 return converterr(type
->tp_name
, arg
, msgbuf
, bufsize
);
1018 else if (*format
== '?') {
1019 inquiry pred
= va_arg(*p_va
, inquiry
);
1020 p
= va_arg(*p_va
, PyObject
**);
1025 return converterr("(unspecified)",
1026 arg
, msgbuf
, bufsize
);
1029 else if (*format
== '&') {
1030 typedef int (*converter
)(PyObject
*, void *);
1031 converter convert
= va_arg(*p_va
, converter
);
1032 void *addr
= va_arg(*p_va
, void *);
1034 if (! (*convert
)(arg
, addr
))
1035 return converterr("(unspecified)",
1036 arg
, msgbuf
, bufsize
);
1039 p
= va_arg(*p_va
, PyObject
**);
1046 case 'w': { /* memory buffer, read-write access */
1047 void **p
= va_arg(*p_va
, void **);
1048 PyBufferProcs
*pb
= arg
->ob_type
->tp_as_buffer
;
1052 pb
->bf_getwritebuffer
== NULL
||
1053 pb
->bf_getsegcount
== NULL
)
1054 return converterr("read-write buffer", arg
, msgbuf
, bufsize
);
1055 if ((*pb
->bf_getsegcount
)(arg
, NULL
) != 1)
1056 return converterr("single-segment read-write buffer",
1057 arg
, msgbuf
, bufsize
);
1058 if ((count
= pb
->bf_getwritebuffer(arg
, 0, p
)) < 0)
1059 return converterr("(unspecified)", arg
, msgbuf
, bufsize
);
1060 if (*format
== '#') {
1061 int *q
= va_arg(*p_va
, int *);
1069 case 't': { /* 8-bit character buffer, read-only access */
1070 const char **p
= va_arg(*p_va
, const char **);
1071 PyBufferProcs
*pb
= arg
->ob_type
->tp_as_buffer
;
1074 if (*format
++ != '#')
1076 "invalid use of 't' format character",
1077 arg
, msgbuf
, bufsize
);
1078 if (!PyType_HasFeature(arg
->ob_type
,
1079 Py_TPFLAGS_HAVE_GETCHARBUFFER
) ||
1080 pb
== NULL
|| pb
->bf_getcharbuffer
== NULL
||
1081 pb
->bf_getsegcount
== NULL
)
1083 "string or read-only character buffer",
1084 arg
, msgbuf
, bufsize
);
1086 if (pb
->bf_getsegcount(arg
, NULL
) != 1)
1088 "string or single-segment read-only buffer",
1089 arg
, msgbuf
, bufsize
);
1091 count
= pb
->bf_getcharbuffer(arg
, 0, p
);
1093 return converterr("(unspecified)", arg
, msgbuf
, bufsize
);
1094 *va_arg(*p_va
, int *) = count
;
1099 return converterr("impossible<bad format char>", arg
, msgbuf
, bufsize
);
1108 convertbuffer(PyObject
*arg
, void **p
, char **errmsg
)
1110 PyBufferProcs
*pb
= arg
->ob_type
->tp_as_buffer
;
1113 pb
->bf_getreadbuffer
== NULL
||
1114 pb
->bf_getsegcount
== NULL
) {
1115 *errmsg
= "string or read-only buffer";
1118 if ((*pb
->bf_getsegcount
)(arg
, NULL
) != 1) {
1119 *errmsg
= "string or single-segment read-only buffer";
1122 if ((count
= (*pb
->bf_getreadbuffer
)(arg
, 0, p
)) < 0) {
1123 *errmsg
= "(unspecified)";
1128 /* Support for keyword arguments donated by
1129 Geoff Philbrick <philbric@delphi.hks.com> */
1131 /* Return false (0) for error, else true. */
1133 PyArg_ParseTupleAndKeywords(PyObject
*args
,
1141 if ((args
== NULL
|| !PyTuple_Check(args
)) ||
1142 (keywords
!= NULL
&& !PyDict_Check(keywords
)) ||
1146 PyErr_BadInternalCall();
1150 va_start(va
, kwlist
);
1151 retval
= vgetargskeywords(args
, keywords
, format
, kwlist
, &va
);
1158 PyArg_VaParseTupleAndKeywords(PyObject
*args
,
1161 char **kwlist
, va_list va
)
1166 if ((args
== NULL
|| !PyTuple_Check(args
)) ||
1167 (keywords
!= NULL
&& !PyDict_Check(keywords
)) ||
1171 PyErr_BadInternalCall();
1175 #ifdef VA_LIST_IS_ARRAY
1176 memcpy(lva
, va
, sizeof(va_list));
1185 retval
= vgetargskeywords(args
, keywords
, format
, kwlist
, &lva
);
1191 vgetargskeywords(PyObject
*args
, PyObject
*keywords
, char *format
,
1192 char **kwlist
, va_list *p_va
)
1196 char *fname
, *message
;
1199 int i
, len
, nargs
, nkeywords
;
1201 PyObject
*freelist
= NULL
;
1203 assert(args
!= NULL
&& PyTuple_Check(args
));
1204 assert(keywords
== NULL
|| PyDict_Check(keywords
));
1205 assert(format
!= NULL
);
1206 assert(kwlist
!= NULL
);
1207 assert(p_va
!= NULL
);
1209 /* Search the format:
1210 message <- error msg, if any (else NULL).
1211 fname <- routine name, if any (else NULL).
1212 min <- # of required arguments, or -1 if all are required.
1213 max <- most arguments (required + optional).
1214 Check that kwlist has a non-NULL entry for each arg.
1215 Raise error if a tuple arg spec is found.
1217 fname
= message
= NULL
;
1218 formatsave
= format
;
1222 while ((i
= *format
++) != '\0') {
1223 if (isalpha(i
) && i
!= 'e') {
1226 PyErr_SetString(PyExc_RuntimeError
,
1227 "more argument specifiers than "
1228 "keyword list entries");
1235 else if (i
== ':') {
1239 else if (i
== ';') {
1243 else if (i
== '(') {
1244 PyErr_SetString(PyExc_RuntimeError
,
1245 "tuple found in format when using keyword "
1250 format
= formatsave
;
1252 PyErr_SetString(PyExc_RuntimeError
,
1253 "more keyword list entries than "
1254 "argument specifiers");
1258 /* All arguments are required. */
1262 nargs
= PyTuple_GET_SIZE(args
);
1263 nkeywords
= keywords
== NULL
? 0 : PyDict_Size(keywords
);
1265 /* make sure there are no duplicate values for an argument;
1266 its not clear when to use the term "keyword argument vs.
1267 keyword parameter in messages */
1268 if (nkeywords
> 0) {
1269 for (i
= 0; i
< nargs
; i
++) {
1270 char *thiskw
= kwlist
[i
];
1273 if (PyDict_GetItemString(keywords
, thiskw
)) {
1274 PyErr_Format(PyExc_TypeError
,
1275 "keyword parameter '%s' was given "
1276 "by position and by name",
1280 else if (PyErr_Occurred())
1285 /* required arguments missing from args can be supplied by keyword
1286 arguments; set len to the number of posiitional arguments, and,
1287 if that's less than the minimum required, add in the number of
1288 required arguments that are supplied by keywords */
1290 if (nkeywords
> 0 && nargs
< min
) {
1291 for (i
= nargs
; i
< min
; i
++) {
1292 if (PyDict_GetItemString(keywords
, kwlist
[i
]))
1294 else if (PyErr_Occurred())
1299 /* make sure we got an acceptable number of arguments; the message
1300 is a little confusing with keywords since keyword arguments
1301 which are supplied, but don't match the required arguments
1302 are not included in the "%d given" part of the message */
1303 if (len
< min
|| max
< len
) {
1304 if (message
== NULL
) {
1305 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
1306 "%.200s%s takes %s %d argument%s "
1308 fname
==NULL
? "function" : fname
,
1309 fname
==NULL
? "" : "()",
1310 min
==max
? "exactly"
1311 : len
< min
? "at least" : "at most",
1312 len
< min
? min
: max
,
1313 (len
< min
? min
: max
) == 1 ? "" : "s",
1317 PyErr_SetString(PyExc_TypeError
, message
);
1321 /* convert the positional arguments */
1322 for (i
= 0; i
< nargs
; i
++) {
1325 msg
= convertitem(PyTuple_GET_ITEM(args
, i
), &format
, p_va
,
1326 levels
, msgbuf
, sizeof(msgbuf
), &freelist
);
1328 seterror(i
+1, msg
, levels
, fname
, message
);
1329 return cleanreturn(0, freelist
);
1333 /* handle no keyword parameters in call */
1335 return cleanreturn(1, freelist
);
1337 /* convert the keyword arguments; this uses the format
1338 string where it was left after processing args */
1339 for (i
= nargs
; i
< max
; i
++) {
1343 item
= PyDict_GetItemString(keywords
, kwlist
[i
]);
1346 msg
= convertitem(item
, &format
, p_va
, levels
, msgbuf
,
1347 sizeof(msgbuf
), &freelist
);
1350 seterror(i
+1, msg
, levels
, fname
, message
);
1351 return cleanreturn(0, freelist
);
1357 else if (PyErr_Occurred())
1358 return cleanreturn(0, freelist
);
1360 msg
= skipitem(&format
, p_va
);
1362 seterror(i
+1, msg
, levels
, fname
, message
);
1363 return cleanreturn(0, freelist
);
1368 /* make sure there are no extraneous keyword arguments */
1369 if (nkeywords
> 0) {
1370 PyObject
*key
, *value
;
1372 while (PyDict_Next(keywords
, &pos
, &key
, &value
)) {
1375 if (!PyString_Check(key
)) {
1376 PyErr_SetString(PyExc_TypeError
,
1377 "keywords must be strings");
1378 return cleanreturn(0, freelist
);
1380 ks
= PyString_AsString(key
);
1381 for (i
= 0; i
< max
; i
++) {
1382 if (!strcmp(ks
, kwlist
[i
])) {
1388 PyErr_Format(PyExc_TypeError
,
1389 "'%s' is an invalid keyword "
1390 "argument for this function",
1392 return cleanreturn(0, freelist
);
1397 return cleanreturn(1, freelist
);
1402 skipitem(char **p_format
, va_list *p_va
)
1404 char *format
= *p_format
;
1409 case 'b': /* byte -- very short int */
1410 case 'B': /* byte as bitfield */
1412 (void) va_arg(*p_va
, char *);
1416 case 'h': /* short int */
1418 (void) va_arg(*p_va
, short *);
1422 case 'H': /* short int as bitfield */
1424 (void) va_arg(*p_va
, unsigned short *);
1430 (void) va_arg(*p_va
, int *);
1434 case 'l': /* long int */
1436 (void) va_arg(*p_va
, long *);
1440 #ifdef HAVE_LONG_LONG
1441 case 'L': /* PY_LONG_LONG int */
1443 (void) va_arg(*p_va
, PY_LONG_LONG
*);
1448 case 'f': /* float */
1450 (void) va_arg(*p_va
, float *);
1454 case 'd': /* double */
1456 (void) va_arg(*p_va
, double *);
1460 #ifndef WITHOUT_COMPLEX
1461 case 'D': /* complex double */
1463 (void) va_arg(*p_va
, Py_complex
*);
1466 #endif /* WITHOUT_COMPLEX */
1468 case 'c': /* char */
1470 (void) va_arg(*p_va
, char *);
1474 case 's': /* string */
1476 (void) va_arg(*p_va
, char **);
1477 if (*format
== '#') {
1478 (void) va_arg(*p_va
, int *);
1484 case 'z': /* string */
1486 (void) va_arg(*p_va
, char **);
1487 if (*format
== '#') {
1488 (void) va_arg(*p_va
, int *);
1494 case 'S': /* string object */
1496 (void) va_arg(*p_va
, PyObject
**);
1500 case 'O': /* object */
1502 if (*format
== '!') {
1504 (void) va_arg(*p_va
, PyTypeObject
*);
1505 (void) va_arg(*p_va
, PyObject
**);
1508 /* I don't know what this is for */
1509 else if (*format
== '?') {
1510 inquiry pred
= va_arg(*p_va
, inquiry
);
1513 (void) va_arg(*p_va
, PyObject
**);
1517 else if (*format
== '&') {
1518 typedef int (*converter
)(PyObject
*, void *);
1519 (void) va_arg(*p_va
, converter
);
1520 (void) va_arg(*p_va
, void *);
1524 (void) va_arg(*p_va
, PyObject
**);
1530 return "impossible<bad format char>";
1540 PyArg_UnpackTuple(PyObject
*args
, char *name
, int min
, int max
, ...)
1546 #ifdef HAVE_STDARG_PROTOTYPES
1547 va_start(vargs
, max
);
1554 if (!PyTuple_Check(args
)) {
1555 PyErr_SetString(PyExc_SystemError
,
1556 "PyArg_UnpackTuple() argument list is not a tuple");
1559 l
= PyTuple_GET_SIZE(args
);
1564 "%s expected %s%d arguments, got %d",
1565 name
, (min
== max
? "" : "at least "), min
, l
);
1569 "unpacked tuple should have %s%d elements,"
1571 (min
== max
? "" : "at least "), min
, l
);
1579 "%s expected %s%d arguments, got %d",
1580 name
, (min
== max
? "" : "at most "), max
, l
);
1584 "unpacked tuple should have %s%d elements,"
1586 (min
== max
? "" : "at most "), max
, l
);
1590 for (i
= 0; i
< l
; i
++) {
1591 o
= va_arg(vargs
, PyObject
**);
1592 *o
= PyTuple_GET_ITEM(args
, i
);