@@ -28,22 +28,32 @@ extern "C" {
2828PyObject *
2929PyFile_FromFile (FILE * fp , char * name , char * mode , int (* close )(FILE * ))
3030{
31- PyObject * io , * stream , * nameobj ;
31+ return PyFile_FromFileEx (fp , name , mode , close , -1 , NULL , NULL );
32+ }
33+
34+ PyObject *
35+ PyFile_FromFileEx (FILE * fp , char * name , char * mode , int (* close )(FILE * ),
36+ int buffering , char * encoding , char * newline )
37+ {
38+ PyObject * io , * stream , * nameobj = NULL ;
3239
3340 io = PyImport_ImportModule ("io" );
3441 if (io == NULL )
3542 return NULL ;
36- stream = PyObject_CallMethod (io , "open" , "is" , fileno (fp ), mode );
37- Py_DECREF (io );
43+ stream = PyObject_CallMethod (io , "open" , "isiss" , fileno (fp ), mode ,
44+ buffering , encoding , newline );
45+ Py_DECREF (io );
3846 if (stream == NULL )
3947 return NULL ;
40- nameobj = PyUnicode_FromString (name );
41- if (nameobj == NULL )
42- PyErr_Clear ();
43- else {
44- if (PyObject_SetAttrString (stream , "name" , nameobj ) < 0 )
48+ if (name != NULL ) {
49+ nameobj = PyUnicode_FromString (name );
50+ if (nameobj == NULL )
4551 PyErr_Clear ();
46- Py_DECREF (nameobj );
52+ else {
53+ if (PyObject_SetAttrString (stream , "name" , nameobj ) < 0 )
54+ PyErr_Clear ();
55+ Py_DECREF (nameobj );
56+ }
4757 }
4858 return stream ;
4959}
0 commit comments