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);
23 static char *convertsimple(PyObject
*, char **, va_list *, char *, size_t);
24 static int convertbuffer(PyObject
*, void **p
, char **);
26 static int vgetargskeywords(PyObject
*, PyObject
*,
27 char *, char **, va_list *);
28 static char *skipitem(char **, va_list *);
31 PyArg_Parse(PyObject
*args
, char *format
, ...)
37 retval
= vgetargs1(args
, format
, &va
, 1);
44 PyArg_ParseTuple(PyObject
*args
, char *format
, ...)
50 retval
= vgetargs1(args
, format
, &va
, 0);
57 PyArg_VaParse(PyObject
*args
, char *format
, va_list va
)
61 #ifdef VA_LIST_IS_ARRAY
62 memcpy(lva
, va
, sizeof(va_list));
67 return vgetargs1(args
, format
, &lva
, 0);
72 vgetargs1(PyObject
*args
, char *format
, va_list *p_va
, int compat
)
82 char *formatsave
= format
;
86 assert(compat
|| (args
!= (PyObject
*)NULL
));
98 Py_FatalError("excess ')' in getargs format");
117 else if (isalpha(c
)) {
118 if (c
!= 'e') /* skip encoded */
128 Py_FatalError(/* '(' */ "missing ')' in getargs format");
139 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
140 "%.200s%s takes no arguments",
141 fname
==NULL
? "function" : fname
,
142 fname
==NULL
? "" : "()");
143 PyErr_SetString(PyExc_TypeError
, msgbuf
);
146 else if (min
== 1 && max
== 1) {
148 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
149 "%.200s%s takes at least one argument",
150 fname
==NULL
? "function" : fname
,
151 fname
==NULL
? "" : "()");
152 PyErr_SetString(PyExc_TypeError
, msgbuf
);
155 msg
= convertitem(args
, &format
, p_va
, levels
, msgbuf
,
159 seterror(levels
[0], msg
, levels
+1, fname
, message
);
163 PyErr_SetString(PyExc_SystemError
,
164 "old style getargs format uses new features");
169 if (!PyTuple_Check(args
)) {
170 PyErr_SetString(PyExc_SystemError
,
171 "new style getargs format but argument is not a tuple");
175 len
= PyTuple_GET_SIZE(args
);
177 if (len
< min
|| max
< len
) {
178 if (message
== NULL
) {
179 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
180 "%.150s%s takes %s %d argument%s "
182 fname
==NULL
? "function" : fname
,
183 fname
==NULL
? "" : "()",
185 : len
< min
? "at least" : "at most",
186 len
< min
? min
: max
,
187 (len
< min
? min
: max
) == 1 ? "" : "s",
191 PyErr_SetString(PyExc_TypeError
, message
);
195 for (i
= 0; i
< len
; i
++) {
198 msg
= convertitem(PyTuple_GET_ITEM(args
, i
), &format
, p_va
,
199 levels
, msgbuf
, sizeof(msgbuf
));
201 seterror(i
+1, msg
, levels
, fname
, message
);
206 if (*format
!= '\0' && !isalpha((int)(*format
)) &&
208 *format
!= '|' && *format
!= ':' && *format
!= ';') {
209 PyErr_Format(PyExc_SystemError
,
210 "bad format string: %.200s", formatsave
);
220 seterror(int iarg
, char *msg
, int *levels
, char *fname
, char *message
)
226 if (PyErr_Occurred())
228 else if (message
== NULL
) {
230 PyOS_snprintf(p
, sizeof(buf
), "%.200s() ", fname
);
234 PyOS_snprintf(p
, sizeof(buf
) - (p
- buf
),
235 "argument %d", iarg
);
238 while (levels
[i
] > 0 && (int)(p
-buf
) < 220) {
239 PyOS_snprintf(p
, sizeof(buf
) - (buf
- p
),
240 ", item %d", levels
[i
]-1);
246 PyOS_snprintf(p
, sizeof(buf
) - (p
- buf
), "argument");
249 PyOS_snprintf(p
, sizeof(buf
) - (p
- buf
), " %.256s", msg
);
252 PyErr_SetString(PyExc_TypeError
, message
);
256 /* Convert a tuple argument.
257 On entry, *p_format points to the character _after_ the opening '('.
258 On successful exit, *p_format points to the closing ')'.
260 *p_format and *p_va are updated,
261 *levels and *msgbuf are untouched,
262 and NULL is returned.
263 If the argument is invalid:
264 *p_format is unchanged,
266 *levels is a 0-terminated list of item numbers,
267 *msgbuf contains an error message, whose format is:
268 "must be <typename1>, not <typename2>", where:
269 <typename1> is the name of the expected type, and
270 <typename2> is the name of the actual type,
271 and msgbuf is returned.
275 converttuple(PyObject
*arg
, char **p_format
, va_list *p_va
, int *levels
,
276 char *msgbuf
, size_t bufsize
, int toplevel
)
280 char *format
= *p_format
;
295 else if (c
== ':' || c
== ';' || c
== '\0')
297 else if (level
== 0 && isalpha(c
))
301 if (!PySequence_Check(arg
) || PyString_Check(arg
)) {
303 PyOS_snprintf(msgbuf
, bufsize
,
304 toplevel
? "expected %d arguments, not %.50s" :
305 "must be %d-item sequence, not %.50s",
307 arg
== Py_None
? "None" : arg
->ob_type
->tp_name
);
311 if ((i
= PySequence_Size(arg
)) != n
) {
313 PyOS_snprintf(msgbuf
, bufsize
,
314 toplevel
? "expected %d arguments, not %d" :
315 "must be sequence of length %d, not %d",
321 for (i
= 0; i
< n
; i
++) {
324 item
= PySequence_GetItem(arg
, i
);
325 msg
= convertitem(item
, &format
, p_va
, levels
+1, msgbuf
,
327 /* PySequence_GetItem calls tp->sq_item, which INCREFs */
340 /* Convert a single item. */
343 convertitem(PyObject
*arg
, char **p_format
, va_list *p_va
, int *levels
,
344 char *msgbuf
, size_t bufsize
)
347 char *format
= *p_format
;
349 if (*format
== '(' /* ')' */) {
351 msg
= converttuple(arg
, &format
, p_va
, levels
, msgbuf
,
357 msg
= convertsimple(arg
, &format
, p_va
, msgbuf
, bufsize
);
368 #define UNICODE_DEFAULT_ENCODING(arg) \
369 _PyUnicode_AsDefaultEncodedString(arg, NULL)
371 /* Format an error message generated by convertsimple(). */
374 converterr(char *expected
, PyObject
*arg
, char *msgbuf
, size_t bufsize
)
376 assert(expected
!= NULL
);
378 PyOS_snprintf(msgbuf
, bufsize
,
379 "must be %.50s, not %.50s", expected
,
380 arg
== Py_None
? "None" : arg
->ob_type
->tp_name
);
384 #define CONV_UNICODE "(unicode conversion error)"
386 /* Convert a non-tuple argument. Return NULL if conversion went OK,
387 or a string with a message describing the failure. The message is
388 formatted as "must be <desired type>, not <actual type>".
389 When failing, an exception may or may not have been raised.
390 Don't call if a tuple is expected.
394 convertsimple(PyObject
*arg
, char **p_format
, va_list *p_va
, char *msgbuf
,
397 char *format
= *p_format
;
403 case 'b': { /* unsigned byte -- very short int */
404 char *p
= va_arg(*p_va
, char *);
405 long ival
= PyInt_AsLong(arg
);
406 if (ival
== -1 && PyErr_Occurred())
407 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
409 PyErr_SetString(PyExc_OverflowError
,
410 "unsigned byte integer is less than minimum");
411 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
413 else if (ival
> UCHAR_MAX
) {
414 PyErr_SetString(PyExc_OverflowError
,
415 "unsigned byte integer is greater than maximum");
416 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
419 *p
= (unsigned char) ival
;
423 case 'B': {/* byte sized bitfield - both signed and unsigned
425 char *p
= va_arg(*p_va
, char *);
426 long ival
= PyInt_AsLong(arg
);
427 if (ival
== -1 && PyErr_Occurred())
428 return converterr("integer<b>", arg
, msgbuf
, bufsize
);
429 else if (ival
< SCHAR_MIN
) {
430 PyErr_SetString(PyExc_OverflowError
,
431 "byte-sized integer bitfield is less than minimum");
432 return converterr("integer<B>", arg
, msgbuf
, bufsize
);
434 else if (ival
> (int)UCHAR_MAX
) {
435 PyErr_SetString(PyExc_OverflowError
,
436 "byte-sized integer bitfield is greater than maximum");
437 return converterr("integer<B>", arg
, msgbuf
, bufsize
);
440 *p
= (unsigned char) ival
;
444 case 'h': {/* signed short int */
445 short *p
= va_arg(*p_va
, short *);
446 long ival
= PyInt_AsLong(arg
);
447 if (ival
== -1 && PyErr_Occurred())
448 return converterr("integer<h>", arg
, msgbuf
, bufsize
);
449 else if (ival
< SHRT_MIN
) {
450 PyErr_SetString(PyExc_OverflowError
,
451 "signed short integer is less than minimum");
452 return converterr("integer<h>", arg
, msgbuf
, bufsize
);
454 else if (ival
> SHRT_MAX
) {
455 PyErr_SetString(PyExc_OverflowError
,
456 "signed short integer is greater than maximum");
457 return converterr("integer<h>", arg
, msgbuf
, bufsize
);
464 case 'H': { /* short int sized bitfield, both signed and
466 unsigned short *p
= va_arg(*p_va
, unsigned short *);
467 long ival
= PyInt_AsLong(arg
);
468 if (ival
== -1 && PyErr_Occurred())
469 return converterr("integer<H>", arg
, msgbuf
, bufsize
);
470 else if (ival
< SHRT_MIN
) {
471 PyErr_SetString(PyExc_OverflowError
,
472 "short integer bitfield is less than minimum");
473 return converterr("integer<H>", arg
, msgbuf
, bufsize
);
475 else if (ival
> USHRT_MAX
) {
476 PyErr_SetString(PyExc_OverflowError
,
477 "short integer bitfield is greater than maximum");
478 return converterr("integer<H>", arg
, msgbuf
, bufsize
);
481 *p
= (unsigned short) ival
;
485 case 'i': {/* signed int */
486 int *p
= va_arg(*p_va
, int *);
487 long ival
= PyInt_AsLong(arg
);
488 if (ival
== -1 && PyErr_Occurred())
489 return converterr("integer<i>", arg
, msgbuf
, bufsize
);
490 else if (ival
> INT_MAX
) {
491 PyErr_SetString(PyExc_OverflowError
,
492 "signed integer is greater than maximum");
493 return converterr("integer<i>", arg
, msgbuf
, bufsize
);
495 else if (ival
< INT_MIN
) {
496 PyErr_SetString(PyExc_OverflowError
,
497 "signed integer is less than minimum");
498 return converterr("integer<i>", arg
, msgbuf
, bufsize
);
505 case 'l': {/* long int */
506 long *p
= va_arg(*p_va
, long *);
507 long ival
= PyInt_AsLong(arg
);
508 if (ival
== -1 && PyErr_Occurred())
509 return converterr("integer<l>", arg
, msgbuf
, bufsize
);
515 #ifdef HAVE_LONG_LONG
516 case 'L': {/* LONG_LONG */
517 LONG_LONG
*p
= va_arg( *p_va
, LONG_LONG
* );
518 LONG_LONG ival
= PyLong_AsLongLong( arg
);
519 if( ival
== (LONG_LONG
)-1 && PyErr_Occurred() ) {
520 return converterr("long<L>", arg
, msgbuf
, bufsize
);
528 case 'f': {/* float */
529 float *p
= va_arg(*p_va
, float *);
530 double dval
= PyFloat_AsDouble(arg
);
531 if (PyErr_Occurred())
532 return converterr("float<f>", arg
, msgbuf
, bufsize
);
538 case 'd': {/* double */
539 double *p
= va_arg(*p_va
, double *);
540 double dval
= PyFloat_AsDouble(arg
);
541 if (PyErr_Occurred())
542 return converterr("float<d>", arg
, msgbuf
, bufsize
);
548 #ifndef WITHOUT_COMPLEX
549 case 'D': {/* complex double */
550 Py_complex
*p
= va_arg(*p_va
, Py_complex
*);
552 cval
= PyComplex_AsCComplex(arg
);
553 if (PyErr_Occurred())
554 return converterr("complex<D>", arg
, msgbuf
, bufsize
);
559 #endif /* WITHOUT_COMPLEX */
561 case 'c': {/* char */
562 char *p
= va_arg(*p_va
, char *);
563 if (PyString_Check(arg
) && PyString_Size(arg
) == 1)
564 *p
= PyString_AS_STRING(arg
)[0];
566 return converterr("char", arg
, msgbuf
, bufsize
);
570 case 's': {/* string */
571 if (*format
== '#') {
572 void **p
= (void **)va_arg(*p_va
, char **);
573 int *q
= va_arg(*p_va
, int *);
575 if (PyString_Check(arg
)) {
576 *p
= PyString_AS_STRING(arg
);
577 *q
= PyString_GET_SIZE(arg
);
579 #ifdef Py_USING_UNICODE
580 else if (PyUnicode_Check(arg
)) {
581 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
583 return converterr(CONV_UNICODE
,
584 arg
, msgbuf
, bufsize
);
585 *p
= PyString_AS_STRING(uarg
);
586 *q
= PyString_GET_SIZE(uarg
);
589 else { /* any buffer-like object */
591 int count
= convertbuffer(arg
, p
, &buf
);
593 return converterr(buf
, arg
, msgbuf
, bufsize
);
598 char **p
= va_arg(*p_va
, char **);
600 if (PyString_Check(arg
))
601 *p
= PyString_AS_STRING(arg
);
602 #ifdef Py_USING_UNICODE
603 else if (PyUnicode_Check(arg
)) {
604 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
606 return converterr(CONV_UNICODE
,
607 arg
, msgbuf
, bufsize
);
608 *p
= PyString_AS_STRING(uarg
);
612 return converterr("string", arg
, msgbuf
, bufsize
);
613 if ((int)strlen(*p
) != PyString_Size(arg
))
614 return converterr("string without null bytes",
615 arg
, msgbuf
, bufsize
);
620 case 'z': {/* string, may be NULL (None) */
621 if (*format
== '#') { /* any buffer-like object */
622 void **p
= (void **)va_arg(*p_va
, char **);
623 int *q
= va_arg(*p_va
, int *);
625 if (arg
== Py_None
) {
629 else if (PyString_Check(arg
)) {
630 *p
= PyString_AS_STRING(arg
);
631 *q
= PyString_GET_SIZE(arg
);
633 #ifdef Py_USING_UNICODE
634 else if (PyUnicode_Check(arg
)) {
635 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
637 return converterr(CONV_UNICODE
,
638 arg
, msgbuf
, bufsize
);
639 *p
= PyString_AS_STRING(uarg
);
640 *q
= PyString_GET_SIZE(uarg
);
643 else { /* any buffer-like object */
645 int count
= convertbuffer(arg
, p
, &buf
);
647 return converterr(buf
, arg
, msgbuf
, bufsize
);
652 char **p
= va_arg(*p_va
, char **);
656 else if (PyString_Check(arg
))
657 *p
= PyString_AS_STRING(arg
);
658 #ifdef Py_USING_UNICODE
659 else if (PyUnicode_Check(arg
)) {
660 uarg
= UNICODE_DEFAULT_ENCODING(arg
);
662 return converterr(CONV_UNICODE
,
663 arg
, msgbuf
, bufsize
);
664 *p
= PyString_AS_STRING(uarg
);
668 return converterr("string or None",
669 arg
, msgbuf
, bufsize
);
670 if (*format
== '#') {
671 int *q
= va_arg(*p_va
, int *);
675 *q
= PyString_Size(arg
);
678 else if (*p
!= NULL
&&
679 (int)strlen(*p
) != PyString_Size(arg
))
681 "string without null bytes or None",
682 arg
, msgbuf
, bufsize
);
687 case 'e': {/* encoded string */
689 const char *encoding
;
691 int size
, recode_strings
;
693 /* Get 'e' parameter: the encoding name */
694 encoding
= (const char *)va_arg(*p_va
, const char *);
695 #ifdef Py_USING_UNICODE
696 if (encoding
== NULL
)
697 encoding
= PyUnicode_GetDefaultEncoding();
700 /* Get output buffer parameter:
701 's' (recode all objects via Unicode) or
702 't' (only recode non-string objects)
706 else if (*format
== 't')
710 "(unknown parser marker combination)",
711 arg
, msgbuf
, bufsize
);
712 buffer
= (char **)va_arg(*p_va
, char **);
715 return converterr("(buffer is NULL)",
716 arg
, msgbuf
, bufsize
);
719 if (!recode_strings
&& PyString_Check(arg
)) {
724 #ifdef Py_USING_UNICODE
727 /* Convert object to Unicode */
728 u
= PyUnicode_FromObject(arg
);
731 "string or unicode or text buffer",
732 arg
, msgbuf
, bufsize
);
734 /* Encode object; use default error handling */
735 s
= PyUnicode_AsEncodedString(u
,
740 return converterr("(encoding failed)",
741 arg
, msgbuf
, bufsize
);
742 if (!PyString_Check(s
)) {
745 "(encoder failed to return a string)",
746 arg
, msgbuf
, bufsize
);
749 return converterr("string<e>", arg
, msgbuf
, bufsize
);
752 size
= PyString_GET_SIZE(s
);
754 /* Write output; output is guaranteed to be 0-terminated */
755 if (*format
== '#') {
756 /* Using buffer length parameter '#':
758 - if *buffer is NULL, a new buffer of the
759 needed size is allocated and the data
760 copied into it; *buffer is updated to point
761 to the new buffer; the caller is
762 responsible for PyMem_Free()ing it after
765 - if *buffer is not NULL, the data is
766 copied to *buffer; *buffer_len has to be
767 set to the size of the buffer on input;
768 buffer overflow is signalled with an error;
769 buffer has to provide enough room for the
770 encoded string plus the trailing 0-byte
772 - in both cases, *buffer_len is updated to
773 the size of the buffer /excluding/ the
777 int *buffer_len
= va_arg(*p_va
, int *);
780 if (buffer_len
== NULL
)
782 "(buffer_len is NULL)",
783 arg
, msgbuf
, bufsize
);
784 if (*buffer
== NULL
) {
785 *buffer
= PyMem_NEW(char, size
+ 1);
786 if (*buffer
== NULL
) {
790 arg
, msgbuf
, bufsize
);
793 if (size
+ 1 > *buffer_len
) {
797 arg
, msgbuf
, bufsize
);
801 PyString_AS_STRING(s
),
805 /* Using a 0-terminated buffer:
807 - the encoded string has to be 0-terminated
808 for this variant to work; if it is not, an
811 - a new buffer of the needed size is
812 allocated and the data copied into it;
813 *buffer is updated to point to the new
814 buffer; the caller is responsible for
815 PyMem_Free()ing it after usage
818 if ((int)strlen(PyString_AS_STRING(s
)) != size
)
820 "(encoded string without NULL bytes)",
821 arg
, msgbuf
, bufsize
);
822 *buffer
= PyMem_NEW(char, size
+ 1);
823 if (*buffer
== NULL
) {
825 return converterr("(memory error)",
826 arg
, msgbuf
, bufsize
);
829 PyString_AS_STRING(s
),
836 #ifdef Py_USING_UNICODE
837 case 'u': {/* raw unicode buffer (Py_UNICODE *) */
838 if (*format
== '#') { /* any buffer-like object */
839 void **p
= (void **)va_arg(*p_va
, char **);
840 int *q
= va_arg(*p_va
, int *);
842 int count
= convertbuffer(arg
, p
, &buf
);
845 return converterr(buf
, arg
, msgbuf
, bufsize
);
846 *q
= count
/(sizeof(Py_UNICODE
));
849 Py_UNICODE
**p
= va_arg(*p_va
, Py_UNICODE
**);
851 if (PyUnicode_Check(arg
))
852 *p
= PyUnicode_AS_UNICODE(arg
);
854 return converterr("unicode", arg
, msgbuf
, bufsize
);
860 case 'S': { /* string object */
861 PyObject
**p
= va_arg(*p_va
, PyObject
**);
862 if (PyString_Check(arg
))
865 return converterr("string", arg
, msgbuf
, bufsize
);
869 #ifdef Py_USING_UNICODE
870 case 'U': { /* Unicode object */
871 PyObject
**p
= va_arg(*p_va
, PyObject
**);
872 if (PyUnicode_Check(arg
))
875 return converterr("unicode", arg
, msgbuf
, bufsize
);
880 case 'O': { /* object */
883 if (*format
== '!') {
884 type
= va_arg(*p_va
, PyTypeObject
*);
885 p
= va_arg(*p_va
, PyObject
**);
887 if (PyType_IsSubtype(arg
->ob_type
, type
))
890 return converterr(type
->tp_name
, arg
, msgbuf
, bufsize
);
893 else if (*format
== '?') {
894 inquiry pred
= va_arg(*p_va
, inquiry
);
895 p
= va_arg(*p_va
, PyObject
**);
900 return converterr("(unspecified)",
901 arg
, msgbuf
, bufsize
);
904 else if (*format
== '&') {
905 typedef int (*converter
)(PyObject
*, void *);
906 converter convert
= va_arg(*p_va
, converter
);
907 void *addr
= va_arg(*p_va
, void *);
909 if (! (*convert
)(arg
, addr
))
910 return converterr("(unspecified)",
911 arg
, msgbuf
, bufsize
);
914 p
= va_arg(*p_va
, PyObject
**);
921 case 'w': { /* memory buffer, read-write access */
922 void **p
= va_arg(*p_va
, void **);
923 PyBufferProcs
*pb
= arg
->ob_type
->tp_as_buffer
;
927 pb
->bf_getwritebuffer
== NULL
||
928 pb
->bf_getsegcount
== NULL
)
929 return converterr("read-write buffer", arg
, msgbuf
, bufsize
);
930 if ((*pb
->bf_getsegcount
)(arg
, NULL
) != 1)
931 return converterr("single-segment read-write buffer",
932 arg
, msgbuf
, bufsize
);
933 if ((count
= pb
->bf_getwritebuffer(arg
, 0, p
)) < 0)
934 return converterr("(unspecified)", arg
, msgbuf
, bufsize
);
935 if (*format
== '#') {
936 int *q
= va_arg(*p_va
, int *);
944 case 't': { /* 8-bit character buffer, read-only access */
945 const char **p
= va_arg(*p_va
, const char **);
946 PyBufferProcs
*pb
= arg
->ob_type
->tp_as_buffer
;
949 if (*format
++ != '#')
951 "invalid use of 't' format character",
952 arg
, msgbuf
, bufsize
);
953 if (!PyType_HasFeature(arg
->ob_type
,
954 Py_TPFLAGS_HAVE_GETCHARBUFFER
) ||
955 pb
== NULL
|| pb
->bf_getcharbuffer
== NULL
||
956 pb
->bf_getsegcount
== NULL
)
958 "string or read-only character buffer",
959 arg
, msgbuf
, bufsize
);
961 if (pb
->bf_getsegcount(arg
, NULL
) != 1)
963 "string or single-segment read-only buffer",
964 arg
, msgbuf
, bufsize
);
966 count
= pb
->bf_getcharbuffer(arg
, 0, p
);
968 return converterr("(unspecified)", arg
, msgbuf
, bufsize
);
969 *va_arg(*p_va
, int *) = count
;
974 return converterr("impossible<bad format char>", arg
, msgbuf
, bufsize
);
983 convertbuffer(PyObject
*arg
, void **p
, char **errmsg
)
985 PyBufferProcs
*pb
= arg
->ob_type
->tp_as_buffer
;
988 pb
->bf_getreadbuffer
== NULL
||
989 pb
->bf_getsegcount
== NULL
) {
990 *errmsg
= "string or read-only buffer";
993 if ((*pb
->bf_getsegcount
)(arg
, NULL
) != 1) {
994 *errmsg
= "string or single-segment read-only buffer";
997 if ((count
= (*pb
->bf_getreadbuffer
)(arg
, 0, p
)) < 0) {
998 *errmsg
= "(unspecified)";
1003 /* Support for keyword arguments donated by
1004 Geoff Philbrick <philbric@delphi.hks.com> */
1006 /* Return false (0) for error, else true. */
1008 PyArg_ParseTupleAndKeywords(PyObject
*args
,
1016 if ((args
== NULL
|| !PyTuple_Check(args
)) ||
1017 (keywords
!= NULL
&& !PyDict_Check(keywords
)) ||
1021 PyErr_BadInternalCall();
1025 va_start(va
, kwlist
);
1026 retval
= vgetargskeywords(args
, keywords
, format
, kwlist
, &va
);
1033 vgetargskeywords(PyObject
*args
, PyObject
*keywords
, char *format
,
1034 char **kwlist
, va_list *p_va
)
1038 char *fname
, *message
;
1041 int i
, len
, nargs
, nkeywords
;
1044 assert(args
!= NULL
&& PyTuple_Check(args
));
1045 assert(keywords
== NULL
|| PyDict_Check(keywords
));
1046 assert(format
!= NULL
);
1047 assert(kwlist
!= NULL
);
1048 assert(p_va
!= NULL
);
1050 /* Search the format:
1051 message <- error msg, if any (else NULL).
1052 fname <- routine name, if any (else NULL).
1053 min <- # of required arguments, or -1 if all are required.
1054 max <- most arguments (required + optional).
1055 Check that kwlist has a non-NULL entry for each arg.
1056 Raise error if a tuple arg spec is found.
1058 fname
= message
= NULL
;
1059 formatsave
= format
;
1063 while ((i
= *format
++) != '\0') {
1064 if (isalpha(i
) && i
!= 'e') {
1067 PyErr_SetString(PyExc_RuntimeError
,
1068 "more argument specifiers than "
1069 "keyword list entries");
1076 else if (i
== ':') {
1080 else if (i
== ';') {
1084 else if (i
== '(') {
1085 PyErr_SetString(PyExc_RuntimeError
,
1086 "tuple found in format when using keyword "
1091 format
= formatsave
;
1093 PyErr_SetString(PyExc_RuntimeError
,
1094 "more keyword list entries than "
1095 "argument specifiers");
1099 /* All arguments are required. */
1103 nargs
= PyTuple_GET_SIZE(args
);
1104 nkeywords
= keywords
== NULL
? 0 : PyDict_Size(keywords
);
1106 /* make sure there are no duplicate values for an argument;
1107 its not clear when to use the term "keyword argument vs.
1108 keyword parameter in messages */
1109 if (nkeywords
> 0) {
1110 for (i
= 0; i
< nargs
; i
++) {
1111 char *thiskw
= kwlist
[i
];
1114 if (PyDict_GetItemString(keywords
, thiskw
)) {
1115 PyErr_Format(PyExc_TypeError
,
1116 "keyword parameter '%s' was given "
1117 "by position and by name",
1121 else if (PyErr_Occurred())
1126 /* required arguments missing from args can be supplied by keyword
1127 arguments; set len to the number of posiitional arguments, and,
1128 if that's less than the minimum required, add in the number of
1129 required arguments that are supplied by keywords */
1131 if (nkeywords
> 0 && nargs
< min
) {
1132 for (i
= nargs
; i
< min
; i
++) {
1133 if (PyDict_GetItemString(keywords
, kwlist
[i
]))
1135 else if (PyErr_Occurred())
1140 /* make sure we got an acceptable number of arguments; the message
1141 is a little confusing with keywords since keyword arguments
1142 which are supplied, but don't match the required arguments
1143 are not included in the "%d given" part of the message */
1144 if (len
< min
|| max
< len
) {
1145 if (message
== NULL
) {
1146 PyOS_snprintf(msgbuf
, sizeof(msgbuf
),
1147 "%.200s%s takes %s %d argument%s "
1149 fname
==NULL
? "function" : fname
,
1150 fname
==NULL
? "" : "()",
1151 min
==max
? "exactly"
1152 : len
< min
? "at least" : "at most",
1153 len
< min
? min
: max
,
1154 (len
< min
? min
: max
) == 1 ? "" : "s",
1158 PyErr_SetString(PyExc_TypeError
, message
);
1162 /* convert the positional arguments */
1163 for (i
= 0; i
< nargs
; i
++) {
1166 msg
= convertitem(PyTuple_GET_ITEM(args
, i
), &format
, p_va
,
1167 levels
, msgbuf
, sizeof(msgbuf
));
1169 seterror(i
+1, msg
, levels
, fname
, message
);
1174 /* handle no keyword parameters in call */
1178 /* convert the keyword arguments; this uses the format
1179 string where it was left after processing args */
1180 for (i
= nargs
; i
< max
; i
++) {
1184 item
= PyDict_GetItemString(keywords
, kwlist
[i
]);
1187 msg
= convertitem(item
, &format
, p_va
, levels
, msgbuf
,
1191 seterror(i
+1, msg
, levels
, fname
, message
);
1198 else if (PyErr_Occurred())
1201 msg
= skipitem(&format
, p_va
);
1203 seterror(i
+1, msg
, levels
, fname
, message
);
1209 /* make sure there are no extraneous keyword arguments */
1210 if (nkeywords
> 0) {
1211 PyObject
*key
, *value
;
1213 while (PyDict_Next(keywords
, &pos
, &key
, &value
)) {
1215 char *ks
= PyString_AsString(key
);
1216 for (i
= 0; i
< max
; i
++) {
1217 if (!strcmp(ks
, kwlist
[i
])) {
1223 PyErr_Format(PyExc_TypeError
,
1224 "'%s' is an invalid keyword "
1225 "argument for this function",
1237 skipitem(char **p_format
, va_list *p_va
)
1239 char *format
= *p_format
;
1244 case 'b': /* byte -- very short int */
1245 case 'B': /* byte as bitfield */
1247 (void) va_arg(*p_va
, char *);
1251 case 'h': /* short int */
1253 (void) va_arg(*p_va
, short *);
1257 case 'H': /* short int as bitfield */
1259 (void) va_arg(*p_va
, unsigned short *);
1265 (void) va_arg(*p_va
, int *);
1269 case 'l': /* long int */
1271 (void) va_arg(*p_va
, long *);
1275 #ifdef HAVE_LONG_LONG
1276 case 'L': /* LONG_LONG int */
1278 (void) va_arg(*p_va
, LONG_LONG
*);
1283 case 'f': /* float */
1285 (void) va_arg(*p_va
, float *);
1289 case 'd': /* double */
1291 (void) va_arg(*p_va
, double *);
1295 #ifndef WITHOUT_COMPLEX
1296 case 'D': /* complex double */
1298 (void) va_arg(*p_va
, Py_complex
*);
1301 #endif /* WITHOUT_COMPLEX */
1303 case 'c': /* char */
1305 (void) va_arg(*p_va
, char *);
1309 case 's': /* string */
1311 (void) va_arg(*p_va
, char **);
1312 if (*format
== '#') {
1313 (void) va_arg(*p_va
, int *);
1319 case 'z': /* string */
1321 (void) va_arg(*p_va
, char **);
1322 if (*format
== '#') {
1323 (void) va_arg(*p_va
, int *);
1329 case 'S': /* string object */
1331 (void) va_arg(*p_va
, PyObject
**);
1335 case 'O': /* object */
1337 if (*format
== '!') {
1339 (void) va_arg(*p_va
, PyTypeObject
*);
1340 (void) va_arg(*p_va
, PyObject
**);
1343 /* I don't know what this is for */
1344 else if (*format
== '?') {
1345 inquiry pred
= va_arg(*p_va
, inquiry
);
1348 (void) va_arg(*p_va
, PyObject
**);
1352 else if (*format
== '&') {
1353 typedef int (*converter
)(PyObject
*, void *);
1354 (void) va_arg(*p_va
, converter
);
1355 (void) va_arg(*p_va
, void *);
1359 (void) va_arg(*p_va
, PyObject
**);
1365 return "impossible<bad format char>";
1375 PyArg_UnpackTuple(PyObject
*args
, char *name
, int min
, int max
, ...)
1381 #ifdef HAVE_STDARG_PROTOTYPES
1382 va_start(vargs
, max
);
1389 if (!PyTuple_Check(args
)) {
1390 PyErr_SetString(PyExc_SystemError
,
1391 "PyArg_UnpackTuple() argument list is not a tuple");
1394 l
= PyTuple_GET_SIZE(args
);
1399 "%s expected %s%d arguments, got %d",
1400 name
, (min
== max
? "" : "at least "), min
, l
);
1404 "unpacked tuple should have %s%d elements,"
1406 (min
== max
? "" : "at least "), min
, l
);
1414 "%s expected %s%d arguments, got %d",
1415 name
, (min
== max
? "" : "at most "), max
, l
);
1419 "unpacked tuple should have %s%d elements,"
1421 (min
== max
? "" : "at most "), max
, l
);
1425 for (i
= 0; i
< l
; i
++) {
1426 o
= va_arg(vargs
, PyObject
**);
1427 *o
= PyTuple_GET_ITEM(args
, i
);