summaryrefslogtreecommitdiff
path: root/Objects/fileobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/fileobject.c')
-rw-r--r--Objects/fileobject.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 737ebb7635..1d8142e17c 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -493,9 +493,10 @@ PyFile_FromFile(FILE *fp, char *name, char *mode, int (*close)(FILE *))
PyObject *
PyFile_FromString(char *name, char *mode)
{
+ extern int fclose(FILE *);
PyFileObject *f;
- f = (PyFileObject *)PyFile_FromFile((FILE *)NULL, name, mode, NULL);
+ f = (PyFileObject *)PyFile_FromFile((FILE *)NULL, name, mode, fclose);
if (f != NULL) {
if (open_the_file(f, name, mode) == NULL) {
Py_DECREF(f);
@@ -635,11 +636,13 @@ file_dealloc(PyFileObject *f)
static PyObject *
file_repr(PyFileObject *f)
{
+ PyObject *ret = NULL;
+ PyObject *name = NULL;
if (PyUnicode_Check(f->f_name)) {
#ifdef Py_USING_UNICODE
- PyObject *ret = NULL;
- PyObject *name = PyUnicode_AsUnicodeEscapeString(f->f_name);
- const char *name_str = name ? PyString_AsString(name) : "?";
+ const char *name_str;
+ name = PyUnicode_AsUnicodeEscapeString(f->f_name);
+ name_str = name ? PyString_AsString(name) : "?";
ret = PyString_FromFormat("<%s file u'%s', mode '%s' at %p>",
f->f_fp == NULL ? "closed" : "open",
name_str,
@@ -649,11 +652,16 @@ file_repr(PyFileObject *f)
return ret;
#endif
} else {
- return PyString_FromFormat("<%s file '%s', mode '%s' at %p>",
+ name = PyObject_Repr(f->f_name);
+ if (name == NULL)
+ return NULL;
+ ret = PyString_FromFormat("<%s file %s, mode '%s' at %p>",
f->f_fp == NULL ? "closed" : "open",
- PyString_AsString(f->f_name),
+ PyString_AsString(name),
PyString_AsString(f->f_mode),
f);
+ Py_XDECREF(name);
+ return ret;
}
}