Remove PyArg_Parse usage from time module. (An extra set of eyeballs on
this would be nice. I'm a little rusty.)
This commit is contained in:
parent
b382b84abe
commit
41cfce9c2b
|
@ -35,6 +35,10 @@ typedef struct {
|
|||
#define PyStructSequence_SET_ITEM(op, i, v) \
|
||||
(((PyStructSequence *)(op))->ob_item[i] = v)
|
||||
|
||||
#define PyStructSequence_GET_ITEM(op, i) \
|
||||
(((PyStructSequence *)(op))->ob_item[i])
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -254,6 +254,29 @@ tmtotuple(struct tm *p)
|
|||
return v;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
structtime_totuple(PyObject *t)
|
||||
{
|
||||
PyObject *x = NULL;
|
||||
unsigned int i;
|
||||
PyObject *v = PyTuple_New(9);
|
||||
if (v == NULL)
|
||||
return NULL;
|
||||
|
||||
for (i=0; i<9; i++) {
|
||||
x = PyStructSequence_GET_ITEM(t, i);
|
||||
Py_INCREF(x);
|
||||
PyTuple_SET_ITEM(v, i, x);
|
||||
}
|
||||
|
||||
if (PyErr_Occurred()) {
|
||||
Py_XDECREF(v);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
time_convert(double when, struct tm * (*function)(const time_t *))
|
||||
{
|
||||
|
@ -332,8 +355,22 @@ gettmarg(PyObject *args, struct tm *p)
|
|||
{
|
||||
int y;
|
||||
memset((void *) p, '\0', sizeof(struct tm));
|
||||
PyObject *t = NULL;
|
||||
|
||||
if (!PyArg_Parse(args, "(iiiiiiiii)",
|
||||
if (PyTuple_Check(args)) {
|
||||
t = args;
|
||||
Py_INCREF(t);
|
||||
}
|
||||
else if (Py_Type(args) == &StructTimeType) {
|
||||
t = structtime_totuple(args);
|
||||
}
|
||||
else {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"Tuple or struct_time argument required");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (t == NULL || !PyArg_ParseTuple(t, "iiiiiiiii",
|
||||
&y,
|
||||
&p->tm_mon,
|
||||
&p->tm_mday,
|
||||
|
@ -342,8 +379,12 @@ gettmarg(PyObject *args, struct tm *p)
|
|||
&p->tm_sec,
|
||||
&p->tm_wday,
|
||||
&p->tm_yday,
|
||||
&p->tm_isdst))
|
||||
&p->tm_isdst)) {
|
||||
Py_XDECREF(t);
|
||||
return 0;
|
||||
}
|
||||
Py_DECREF(t);
|
||||
|
||||
if (y < 1900) {
|
||||
PyObject *accept = PyDict_GetItemString(moddict,
|
||||
"accept2dyear");
|
||||
|
|
Loading…
Reference in New Issue