diff options
author | Simon Graham <simon.graham@seequent.com> | 2020-10-23 09:17:10 +1300 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2020-11-14 16:35:51 -0700 |
commit | cf122e8d9cb17143ee2f2bc58aadb63fc99e58c5 (patch) | |
tree | 6fa7b942bfd51ef82a0e477c0eacedd379d78f9f | |
parent | bb572db23526ad7b3b91723826e43fe304a472ef (diff) | |
download | numpy-cf122e8d9cb17143ee2f2bc58aadb63fc99e58c5.tar.gz |
MAINT: Refactored array_tofile to use a helper function.
-rw-r--r-- | numpy/core/src/multiarray/methods.c | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/numpy/core/src/multiarray/methods.c b/numpy/core/src/multiarray/methods.c index 41564bdf4..bf4309290 100644 --- a/numpy/core/src/multiarray/methods.c +++ b/numpy/core/src/multiarray/methods.c @@ -583,6 +583,28 @@ array_tostring(PyArrayObject *self, PyObject *args, PyObject *kwds) return PyArray_ToString(self, order); } +/* Like PyArray_ToFile but takes the file as a python object */ +static int +PyArray_ToFileObject(PyArrayObject *self, PyObject *file, char *sep, char *format) +{ + npy_off_t orig_pos = 0; + FILE *fd = npy_PyFile_Dup2(file, "wb", &orig_pos); + + if (fd == NULL) { + return -1; + } + + int write_ret = PyArray_ToFile(self, fd, sep, format); + PyObject *err_type, *err_value, *err_traceback; + PyErr_Fetch(&err_type, &err_value, &err_traceback); + int close_ret = npy_PyFile_DupClose2(file, fd, orig_pos); + npy_PyErr_ChainExceptions(err_type, err_value, err_traceback); + + if (write_ret || close_ret) { + return -1; + } + return 0; +} /* This should grow an order= keyword to be consistent */ @@ -592,10 +614,8 @@ array_tofile(PyArrayObject *self, PyObject *args, PyObject *kwds) { int own; PyObject *file; - FILE *fd; char *sep = ""; char *format = ""; - npy_off_t orig_pos = 0; static char *kwlist[] = {"file", "sep", "format", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|ss:tofile", kwlist, @@ -620,34 +640,19 @@ array_tofile(PyArrayObject *self, PyObject *args, PyObject *kwds) own = 0; } - fd = npy_PyFile_Dup2(file, "wb", &orig_pos); - PyObject *err_type, *err_value, *err_traceback; - int failed = 0; - - if (fd != NULL) { - if (PyArray_ToFile(self, fd, sep, format) < 0) { - failed = 1; - } - PyErr_Fetch(&err_type, &err_value, &err_traceback); - if (npy_PyFile_DupClose2(file, fd, orig_pos) < 0) { - failed = 1; - } - npy_PyErr_ChainExceptions(err_type, err_value, err_traceback); - } else { - failed = 1; - } + int file_ret = PyArray_ToFileObject(self, file, sep, format); + int close_ret = 0; if (own) { + PyObject *err_type, *err_value, *err_traceback; PyErr_Fetch(&err_type, &err_value, &err_traceback); - if (npy_PyFile_CloseFile(file) < 0) { - failed = 1; - } + close_ret = npy_PyFile_CloseFile(file); npy_PyErr_ChainExceptions(err_type, err_value, err_traceback); } Py_DECREF(file); - if (failed) { + if (file_ret || close_ret) { return NULL; } Py_RETURN_NONE; |