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 **, ...);
17 static int vgetargs1(PyObject
*, char *, va_list *, int);
18 static void seterror(int, char *, int *, char *, char *);
19 static char *convertitem(PyObject
*, char **, va_list *, int *, char *,
21 static char *converttuple(PyObject
*, char **, va_list *,
22 int *, char *, size_t, int, PyObject
**);
23 static char *convertsimple(PyObject
*, char **, va_list *, char *,
25 static int convertbuffer(PyObject
*, void **p
, char **);
27 static int vgetargskeywords(PyObject
*, PyObject
*,
28 char *, char **, va_list *);
29 static char *skipitem(char **, va_list *);
32 PyArg_Parse(PyObject
*args
, char *format
, ...)
38 retval
= vgetargs1(args
, format
, &va
, 1);
45 PyArg_ParseTuple(PyObject
*args
, char *format
, ...)
51 retval
= vgetargs1(args
, format
, &va
, 0);
58 PyArg_VaParse(PyObject
*args
, char *format
, va_list va
)
62 #ifdef VA_LIST_IS_ARRAY
63 memcpy(lva
, va
, sizeof(va_list));
72 return vgetargs1(args
, format
, &lva
, 0);
76 /* Handle cleanup of allocated memory in case of exception */
79 addcleanup(void *ptr
, PyObject
**freelist
)
83 *freelist
= PyList_New(0);
89 cobj
= PyCObject_FromVoidPtr(ptr
, NULL
);
94 if(PyList_Append(*freelist
, cobj
)) {
104 cleanreturn(int retval
, PyObject
*freelist
)
108 int len
= PyList_GET_SIZE(freelist
), i
;
109 for (i
= 0; i
< len
; i
++)
110 PyMem_FREE(PyCObject_AsVoidPtr(
111 PyList_GET_ITEM(freelist
, i
)));
120 vgetargs1(PyObject
*args
, char *format
, va_list *p_va
, int compat
)
125 char *message
= NULL
;
130 char *formatsave
= format
;
133 PyObject
*freelist
= NULL
;
135 assert(compat
|| (args
!= (PyObject
*)NULL
));
137 while (endfmt
== 0) {
147 Py_FatalError("excess ')' in getargs format");
166 else if (isalpha(c
)) {
167 if (c
!= 'e') /* skip encoded */
177 Py_FatalError(/* '(' */ "missing ')' in getargs format");
188 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
189 "%.200s%s takes no arguments",
190 fname
==NULL
? "function" : fname
,
191 fname
==NULL
? "" : "()");
192 PyErr_SetString(PyExc_TypeError
, msgbuf
);
195 else if (min
== 1 && max
== 1) {
197 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
198 "%.200s%s takes at least one argument",
199 fname
==NULL
? "function" : fname
,
200 fname
==NULL
? "" : "()");
201 PyErr_SetString(PyExc_TypeError
, msgbuf
);
204 msg
= convertitem(args
, &format
, p_va
, levels
, msgbuf
,
205 sizeof(msgbuf
), &freelist
);
207 return cleanreturn(1, freelist
);
208 seterror(levels
[0], msg
, levels
+1, fname
, message
);
209 return cleanreturn(0, freelist
);
212 PyErr_SetString(PyExc_SystemError
,
213 "old style getargs format uses new features");
218 if (!PyTuple_Check(args
)) {
219 PyErr_SetString(PyExc_SystemError
,
220 "new style getargs format but argument is not a tuple");
224 len
= PyTuple_GET_SIZE(args
);
226 if (len
< min
|| max
< len
) {
227 if (message
== NULL
) {
228 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
229 "%.150s%s takes %s %d argument%s "
231 fname
==NULL
? "function" : fname
,
232 fname
==NULL
? "" : "()",
234 : len
< min
? "at least" : "at most",
235 len
< min
? min
: max
,
236 (len
< min
? min
: max
) == 1 ? "" : "s",
240 PyErr_SetString(PyExc_TypeError
, message
);
244 for (i
= 0; i
< len
; i
++) {
247 msg
= convertitem(PyTuple_GET_ITEM(args
, i
), &format
, p_va
,
248 levels
, msgbuf
, sizeof(msgbuf
), &freelist
);
250 seterror(i
+1, msg
, levels
, fname
, message
);
251 return cleanreturn(0, freelist
);
255 if (*format
!= '\0' && !isalpha((int)(*format
)) &&
257 *format
!= '|' && *format
!= ':' && *format
!= ';') {
258 PyErr_Format(PyExc_SystemError
,
259 "bad format string: %.200s", formatsave
);
260 return cleanreturn(0, freelist
);
263 return cleanreturn(1, freelist
);
269 seterror(int iarg
, char *msg
, int *levels
, char *fname
, char *message
)
275 if (PyErr_Occurred())
277 else if (message
== NULL
) {
279 PyOS_snprintf(p
, sizeof(buf
), "%.200s() ", fname
);
283 PyOS_snprintf(p
, sizeof(buf
) - (p
- buf
),
284 "argument %d", iarg
);
287 while (levels
[i
] > 0 && (int)(p
-buf
) < 220) {
288 PyOS_snprintf(p
, sizeof(buf
) - (buf
- p
),
289 ", item %d", levels
[i
]-1);
295 PyOS_snprintf(p
, sizeof(buf
) - (p
- buf
), "argument");
298 PyOS_snprintf(p
, sizeof(buf
) - (p
- buf
), " %.256s", msg
);
301 PyErr_SetString(PyExc_TypeError
, message
);
305 /* Convert a tuple argument.
306 On entry, *p_format points to the character _after_ the opening '('.
307 On successful exit, *p_format points to the closing ')'.
309 *p_format and *p_va are updated,
310 *levels and *msgbuf are untouched,
311 and NULL is returned.
312 If the argument is invalid:
313 *p_format is unchanged,
315 *levels is a 0-terminated list of item numbers,
316 *msgbuf contains an error message, whose format is:
317 "must be <typename1>, not <typename2>", where:
318 <typename1> is the name of the expected type, and
319 <typename2> is the name of the actual type,
320 and msgbuf is returned.
324 converttuple(PyObject
*arg
, char **p_format
, va_list *p_va
, int *levels
,
325 char *msgbuf
, size_t bufsize
, int toplevel
, PyObject
**freelist
)
329 char *format
= *p_format
;
344 else if (c
== ':' || c
== ';' || c
== '\0')
346 else if (level
== 0 && isalpha(c
))
350 if (!PySequence_Check(arg
) || PyString_Check(arg
)) {
352 PyOS_snprintf(msgbuf
, bufsize
,
353 toplevel
? "expected %d arguments, not %.50s" :
354 "must be %d-item sequence, not %.50s",
356 arg
== Py_None
? "None" : arg
->ob_type
->tp_name
);
360 if ((i
= PySequence_Size(arg
)) != n
) {
362 PyOS_snprintf(msgbuf
, bufsize
,
363 toplevel
? "expected %d arguments, not %d" :
364 "must be sequence of length %d, not %d",
370 for (i
= 0; i
< n
; i
++) {
373 item
= PySequence_GetItem(arg
, i
);
374 msg
= convertitem(item
, &format
, p_va
, levels
+1, msgbuf
,
376 /* PySequence_GetItem calls tp->sq_item, which INCREFs */
389 /* Convert a single item. */
392 convertitem(PyObject
*arg
, char **p_format
, va_list *p_va
, int *levels
,
393 char *msgbuf
, size_t bufsize
, PyObject
**freelist
)
396 char *format
= *p_format
;
398 if (*format
== '(' /* ')' */) {
400 msg
= converttuple(arg
, &format
, p_va
, levels
, msgbuf
,
401 bufsize
, 0, freelist
);
406 msg
= convertsimple(arg
, &format
, p_va
, msgbuf
, bufsize
,
418 #define UNICODE_DEFAULT_ENCODING(arg) \
419 _PyUnicode_AsDefaultEncodedString(arg, NULL)
421 /* Format an error message generated by convertsimple(). */
424 converterr(char *expected
, PyObject
*arg
, char *msgbuf
, size_t bufsize
)
426 assert(expected
!= NULL
);
428 PyOS_snprintf(msgbuf
, bufsize
,
429 "must be %.50s, not %.50s", expected
,
430 arg
== Py_None
? "None" : arg
->ob_type
->tp_name
);
434 #define CONV_UNICODE "(unicode conversion error)"
436 /* explicitly check for float arguments when integers are expected. For now
437 * signal a warning. Returns true if an exception was raised. */
439 float_argument_error(PyObject
*arg
)
441 if (PyFloat_Check(arg
) &&
442 PyErr_Warn(PyExc_DeprecationWarning
,
443 "integer argument expected, got float" ))
449 /* Convert a non-tuple argument. Return NULL if conversion went OK,
450 or a string with a message describing the failure. The message is
451 formatted as "must be <desired type>, not <actual type>".
452 When failing, an exception may or may not have been raised.
453 Don't call if a tuple is expected.
457 convertsimple(PyObject
*arg
, char **p_format
, va_list *p_va
, char *msgbuf
,
458 size_t bufsize
, PyObject
**freelist
)
460 char *format
= *p_format
;
462 #ifdef Py_USING_UNICODE
468 case 'b': { /* unsigned byte -- very short int */
469 char *p
= va_arg(*p_va
, char *);
471 if (float_argument_error(arg
))
473 ival
= PyInt_AsLong(arg
);
474 if (ival
== -1 && PyErr_Occurred())
475 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
477 PyErr_SetString(PyExc_OverflowError
,
478 "unsigned byte integer is less than minimum");
479 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
481 else if (ival
> UCHAR_MAX
) {
482 PyErr_SetString(PyExc_OverflowError
,
483 "unsigned byte integer is greater than maximum");
484 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
487 *p
= (unsigned char) ival
;
491 case 'B': {/* byte sized bitfield - both signed and unsigned
493 char *p
= va_arg(*p_va
, char *);
495 if (float_argument_error(arg
))
497 ival
= PyInt_AsUnsignedLongMask(arg
);
498 if (ival
== -1 && PyErr_Occurred())
499 return converterr("integer<B>", arg
, msgbuf
, bufsize
);
501 *p
= (unsigned char) ival
;
505 case 'h': {/* signed short int */
506 short *p
= va_arg(*p_va
, short *);
508 if (float_argument_error(arg
))
510 ival
= PyInt_AsLong(arg
);
511 if (ival
== -1 && PyErr_Occurred())
512 return converterr("integer<h>", arg
, msgbuf
, bufsize
);
513 else if (ival
< SHRT_MIN
) {
514 PyErr_SetString(PyExc_OverflowError
,
515 "signed short integer is less than minimum");
516 return converterr("integer<h>", arg
, msgbuf
, bufsize
);
518 else if (ival
> SHRT_MAX
) {
519 PyErr_SetString(PyExc_OverflowError
,
520 "signed short integer is greater than maximum");
521 return converterr("integer<h>", arg
, msgbuf
, bufsize
);
528 case 'H': { /* short int sized bitfield, both signed and
530 unsigned short *p
= va_arg(*p_va
, unsigned short *);
532 if (float_argument_error(arg
))
534 ival
= PyInt_AsUnsignedLongMask(arg
);
535 if (ival
== -1 && PyErr_Occurred())
536 return converterr("integer<H>", arg
, msgbuf
, bufsize
);
538 *p
= (unsigned short) ival
;
542 case 'i': {/* signed int */
543 int *p
= va_arg(*p_va
, int *);
545 if (float_argument_error(arg
))
547 ival
= PyInt_AsLong(arg
);
548 if (ival
== -1 && PyErr_Occurred())
549 return converterr("integer<i>", arg
, msgbuf
, bufsize
);
550 else if (ival
> INT_MAX
) {
551 PyErr_SetString(PyExc_OverflowError
,
552 "signed integer is greater than maximum");
553 return converterr("integer<i>", arg
, msgbuf
, bufsize
);
555 else if (ival
< INT_MIN
) {
556 PyErr_SetString(PyExc_OverflowError
,
557 "signed integer is less than minimum");
558 return converterr("integer<i>", arg
, msgbuf
, bufsize
);
565 case 'I': { /* int sized bitfield, both signed and
567 unsigned int *p
= va_arg(*p_va
, unsigned int *);
569 if (float_argument_error(arg
))
571 ival
= PyInt_AsUnsignedLongMask(arg
);
572 if (ival
== -1 && PyErr_Occurred())
573 return converterr("integer<I>", arg
, msgbuf
, bufsize
);
579 case 'l': {/* long int */
580 long *p
= va_arg(*p_va
, long *);
582 if (float_argument_error(arg
))
584 ival
= PyInt_AsLong(arg
);
585 if (ival
== -1 && PyErr_Occurred())
586 return converterr("integer<l>", arg
, msgbuf
, bufsize
);
592 case 'k': { /* long sized bitfield */
593 unsigned long *p
= va_arg(*p_va
, unsigned long *);
595 if (PyInt_Check(arg
))
596 ival
= PyInt_AsUnsignedLongMask(arg
);
597 else if (PyLong_Check(arg
))
598 ival
= PyLong_AsUnsignedLongMask(arg
);
600 return converterr("integer<k>", arg
, msgbuf
, bufsize
);
605 #ifdef HAVE_LONG_LONG
606 case 'L': {/* PY_LONG_LONG */
607 PY_LONG_LONG
*p
= va_arg( *p_va
, PY_LONG_LONG
* );
608 PY_LONG_LONG ival
= PyLong_AsLongLong( arg
);
609 if( ival
== (PY_LONG_LONG
)-1 && PyErr_Occurred() ) {
610 return converterr("long<L>", arg
, msgbuf
, bufsize
);
617 case 'K': { /* long long sized bitfield */
618 unsigned PY_LONG_LONG
*p
= va_arg(*p_va
, unsigned PY_LONG_LONG
*);
619 unsigned PY_LONG_LONG ival
;
620 if (float_argument_error(arg
))
622 if (PyInt_Check(arg
))
623 ival
= PyInt_AsUnsignedLongMask(arg
);
624 else if (PyLong_Check(arg
))
625 ival
= PyLong_AsUnsignedLongLongMask(arg
);
627 return converterr("integer<K>", arg
, msgbuf
, bufsize
);
633 case 'f': {/* float */
634 float *p
= va_arg(*p_va
, float *);
635 double dval
= PyFloat_AsDouble(arg
);
636 if (PyErr_Occurred())
637 return converterr("float<f>", arg
, msgbuf
, bufsize
);
643 case 'd': {/* double */
644 double *p
= va_arg(*p_va
, double *);
645 double dval
= PyFloat_AsDouble(arg
);
646 if (PyErr_Occurred())
647 return converterr("float<d>", arg
, msgbuf
, bufsize
);
653 #ifndef WITHOUT_COMPLEX
654 case 'D': {/* complex double */
655 Py_complex
*p
= va_arg(*p_va
, Py_complex
*);
657 cval
= PyComplex_AsCComplex(arg
);
658 if (PyErr_Occurred())
659 return converterr("complex<D>", arg
, msgbuf
, bufsize
);
664 #endif /* WITHOUT_COMPLEX */
666 case 'c': {/* char */
667 char *p
= va_arg(*p_va
, char *);
668 if (PyString_Check(arg
) && PyString_Size(arg
) == 1)
669 *p
= PyString_AS_STRING(arg
)[0];
671 return converterr("char", arg
, msgbuf
, bufsize
);
675 case 's': {/* string */
676 if (*format
== '#') {
677 void **p
= (void **)va_arg(*p_va
, char **);
678 int *q
= va_arg(*p_va
, int *);
680 if (PyString_Check(arg
)) {
681 *p
= PyString_AS_STRING(arg
);
682 *q
= PyString_GET_SIZE(arg
);
684 #ifdef Py_USING_UNICODE
685 else if (PyUnicode_Check(arg
)) {
686 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
688 return converterr(CONV_UNICODE
,
689 arg
, msgbuf
, bufsize
);
690 *p
= PyString_AS_STRING(uarg
);
691 *q
= PyString_GET_SIZE(uarg
);
694 else { /* any buffer-like object */
696 int count
= convertbuffer(arg
, p
, &buf
);
698 return converterr(buf
, arg
, msgbuf
, bufsize
);
703 char **p
= va_arg(*p_va
, char **);
705 if (PyString_Check(arg
))
706 *p
= PyString_AS_STRING(arg
);
707 #ifdef Py_USING_UNICODE
708 else if (PyUnicode_Check(arg
)) {
709 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
711 return converterr(CONV_UNICODE
,
712 arg
, msgbuf
, bufsize
);
713 *p
= PyString_AS_STRING(uarg
);
717 return converterr("string", arg
, msgbuf
, bufsize
);
718 if ((int)strlen(*p
) != PyString_Size(arg
))
719 return converterr("string without null bytes",
720 arg
, msgbuf
, bufsize
);
725 case 'z': {/* string, may be NULL (None) */
726 if (*format
== '#') { /* any buffer-like object */
727 void **p
= (void **)va_arg(*p_va
, char **);
728 int *q
= va_arg(*p_va
, int *);
730 if (arg
== Py_None
) {
734 else if (PyString_Check(arg
)) {
735 *p
= PyString_AS_STRING(arg
);
736 *q
= PyString_GET_SIZE(arg
);
738 #ifdef Py_USING_UNICODE
739 else if (PyUnicode_Check(arg
)) {
740 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
742 return converterr(CONV_UNICODE
,
743 arg
, msgbuf
, bufsize
);
744 *p
= PyString_AS_STRING(uarg
);
745 *q
= PyString_GET_SIZE(uarg
);
748 else { /* any buffer-like object */
750 int count
= convertbuffer(arg
, p
, &buf
);
752 return converterr(buf
, arg
, msgbuf
, bufsize
);
757 char **p
= va_arg(*p_va
, char **);
761 else if (PyString_Check(arg
))
762 *p
= PyString_AS_STRING(arg
);
763 #ifdef Py_USING_UNICODE
764 else if (PyUnicode_Check(arg
)) {
765 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
767 return converterr(CONV_UNICODE
,
768 arg
, msgbuf
, bufsize
);
769 *p
= PyString_AS_STRING(uarg
);
773 return converterr("string or None",
774 arg
, msgbuf
, bufsize
);
775 if (*format
== '#') {
776 int *q
= va_arg(*p_va
, int *);
780 *q
= PyString_Size(arg
);
783 else if (*p
!= NULL
&&
784 (int)strlen(*p
) != PyString_Size(arg
))
786 "string without null bytes or None",
787 arg
, msgbuf
, bufsize
);
792 case 'e': {/* encoded string */
794 const char *encoding
;
796 int size
, recode_strings
;
798 /* Get 'e' parameter: the encoding name */
799 encoding
= (const char *)va_arg(*p_va
, const char *);
800 #ifdef Py_USING_UNICODE
801 if (encoding
== NULL
)
802 encoding
= PyUnicode_GetDefaultEncoding();
805 /* Get output buffer parameter:
806 's' (recode all objects via Unicode) or
807 't' (only recode non-string objects)
811 else if (*format
== 't')
815 "(unknown parser marker combination)",
816 arg
, msgbuf
, bufsize
);
817 buffer
= (char **)va_arg(*p_va
, char **);
820 return converterr("(buffer is NULL)",
821 arg
, msgbuf
, bufsize
);
824 if (!recode_strings
&& PyString_Check(arg
)) {
829 #ifdef Py_USING_UNICODE
832 /* Convert object to Unicode */
833 u
= PyUnicode_FromObject(arg
);
836 "string or unicode or text buffer",
837 arg
, msgbuf
, bufsize
);
839 /* Encode object; use default error handling */
840 s
= PyUnicode_AsEncodedString(u
,
845 return converterr("(encoding failed)",
846 arg
, msgbuf
, bufsize
);
847 if (!PyString_Check(s
)) {
850 "(encoder failed to return a string)",
851 arg
, msgbuf
, bufsize
);
854 return converterr("string<e>", arg
, msgbuf
, bufsize
);
857 size
= PyString_GET_SIZE(s
);
859 /* Write output; output is guaranteed to be 0-terminated */
860 if (*format
== '#') {
861 /* Using buffer length parameter '#':
863 - if *buffer is NULL, a new buffer of the
864 needed size is allocated and the data
865 copied into it; *buffer is updated to point
866 to the new buffer; the caller is
867 responsible for PyMem_Free()ing it after
870 - if *buffer is not NULL, the data is
871 copied to *buffer; *buffer_len has to be
872 set to the size of the buffer on input;
873 buffer overflow is signalled with an error;
874 buffer has to provide enough room for the
875 encoded string plus the trailing 0-byte
877 - in both cases, *buffer_len is updated to
878 the size of the buffer /excluding/ the
882 int *buffer_len
= va_arg(*p_va
, int *);
885 if (buffer_len
== NULL
) {
888 "(buffer_len is NULL)",
889 arg
, msgbuf
, bufsize
);
891 if (*buffer
== NULL
) {
892 *buffer
= PyMem_NEW(char, size
+ 1);
893 if (*buffer
== NULL
) {
897 arg
, msgbuf
, bufsize
);
899 if(addcleanup(*buffer
, freelist
)) {
903 arg
, msgbuf
, bufsize
);
906 if (size
+ 1 > *buffer_len
) {
910 arg
, msgbuf
, bufsize
);
914 PyString_AS_STRING(s
),
918 /* Using a 0-terminated buffer:
920 - the encoded string has to be 0-terminated
921 for this variant to work; if it is not, an
924 - a new buffer of the needed size is
925 allocated and the data copied into it;
926 *buffer is updated to point to the new
927 buffer; the caller is responsible for
928 PyMem_Free()ing it after usage
931 if ((int)strlen(PyString_AS_STRING(s
)) != size
) {
934 "(encoded string without NULL bytes)",
935 arg
, msgbuf
, bufsize
);
937 *buffer
= PyMem_NEW(char, size
+ 1);
938 if (*buffer
== NULL
) {
940 return converterr("(memory error)",
941 arg
, msgbuf
, bufsize
);
943 if(addcleanup(*buffer
, freelist
)) {
945 return converterr("(cleanup problem)",
946 arg
, msgbuf
, bufsize
);
949 PyString_AS_STRING(s
),
956 #ifdef Py_USING_UNICODE
957 case 'u': {/* raw unicode buffer (Py_UNICODE *) */
958 if (*format
== '#') { /* any buffer-like object */
959 void **p
= (void **)va_arg(*p_va
, char **);
960 int *q
= va_arg(*p_va
, int *);
961 if (PyUnicode_Check(arg
)) {
962 *p
= PyUnicode_AS_UNICODE(arg
);
963 *q
= PyUnicode_GET_SIZE(arg
);
967 int count
= convertbuffer(arg
, p
, &buf
);
969 return converterr(buf
, arg
, msgbuf
, bufsize
);
970 *q
= count
/(sizeof(Py_UNICODE
));
974 Py_UNICODE
**p
= va_arg(*p_va
, Py_UNICODE
**);
975 if (PyUnicode_Check(arg
))
976 *p
= PyUnicode_AS_UNICODE(arg
);
978 return converterr("unicode", arg
, msgbuf
, bufsize
);
984 case 'S': { /* string object */
985 PyObject
**p
= va_arg(*p_va
, PyObject
**);
986 if (PyString_Check(arg
))
989 return converterr("string", arg
, msgbuf
, bufsize
);
993 #ifdef Py_USING_UNICODE
994 case 'U': { /* Unicode object */
995 PyObject
**p
= va_arg(*p_va
, PyObject
**);
996 if (PyUnicode_Check(arg
))
999 return converterr("unicode", arg
, msgbuf
, bufsize
);
1004 case 'O': { /* object */
1007 if (*format
== '!') {
1008 type
= va_arg(*p_va
, PyTypeObject
*);
1009 p
= va_arg(*p_va
, PyObject
**);
1011 if (PyType_IsSubtype(arg
->ob_type
, type
))
1014 return converterr(type
->tp_name
, arg
, msgbuf
, bufsize
);
1017 else if (*format
== '?') {
1018 inquiry pred
= va_arg(*p_va
, inquiry
);
1019 p
= va_arg(*p_va
, PyObject
**);
1024 return converterr("(unspecified)",
1025 arg
, msgbuf
, bufsize
);
1028 else if (*format
== '&') {
1029 typedef int (*converter
)(PyObject
*, void *);
1030 converter convert
= va_arg(*p_va
, converter
);
1031 void *addr
= va_arg(*p_va
, void *);
1033 if (! (*convert
)(arg
, addr
))
1034 return converterr("(unspecified)",
1035 arg
, msgbuf
, bufsize
);
1038 p
= va_arg(*p_va
, PyObject
**);
1045 case 'w': { /* memory buffer, read-write access */
1046 void **p
= va_arg(*p_va
, void **);
1047 PyBufferProcs
*pb
= arg
->ob_type
->tp_as_buffer
;
1051 pb
->bf_getwritebuffer
== NULL
||
1052 pb
->bf_getsegcount
== NULL
)
1053 return converterr("read-write buffer", arg
, msgbuf
, bufsize
);
1054 if ((*pb
->bf_getsegcount
)(arg
, NULL
) != 1)
1055 return converterr("single-segment read-write buffer",
1056 arg
, msgbuf
, bufsize
);
1057 if ((count
= pb
->bf_getwritebuffer(arg
, 0, p
)) < 0)
1058 return converterr("(unspecified)", arg
, msgbuf
, bufsize
);
1059 if (*format
== '#') {
1060 int *q
= va_arg(*p_va
, int *);
1068 case 't': { /* 8-bit character buffer, read-only access */
1069 const char **p
= va_arg(*p_va
, const char **);
1070 PyBufferProcs
*pb
= arg
->ob_type
->tp_as_buffer
;
1073 if (*format
++ != '#')
1075 "invalid use of 't' format character",
1076 arg
, msgbuf
, bufsize
);
1077 if (!PyType_HasFeature(arg
->ob_type
,
1078 Py_TPFLAGS_HAVE_GETCHARBUFFER
) ||
1079 pb
== NULL
|| pb
->bf_getcharbuffer
== NULL
||
1080 pb
->bf_getsegcount
== NULL
)
1082 "string or read-only character buffer",
1083 arg
, msgbuf
, bufsize
);
1085 if (pb
->bf_getsegcount(arg
, NULL
) != 1)
1087 "string or single-segment read-only buffer",
1088 arg
, msgbuf
, bufsize
);
1090 count
= pb
->bf_getcharbuffer(arg
, 0, p
);
1092 return converterr("(unspecified)", arg
, msgbuf
, bufsize
);
1093 *va_arg(*p_va
, int *) = count
;
1098 return converterr("impossible<bad format char>", arg
, msgbuf
, bufsize
);
1107 convertbuffer(PyObject
*arg
, void **p
, char **errmsg
)
1109 PyBufferProcs
*pb
= arg
->ob_type
->tp_as_buffer
;
1112 pb
->bf_getreadbuffer
== NULL
||
1113 pb
->bf_getsegcount
== NULL
) {
1114 *errmsg
= "string or read-only buffer";
1117 if ((*pb
->bf_getsegcount
)(arg
, NULL
) != 1) {
1118 *errmsg
= "string or single-segment read-only buffer";
1121 if ((count
= (*pb
->bf_getreadbuffer
)(arg
, 0, p
)) < 0) {
1122 *errmsg
= "(unspecified)";
1127 /* Support for keyword arguments donated by
1128 Geoff Philbrick <philbric@delphi.hks.com> */
1130 /* Return false (0) for error, else true. */
1132 PyArg_ParseTupleAndKeywords(PyObject
*args
,
1140 if ((args
== NULL
|| !PyTuple_Check(args
)) ||
1141 (keywords
!= NULL
&& !PyDict_Check(keywords
)) ||
1145 PyErr_BadInternalCall();
1149 va_start(va
, kwlist
);
1150 retval
= vgetargskeywords(args
, keywords
, format
, kwlist
, &va
);
1157 vgetargskeywords(PyObject
*args
, PyObject
*keywords
, char *format
,
1158 char **kwlist
, va_list *p_va
)
1162 char *fname
, *message
;
1165 int i
, len
, nargs
, nkeywords
;
1167 PyObject
*freelist
= NULL
;
1169 assert(args
!= NULL
&& PyTuple_Check(args
));
1170 assert(keywords
== NULL
|| PyDict_Check(keywords
));
1171 assert(format
!= NULL
);
1172 assert(kwlist
!= NULL
);
1173 assert(p_va
!= NULL
);
1175 /* Search the format:
1176 message <- error msg, if any (else NULL).
1177 fname <- routine name, if any (else NULL).
1178 min <- # of required arguments, or -1 if all are required.
1179 max <- most arguments (required + optional).
1180 Check that kwlist has a non-NULL entry for each arg.
1181 Raise error if a tuple arg spec is found.
1183 fname
= message
= NULL
;
1184 formatsave
= format
;
1188 while ((i
= *format
++) != '\0') {
1189 if (isalpha(i
) && i
!= 'e') {
1192 PyErr_SetString(PyExc_RuntimeError
,
1193 "more argument specifiers than "
1194 "keyword list entries");
1201 else if (i
== ':') {
1205 else if (i
== ';') {
1209 else if (i
== '(') {
1210 PyErr_SetString(PyExc_RuntimeError
,
1211 "tuple found in format when using keyword "
1216 format
= formatsave
;
1218 PyErr_SetString(PyExc_RuntimeError
,
1219 "more keyword list entries than "
1220 "argument specifiers");
1224 /* All arguments are required. */
1228 nargs
= PyTuple_GET_SIZE(args
);
1229 nkeywords
= keywords
== NULL
? 0 : PyDict_Size(keywords
);
1231 /* make sure there are no duplicate values for an argument;
1232 its not clear when to use the term "keyword argument vs.
1233 keyword parameter in messages */
1234 if (nkeywords
> 0) {
1235 for (i
= 0; i
< nargs
; i
++) {
1236 char *thiskw
= kwlist
[i
];
1239 if (PyDict_GetItemString(keywords
, thiskw
)) {
1240 PyErr_Format(PyExc_TypeError
,
1241 "keyword parameter '%s' was given "
1242 "by position and by name",
1246 else if (PyErr_Occurred())
1251 /* required arguments missing from args can be supplied by keyword
1252 arguments; set len to the number of posiitional arguments, and,
1253 if that's less than the minimum required, add in the number of
1254 required arguments that are supplied by keywords */
1256 if (nkeywords
> 0 && nargs
< min
) {
1257 for (i
= nargs
; i
< min
; i
++) {
1258 if (PyDict_GetItemString(keywords
, kwlist
[i
]))
1260 else if (PyErr_Occurred())
1265 /* make sure we got an acceptable number of arguments; the message
1266 is a little confusing with keywords since keyword arguments
1267 which are supplied, but don't match the required arguments
1268 are not included in the "%d given" part of the message */
1269 if (len
< min
|| max
< len
) {
1270 if (message
== NULL
) {
1271 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
1272 "%.200s%s takes %s %d argument%s "
1274 fname
==NULL
? "function" : fname
,
1275 fname
==NULL
? "" : "()",
1276 min
==max
? "exactly"
1277 : len
< min
? "at least" : "at most",
1278 len
< min
? min
: max
,
1279 (len
< min
? min
: max
) == 1 ? "" : "s",
1283 PyErr_SetString(PyExc_TypeError
, message
);
1287 /* convert the positional arguments */
1288 for (i
= 0; i
< nargs
; i
++) {
1291 msg
= convertitem(PyTuple_GET_ITEM(args
, i
), &format
, p_va
,
1292 levels
, msgbuf
, sizeof(msgbuf
), &freelist
);
1294 seterror(i
+1, msg
, levels
, fname
, message
);
1295 return cleanreturn(0, freelist
);
1299 /* handle no keyword parameters in call */
1301 return cleanreturn(1, freelist
);
1303 /* convert the keyword arguments; this uses the format
1304 string where it was left after processing args */
1305 for (i
= nargs
; i
< max
; i
++) {
1309 item
= PyDict_GetItemString(keywords
, kwlist
[i
]);
1312 msg
= convertitem(item
, &format
, p_va
, levels
, msgbuf
,
1313 sizeof(msgbuf
), &freelist
);
1316 seterror(i
+1, msg
, levels
, fname
, message
);
1317 return cleanreturn(0, freelist
);
1323 else if (PyErr_Occurred())
1324 return cleanreturn(0, freelist
);
1326 msg
= skipitem(&format
, p_va
);
1328 seterror(i
+1, msg
, levels
, fname
, message
);
1329 return cleanreturn(0, freelist
);
1334 /* make sure there are no extraneous keyword arguments */
1335 if (nkeywords
> 0) {
1336 PyObject
*key
, *value
;
1338 while (PyDict_Next(keywords
, &pos
, &key
, &value
)) {
1341 if (!PyString_Check(key
)) {
1342 PyErr_SetString(PyExc_TypeError
,
1343 "keywords must be strings");
1344 return cleanreturn(0, freelist
);
1346 ks
= PyString_AsString(key
);
1347 for (i
= 0; i
< max
; i
++) {
1348 if (!strcmp(ks
, kwlist
[i
])) {
1354 PyErr_Format(PyExc_TypeError
,
1355 "'%s' is an invalid keyword "
1356 "argument for this function",
1358 return cleanreturn(0, freelist
);
1363 return cleanreturn(1, freelist
);
1368 skipitem(char **p_format
, va_list *p_va
)
1370 char *format
= *p_format
;
1375 case 'b': /* byte -- very short int */
1376 case 'B': /* byte as bitfield */
1378 (void) va_arg(*p_va
, char *);
1382 case 'h': /* short int */
1384 (void) va_arg(*p_va
, short *);
1388 case 'H': /* short int as bitfield */
1390 (void) va_arg(*p_va
, unsigned short *);
1396 (void) va_arg(*p_va
, int *);
1400 case 'l': /* long int */
1402 (void) va_arg(*p_va
, long *);
1406 #ifdef HAVE_LONG_LONG
1407 case 'L': /* PY_LONG_LONG int */
1409 (void) va_arg(*p_va
, PY_LONG_LONG
*);
1414 case 'f': /* float */
1416 (void) va_arg(*p_va
, float *);
1420 case 'd': /* double */
1422 (void) va_arg(*p_va
, double *);
1426 #ifndef WITHOUT_COMPLEX
1427 case 'D': /* complex double */
1429 (void) va_arg(*p_va
, Py_complex
*);
1432 #endif /* WITHOUT_COMPLEX */
1434 case 'c': /* char */
1436 (void) va_arg(*p_va
, char *);
1440 case 's': /* string */
1442 (void) va_arg(*p_va
, char **);
1443 if (*format
== '#') {
1444 (void) va_arg(*p_va
, int *);
1450 case 'z': /* string */
1452 (void) va_arg(*p_va
, char **);
1453 if (*format
== '#') {
1454 (void) va_arg(*p_va
, int *);
1460 case 'S': /* string object */
1462 (void) va_arg(*p_va
, PyObject
**);
1466 case 'O': /* object */
1468 if (*format
== '!') {
1470 (void) va_arg(*p_va
, PyTypeObject
*);
1471 (void) va_arg(*p_va
, PyObject
**);
1474 /* I don't know what this is for */
1475 else if (*format
== '?') {
1476 inquiry pred
= va_arg(*p_va
, inquiry
);
1479 (void) va_arg(*p_va
, PyObject
**);
1483 else if (*format
== '&') {
1484 typedef int (*converter
)(PyObject
*, void *);
1485 (void) va_arg(*p_va
, converter
);
1486 (void) va_arg(*p_va
, void *);
1490 (void) va_arg(*p_va
, PyObject
**);
1496 return "impossible<bad format char>";
1506 PyArg_UnpackTuple(PyObject
*args
, char *name
, int min
, int max
, ...)
1512 #ifdef HAVE_STDARG_PROTOTYPES
1513 va_start(vargs
, max
);
1520 if (!PyTuple_Check(args
)) {
1521 PyErr_SetString(PyExc_SystemError
,
1522 "PyArg_UnpackTuple() argument list is not a tuple");
1525 l
= PyTuple_GET_SIZE(args
);
1530 "%s expected %s%d arguments, got %d",
1531 name
, (min
== max
? "" : "at least "), min
, l
);
1535 "unpacked tuple should have %s%d elements,"
1537 (min
== max
? "" : "at least "), min
, l
);
1545 "%s expected %s%d arguments, got %d",
1546 name
, (min
== max
? "" : "at most "), max
, l
);
1550 "unpacked tuple should have %s%d elements,"
1552 (min
== max
? "" : "at most "), max
, l
);
1556 for (i
= 0; i
< l
; i
++) {
1557 o
= va_arg(vargs
, PyObject
**);
1558 *o
= PyTuple_GET_ITEM(args
, i
);