From 6b14491bb4d0ef0ec7e7dbc8ec60356fae564177 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 14 Mar 1995 15:05:13 +0000 Subject: mode and optional bufsize for makefile() --- Modules/socketmodule.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index a361ca9..1830fd6 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -59,7 +59,7 @@ Socket methods: - s.getsockname() --> sockaddr - s.getpeername() --> sockaddr - s.listen(n) --> Py_None -- s.makefile(mode) --> file object +- s.makefile([mode[, bufsize]]) --> file object - s.recv(nbytes [,flags]) --> string - s.recvfrom(nbytes [,flags]) --> string, sockaddr - s.send(string [,flags]) --> nbytes @@ -733,15 +733,24 @@ static PyObject * BUILD_FUNC_DEF_2(PySocketSock_makefile,PySocketSockObject *,s, PyObject *,args) { extern int fclose Py_PROTO((FILE *)); - char *mode; + char *mode = "r"; + int bufsize = -1; int fd; FILE *fp; - if (!PyArg_Parse(args, "s", &mode)) + PyObject *f; + + if (!PyArg_ParseTuple(args, "|si", &mode, &bufsize)) return NULL; if ((fd = dup(s->sock_fd)) < 0 || - (fp = fdopen(fd, mode)) == NULL) + (fp = fdopen(fd, mode)) == NULL) { + if (fd >= 0) + close(fd); return PySocket_Err(); - return PyFile_FromFile(fp, "", mode, fclose); + } + f = PyFile_FromFile(fp, "", mode, fclose); + if (f != NULL) + PyFile_SetBufSize(f, bufsize); + return f; } #endif /* NO_DUP */ @@ -900,7 +909,7 @@ static PyMethodDef PySocketSock_methods[] = { #endif {"listen", (PyCFunction)PySocketSock_listen}, #ifndef NO_DUP - {"makefile", (PyCFunction)PySocketSock_makefile}, + {"makefile", (PyCFunction)PySocketSock_makefile, 1}, #endif {"recv", (PyCFunction)PySocketSock_recv}, {"recvfrom", (PyCFunction)PySocketSock_recvfrom}, -- cgit v0.12