diff --git a/src/modules/files/file.c b/src/modules/files/file.c index 01515c40713a6e44d02d67dcf1b3074f45a7d79b..9bcf7538ca0dac634f28dec8fbc68739e35c001c 100644 --- a/src/modules/files/file.c +++ b/src/modules/files/file.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: file.c,v 1.166 2000/03/13 16:46:50 grubba Exp $"); +RCSID("$Id: file.c,v 1.167 2000/03/27 12:38:09 grubba Exp $"); #include "fdlib.h" #include "interpret.h" #include "svalue.h" @@ -2752,7 +2752,22 @@ void pike_module_init(void) /* Used from backend */ int pike_make_pipe(int *fds) { - return socketpair(AF_UNIX, SOCK_STREAM, 0, fds); + int res = socketpair(AF_UNIX, SOCK_STREAM, 0, fds); + if (res < 0) return res; + if ((fds[0] > MAX_OPEN_FILEDESCRIPTORS) || + (fds[1] > MAX_OPEN_FILEDESCRIPTORS)) { + close(fds[0]); + close(fds[1]); +#ifdef EMFILE + errno = EMFILE; +#else /* !EMFILE */ +#ifdef EBADF + errno = EBADF; +#endif /* EBADF */ +#endif /* EMFILE */ + return -1; + } + return res; } int fd_from_object(struct object *o)