summaryrefslogtreecommitdiffstats
path: root/next-posix.c
diff options
context:
space:
mode:
Diffstat (limited to 'next-posix.c')
-rw-r--r--next-posix.c148
1 files changed, 148 insertions, 0 deletions
diff --git a/next-posix.c b/next-posix.c
new file mode 100644
index 00000000..247ba09a
--- /dev/null
+++ b/next-posix.c
@@ -0,0 +1,148 @@
+#include "config.h"
+
+#ifdef HAVE_NEXT
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include <sys/fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <sys/file.h>
+#include <errno.h>
+#include <termios.h>
+#include <sys/wait.h>
+#ifdef HAVE_STDDEF_H
+#include <stddef.h>
+#endif
+
+#include "xmalloc.h"
+#include "ssh.h"
+#include "next-posix.h"
+
+int
+waitpid(int pid, int *stat_loc, int options)
+{
+ if (pid <= 0) {
+ if (pid != -1) {
+ errno = EINVAL;
+ return -1;
+ }
+ pid = 0; /* wait4() expects pid=0 for indiscriminate wait. */
+ }
+ return wait4(pid, (union wait *)stat_loc, options, NULL);
+}
+
+pid_t setsid(void)
+{
+ return setpgrp(0, getpid());
+}
+
+int
+tcgetattr(int fd, struct termios *t)
+{
+ return (ioctl(fd, TIOCGETA, t));
+}
+
+int
+tcsetattr(int fd, int opt, const struct termios *t)
+{
+ struct termios localterm;
+
+ if (opt & TCSASOFT) {
+ localterm = *t;
+ localterm.c_cflag |= CIGNORE;
+ t = &localterm;
+ }
+ switch (opt & ~TCSASOFT) {
+ case TCSANOW:
+ return (ioctl(fd, TIOCSETA, t));
+ case TCSADRAIN:
+ return (ioctl(fd, TIOCSETAW, t));
+ case TCSAFLUSH:
+ return (ioctl(fd, TIOCSETAF, t));
+ default:
+ errno = EINVAL;
+ return (-1);
+ }
+}
+
+int tcsetpgrp(int fd, pid_t pgrp)
+{
+ int s;
+
+ s = pgrp;
+ return (ioctl(fd, TIOCSPGRP, &s));
+}
+
+speed_t cfgetospeed(const struct termios *t)
+{
+ return (t->c_ospeed);
+}
+
+speed_t cfgetispeed(const struct termios *t)
+{
+ return (t->c_ispeed);
+}
+
+int
+cfsetospeed(struct termios *t,int speed)
+{
+ t->c_ospeed = speed;
+ return (0);
+}
+
+int
+cfsetispeed(struct termios *t, speed_t speed)
+{
+ t->c_ispeed = speed;
+ return (0);
+}
+
+#if 0
+
+/*define sigset_t int*/
+
+/* This whole thing is insane. It's purely wrong, but it's a first
+ go a it. -bl */
+
+int sigemptyset(sigset_t *set)
+{
+ return 0;
+}
+
+int sigaddset(sigset_t *set, int signum)
+{
+ *set |= (1 << (signum - 1));
+ return set;
+}
+
+int sigprocmask(int how, const sigset_t *set, sigset_t *oldset)
+{
+ switch(how) {
+ case SIG_BLOCK:
+ return 0;
+ case SIG_UNBLOCK:
+ return ( 0 & ~ *set);
+ default:
+ return 0;
+ }
+}
+
+int sigsuspend(const sigset_t *mask)
+{
+}
+
+int sigaction(int signum,const struct sigaction *act, struct sigaction *oldact)
+{
+}
+
+#endif /* 0 */
+
+#endif /* HAVE_NEXT */