Mercurial > cpython-lru_cache-weakref
diff Python/getargs.c @ 32606:cc1f74d19fcb legacy-trunk
Add PyArg_VaParseTupleAndKeywords(). Document this function and
PyArg_VaParse().
Closes patch #550732. Thanks Greg Chapman.
| author | Brett Cannon <bcannon@gmail.com> |
|---|---|
| date | Sat, 10 Jul 2004 22:20:32 +0000 |
| parents | 6c4a04ce965c |
| children | 8ca8febc0a0d |
line wrap: on
line diff
--- a/Python/getargs.c Sat Jul 10 22:07:02 2004 +0000 +++ b/Python/getargs.c Sat Jul 10 22:20:32 2004 +0000 @@ -12,6 +12,9 @@ int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, char *, char **, ...); +int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *, + char *, char **, va_list); + /* Forward */ static int vgetargs1(PyObject *, char *, va_list *, int); @@ -1153,6 +1156,39 @@ } +int +PyArg_VaParseTupleAndKeywords(PyObject *args, + PyObject *keywords, + char *format, + char **kwlist, va_list va) +{ + int retval; + va_list lva; + + if ((args == NULL || !PyTuple_Check(args)) || + (keywords != NULL && !PyDict_Check(keywords)) || + format == NULL || + kwlist == NULL) + { + PyErr_BadInternalCall(); + return 0; + } + +#ifdef VA_LIST_IS_ARRAY + memcpy(lva, va, sizeof(va_list)); +#else +#ifdef __va_copy + __va_copy(lva, va); +#else + lva = va; +#endif +#endif + + retval = vgetargskeywords(args, keywords, format, kwlist, &lva); + return retval; +} + + static int vgetargskeywords(PyObject *args, PyObject *keywords, char *format, char **kwlist, va_list *p_va)
