summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Graham <simon.graham@seequent.com>2020-10-23 09:17:10 +1300
committerCharles Harris <charlesr.harris@gmail.com>2020-11-14 16:35:51 -0700
commitcf122e8d9cb17143ee2f2bc58aadb63fc99e58c5 (patch)
tree6fa7b942bfd51ef82a0e477c0eacedd379d78f9f
parentbb572db23526ad7b3b91723826e43fe304a472ef (diff)
downloadnumpy-cf122e8d9cb17143ee2f2bc58aadb63fc99e58c5.tar.gz
MAINT: Refactored array_tofile to use a helper function.
-rw-r--r--numpy/core/src/multiarray/methods.c49
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;