diff options
| author | tgoodwin <tgoodwin> | 1998-02-24 12:00:28 +0000 |
|---|---|---|
| committer | Toby Goodwin <toby@paccrat.org> | 2015-05-16 21:23:05 +0100 |
| commit | a8c039e14eafd7933776e8616715955d52320600 (patch) | |
| tree | 5e4ba86b11610c5ca9370b7e9df801730cc5f075 | |
| parent | a3d14284af40b0d4d9bf33cf33f640c3ea6102ad (diff) | |
try for mkfifo()
| -rw-r--r-- | configure.ac | 12 | ||||
| -rw-r--r-- | glom.c | 11 |
2 files changed, 18 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac index 0fae5ca..91364ec 100644 --- a/configure.ac +++ b/configure.ac @@ -196,8 +196,9 @@ esac AM_CONDITIONAL(N_H_B, test "$ac_cv_sys_interpreter" = no) -dnl What do we do for command arguments? We want /dev/fd, Linux's -dnl /proc/self/fd, or failing that, FIFOs. +dnl What do we do for command arguments? We want /dev/fd or Linux's +dnl /proc/self/fd. Failing that, we'll try for POSIX mkfifo(), or a +dnl mknod() that makes FIFOs. AC_CACHE_CHECK(for /dev/fd, rc_cv_sys_dev_fd, if test -d /dev/fd && test -r /dev/fd/0; then rc_cv_sys_dev_fd=yes @@ -210,7 +211,12 @@ AC_CACHE_CHECK(for /dev/fd, rc_cv_sys_dev_fd, case "$rc_cv_sys_dev_fd" in yes) AC_DEFINE(HAVE_DEV_FD) ;; odd) AC_DEFINE(HAVE_PROC_SELF_FD) ;; -no) AC_CACHE_CHECK(for named pipes, rc_cv_sys_fifo, +no) AC_CHECK_FUNCS(mkfifo) ;; +esac + +case "$ac_cv_func_mkfifo" in +yes) AC_DEFINE(HAVE_FIFO) ;; +no) AC_CACHE_CHECK(for mknod FIFOs, rc_cv_sys_fifo, AC_TRY_RUN([ #include <sys/types.h> #include <sys/stat.h> @@ -324,6 +324,12 @@ static List *mkcmdarg(Node *n) { #elif HAVE_FIFO +#if HAVE_MKFIFO +/* Have POSIX mkfifo(). */ +#else +#define mkfifo(n,m) mknod(n, S_IFIFO | m, 0) +#endif + static List *mkcmdarg(Node *n) { int fd; char *name; @@ -331,8 +337,9 @@ static List *mkcmdarg(Node *n) { Estack *e = enew(Estack); List *ret = nnew(List); static int fifonumber = 0; + name = nprint("/tmp/rc%d.%d", getpid(), fifonumber++); - if (mknod(name, S_IFIFO | 0666, 0) < 0) { + if (mkfifo(name, 0666) < 0) { uerror("mknod"); return NULL; } @@ -360,7 +367,7 @@ static List *mkcmdarg(Node *n) { #else static List *mkcmdarg(Node *n) { - rc_error("named pipes are not supported"); + rc_error("command arguments are not supported"); return NULL; } |