diff --git a/compat.h b/compat.h index 2b666b1f..d38e6f0c 100644 --- a/compat.h +++ b/compat.h @@ -18,6 +18,7 @@ #define COMPAT_H #include +#include #include #include @@ -283,9 +284,15 @@ int b64_ntop(const char *, size_t, char *, size_t); int b64_pton(const char *, u_char *, size_t); #endif +#ifndef HAVE_FDFORKPTY +/* fdforkpty.c */ +int getptmfd(void); +pid_t fdforkpty(int, int *, char *, struct termios *, + struct winsize *); +#endif + #ifndef HAVE_FORKPTY /* forkpty.c */ -#include pid_t forkpty(int *, char *, struct termios *, struct winsize *); #endif diff --git a/compat/fdforkpty.c b/compat/fdforkpty.c new file mode 100644 index 00000000..c05f0dbf --- /dev/null +++ b/compat/fdforkpty.c @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2017 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include + +#include "compat.h" + +int +getptmfd(void) +{ + return (INT_MAX); +} + +pid_t +fdforkpty(__unused int ptmfd, int *master, char *name, struct termios *tio, + struct winsize *ws) +{ + return (forkpty(master, name, tio, ws)); +} diff --git a/compat/forkpty-aix.c b/compat/forkpty-aix.c index 31b084db..5eba9fd6 100644 --- a/compat/forkpty-aix.c +++ b/compat/forkpty-aix.c @@ -29,7 +29,8 @@ void fatal(const char *, ...); void fatalx(const char *, ...); pid_t -forkpty(int *master, unused char *name, struct termios *tio, struct winsize *ws) +forkpty(int *master, __unused char *name, struct termios *tio, + struct winsize *ws) { int slave = -1, fd, pipe_fd[2]; char *path, dummy; diff --git a/compat/setenv.c b/compat/setenv.c index 9f9295c8..d9235bcc 100644 --- a/compat/setenv.c +++ b/compat/setenv.c @@ -15,13 +15,15 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include + #include #include #include "compat.h" int -setenv(const char *name, const char *value, unused int overwrite) +setenv(const char *name, const char *value, __unused int overwrite) { char *newval; diff --git a/configure.ac b/configure.ac index 31098d16..14a286b8 100644 --- a/configure.ac +++ b/configure.ac @@ -454,7 +454,13 @@ else AC_LIBOBJ(getopt) fi -# Look for forkpty in libutil. compat/forkpty-*.c is linked if not found. +# Look for fdforkpty and forkpty in libutil. +AC_SEARCH_LIBS(fdforkpty, util, found_fdforkpty=yes, found_fdforkpty=no) +if test "x$found_fdforkpty" = xyes; then + AC_DEFINE(HAVE_FDFORKPTY) +else + AC_LIBOBJ(fdforkpty) +fi AC_SEARCH_LIBS(forkpty, util, found_forkpty=yes, found_forkpty=no) if test "x$found_forkpty" = xyes; then AC_DEFINE(HAVE_FORKPTY)