From 06a83e90aa345c27db2652ddccdba683cdfa9311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sun, 14 Apr 2002 10:19:44 +0000 Subject: [PATCH] Patch #543447: Add posix.mknod. --- Doc/lib/libos.tex | 11 +++++++++++ Misc/NEWS | 2 ++ Modules/posixmodule.c | 44 +++++++++++++++++++++++++++++++++++++++---- configure | 5 +++-- configure.in | 2 +- pyconfig.h.in | 3 +++ 6 files changed, 60 insertions(+), 7 deletions(-) diff --git a/Doc/lib/libos.tex b/Doc/lib/libos.tex index 8c819d92022..6a07ab1c115 100644 --- a/Doc/lib/libos.tex +++ b/Doc/lib/libos.tex @@ -644,6 +644,17 @@ the client opens it for writing. Note that \function{mkfifo()} doesn't open the FIFO --- it just creates the rendezvous point. \end{funcdesc} +\begin{funcdesc}{mknod}{path\optional{, mode=0600, major, minor}} +Create a filesystem node (file, device special file or named pipe) +named filename. mode specifies both the permissions to use and the +type of node to be created, being combined (bitwise OR) with one of +S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO (those constants are available +in \module{stat}). For S_IFCHR and S_IFBLK, major and minor define the +newly created device special file, otherwise they are ignored. + +\versionadded{2.3} +\end{funcdesc} + \begin{funcdesc}{mkdir}{path\optional{, mode}} Create a directory named \var{path} with numeric mode \var{mode}. The default \var{mode} is \code{0777} (octal). On some systems, diff --git a/Misc/NEWS b/Misc/NEWS index d3ed145ac2d..e6fc808f1b9 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -56,6 +56,8 @@ Core and builtins Extension modules +- posix.mknod was added. + - The locale module now exposes the C library's gettext interface. - A security hole ("double free") was found in zlib-1.1.3, a popular diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 5b80479bf85..2a5915a8155 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -4582,19 +4582,52 @@ posix_pipe(PyObject *self, PyObject *args) #ifdef HAVE_MKFIFO static char posix_mkfifo__doc__[] = -"mkfifo(file, [, mode=0666]) -> None\n\ +"mkfifo(filename, [, mode=0666]) -> None\n\ Create a FIFO (a POSIX named pipe)."; static PyObject * posix_mkfifo(PyObject *self, PyObject *args) { - char *file; + char *filename; int mode = 0666; int res; - if (!PyArg_ParseTuple(args, "s|i:mkfifo", &file, &mode)) + if (!PyArg_ParseTuple(args, "s|i:mkfifo", &filename, &mode)) return NULL; Py_BEGIN_ALLOW_THREADS - res = mkfifo(file, mode); + res = mkfifo(filename, mode); + Py_END_ALLOW_THREADS + if (res < 0) + return posix_error(); + Py_INCREF(Py_None); + return Py_None; +} +#endif + + +#ifdef HAVE_MKNOD +static char posix_mknod__doc__[] = +"mknod(filename, [, mode=0600, major, minor]) -> None\n\ +Create a filesystem node (file, device special file or named pipe)\n\ +named filename. mode specifies both the permissions to use and the\n\ +type of node to be created, being combined (bitwise OR) with one of\n\ +S_IFREG, S_IFCHR, S_IFBLK, and S_IFIFO. For S_IFCHR and S_IFBLK,\n\ +major and minor define the newly created device special file, otherwise\n\ +they are ignored."; + + +static PyObject * +posix_mknod(PyObject *self, PyObject *args) +{ + char *filename; + int mode = 0600; + int major = 0; + int minor = 0; + int res; + if (!PyArg_ParseTuple(args, "s|iii:mknod", &filename, + &mode, &major, &minor)) + return NULL; + Py_BEGIN_ALLOW_THREADS + res = mknod(filename, mode, makedev(major, minor)); Py_END_ALLOW_THREADS if (res < 0) return posix_error(); @@ -6336,6 +6369,9 @@ static PyMethodDef posix_methods[] = { #ifdef HAVE_MKFIFO {"mkfifo", posix_mkfifo, METH_VARARGS, posix_mkfifo__doc__}, #endif +#ifdef HAVE_MKNOD + {"mknod", posix_mknod, METH_VARARGS, posix_mknod__doc__}, +#endif #ifdef HAVE_FTRUNCATE {"ftruncate", posix_ftruncate, METH_VARARGS, posix_ftruncate__doc__}, #endif diff --git a/configure b/configure index 48467c9c64e..c9c9bd2f06f 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 1.306 . +# From configure.in Revision: 1.307 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.53. # @@ -11243,12 +11243,13 @@ echo "${ECHO_T}MACHDEP_OBJS" >&6 + for ac_func in alarm chown chroot clock confstr ctermid ctermid_r execv \ flock fork fsync fdatasync fpathconf ftime ftruncate \ gai_strerror getgroups getlogin getpeername getpid getpwent getwd \ - hstrerror inet_pton kill killpg link lstat mkfifo mktime mremap \ + hstrerror inet_pton kill killpg link lstat mkfifo mknod mktime mremap \ nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid setgroups \ diff --git a/configure.in b/configure.in index 8b04c03367c..8d1339a0074 100644 --- a/configure.in +++ b/configure.in @@ -1568,7 +1568,7 @@ AC_MSG_RESULT(MACHDEP_OBJS) AC_CHECK_FUNCS(alarm chown chroot clock confstr ctermid ctermid_r execv \ flock fork fsync fdatasync fpathconf ftime ftruncate \ gai_strerror getgroups getlogin getpeername getpid getpwent getwd \ - hstrerror inet_pton kill killpg link lstat mkfifo mktime mremap \ + hstrerror inet_pton kill killpg link lstat mkfifo mknod mktime mremap \ nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid setgroups \ diff --git a/pyconfig.h.in b/pyconfig.h.in index 5ad717b9024..dbc03be2ea9 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -260,6 +260,9 @@ /* Define to 1 if you have the `mkfifo' function. */ #undef HAVE_MKFIFO +/* Define to 1 if you have the `mknod' function. */ +#undef HAVE_MKNOD + /* Define to 1 if you have the `mktime' function. */ #undef HAVE_MKTIME