\cdata{Py_FileSystemDefaultEncoding} as the encoding for file
names. This variable should be treated as read-only: On some systems,
it will be a pointer to a static string, on others, it will change at
-run-time, e.g. when the application invokes setlocale.
+run-time (such as when the application invokes setlocale).
Error handling is set by errors which may also be set to \NULL{}
meaning to use the default handling defined for the codec. Default
Return a new tuple object of size \var{len}, or \NULL{} on failure.
\end{cfuncdesc}
+\begin{cfuncdesc}{PyObject*}{PyTuple_Pack}{int n, \moreargs}
+ Return a new tuple object of size \var{n}, or \NULL{} on failure.
+ The tuple values are initialized to the subsequent \var{n} C arguments
+ pointing to Python objects. \samp{PyTuple_Pack(2, \var{a}, \var{b})}
+ is equivalent to \samp{Py_BuildValue("(OO)", \var{a}, \var{b})}.
+ \versionadded{2.4}
+\end{cfuncdesc}
+
\begin{cfuncdesc}{int}{PyTuple_Size}{PyObject *p}
Takes a pointer to a tuple object, and returns the size of that
tuple.
PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, int, PyObject *);
PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, int, int);
PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, int);
+PyAPI_FUNC(PyObject *) PyTuple_Pack(int, ...);
/* Macro, trading safety for speed */
#define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i])
C API
-----
+- Added a new function, PyTuple_Pack(n, ...) for constructing tuples from a
+ variable length argument list of Python objects without having to invoke
+ the more complex machinery of Py_BuildValue(). PyTuple_Pack(3, a, b, c)
+ is equivalent to Py_BuildValue("(OOO)", a, b, c).
+
New platforms
-------------
return 0;
}
+PyObject *
+PyTuple_Pack(int n, ...)
+{
+ int i;
+ PyObject *o;
+ PyObject *result;
+ va_list vargs;
+
+ va_start(vargs, n);
+ result = PyTuple_New(n);
+ if (result == NULL)
+ return NULL;
+ for (i = 0; i < n; i++) {
+ o = va_arg(vargs, PyObject *);
+ Py_INCREF(o);
+ PyTuple_SET_ITEM(result, i, o);
+ }
+ va_end(vargs);
+ return result;
+}
+
+
/* Methods */
static void