clean up converted path on error

This commit is contained in:
Benjamin Peterson 2012-05-04 01:31:13 -04:00
parent 3e2e368f3b
commit b399ab2c5c
1 changed files with 20 additions and 11 deletions

View File

@ -3695,7 +3695,7 @@ utime_read_time_arguments(utime_arguments *ua)
"%s: you may specify either 'times'" "%s: you may specify either 'times'"
" or 'ns' but not both", " or 'ns' but not both",
ua->function_name); ua->function_name);
return 0; goto fail;
} }
if (times && (times != Py_None)) { if (times && (times != Py_None)) {
@ -3704,13 +3704,15 @@ utime_read_time_arguments(utime_arguments *ua)
"%s: 'time' must be either" "%s: 'time' must be either"
" a valid tuple of two ints or None", " a valid tuple of two ints or None",
ua->function_name); ua->function_name);
return 0; goto fail;
} }
ua->now = 0; ua->now = 0;
return (_PyTime_ObjectToTimespec(PyTuple_GET_ITEM(times, 0), if (_PyTime_ObjectToTimespec(PyTuple_GET_ITEM(times, 0),
&(ua->atime_s), &(ua->atime_ns)) != -1) &ua->atime_s, &ua->atime_ns) == -1 ||
&& (_PyTime_ObjectToTimespec(PyTuple_GET_ITEM(times, 1), _PyTime_ObjectToTimespec(PyTuple_GET_ITEM(times, 1),
&(ua->mtime_s), &(ua->mtime_ns)) != -1); &ua->mtime_s, &ua->mtime_ns) == -1)
goto fail;
return 1;
} }
if (ns) { if (ns) {
@ -3718,18 +3720,25 @@ utime_read_time_arguments(utime_arguments *ua)
PyErr_Format(PyExc_TypeError, PyErr_Format(PyExc_TypeError,
"%s: 'ns' must be a valid tuple of two ints", "%s: 'ns' must be a valid tuple of two ints",
ua->function_name); ua->function_name);
return 0; goto fail;
} }
ua->now = 0; ua->now = 0;
return (split_py_long_to_s_and_ns(PyTuple_GET_ITEM(ns, 0), if (!split_py_long_to_s_and_ns(PyTuple_GET_ITEM(ns, 0),
&(ua->atime_s), &(ua->atime_ns))) &ua->atime_s, &ua->atime_ns) ||
&& (split_py_long_to_s_and_ns(PyTuple_GET_ITEM(ns, 1), !split_py_long_to_s_and_ns(PyTuple_GET_ITEM(ns, 1),
&(ua->mtime_s), &(ua->mtime_ns))); &ua->mtime_s, &ua->mtime_ns))
goto fail;
return 1;
} }
/* either times=None, or neither times nor ns was specified. use "now". */ /* either times=None, or neither times nor ns was specified. use "now". */
ua->now = 1; ua->now = 1;
return 1; return 1;
fail:
if (ua->converter)
Py_DECREF(ua->path);
return 0;
} }