@@ -206,7 +206,17 @@ static PyObject *Py_write_png(PyObject *self, PyObject *args, PyObject *kwds)
206
206
goto exit ;
207
207
}
208
208
buff.cursor = 0 ;
209
- } else if ((fp = mpl_PyFile_Dup (py_file, (char *)" wb" , &offset))) {
209
+ } else {
210
+ #if PY3K
211
+ if (close_file) {
212
+ #else
213
+ if (close_file || PyFile_Check (py_file)) {
214
+ #endif
215
+ fp = mpl_PyFile_Dup (py_file, (char *)" wb" , &offset);
216
+ }
217
+ }
218
+
219
+ if (fp) {
210
220
close_dup_file = true ;
211
221
} else {
212
222
PyErr_Clear ();
@@ -374,10 +384,23 @@ static PyObject *_read_png(PyObject *filein, bool float_result)
374
384
py_file = filein;
375
385
}
376
386
377
- if ((fp = mpl_PyFile_Dup (py_file, (char *)" rb" , &offset))) {
387
+ #if PY3K
388
+ if (close_file) {
389
+ #else
390
+ if (close_file || PyFile_Check (py_file)) {
391
+ #endif
392
+ fp = mpl_PyFile_Dup (py_file, (char *)" rb" , &offset);
393
+ }
394
+
395
+ if (fp) {
378
396
close_dup_file = true ;
397
+ if (fread (header, 1 , 8 , fp) != 8 ) {
398
+ PyErr_SetString (PyExc_IOError, " error reading PNG header" );
399
+ goto exit ;
400
+ }
379
401
} else {
380
402
PyErr_Clear ();
403
+
381
404
PyObject *read_method = PyObject_GetAttrString (py_file, " read" );
382
405
if (!(read_method && PyCallable_Check (read_method))) {
383
406
Py_XDECREF (read_method);
@@ -387,14 +410,6 @@ static PyObject *_read_png(PyObject *filein, bool float_result)
387
410
goto exit ;
388
411
}
389
412
Py_XDECREF (read_method);
390
- }
391
-
392
- if (fp) {
393
- if (fread (header, 1 , 8 , fp) != 8 ) {
394
- PyErr_SetString (PyExc_IOError, " error reading PNG header" );
395
- goto exit ;
396
- }
397
- } else {
398
413
_read_png_data (py_file, header, 8 );
399
414
}
400
415
0 commit comments