xref: /freebsd/crypto/openssh/openbsd-compat/bsd-nextstep.c (revision f0adf7f5cdd241db2f2c817683191a6ef64a4e95)
1 /*
2  * Copyright (c) 2000,2001 Ben Lindstrom.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24 
25 #include "includes.h"
26 
27 RCSID("$Id: bsd-nextstep.c,v 1.6 2003/06/01 03:23:57 mouring Exp $");
28 
29 #ifdef HAVE_NEXT
30 #include <errno.h>
31 #include <sys/wait.h>
32 #include "bsd-nextstep.h"
33 
34 pid_t
35 posix_wait(int *status)
36 {
37 	union wait statusp;
38 	pid_t wait_pid;
39 
40 	#undef wait			/* Use NeXT's wait() function */
41 	wait_pid = wait(&statusp);
42 	if (status)
43 		*status = (int) statusp.w_status;
44 
45 	return (wait_pid);
46 }
47 
48 int
49 tcgetattr(int fd, struct termios *t)
50 {
51 	return (ioctl(fd, TIOCGETA, t));
52 }
53 
54 int
55 tcsetattr(int fd, int opt, const struct termios *t)
56 {
57 	struct termios localterm;
58 
59 	if (opt & TCSASOFT) {
60 		localterm = *t;
61 		localterm.c_cflag |= CIGNORE;
62 		t = &localterm;
63 	}
64 	switch (opt & ~TCSASOFT) {
65 	case TCSANOW:
66 		return (ioctl(fd, TIOCSETA, t));
67 	case TCSADRAIN:
68 		return (ioctl(fd, TIOCSETAW, t));
69 	case TCSAFLUSH:
70 		return (ioctl(fd, TIOCSETAF, t));
71 	default:
72 		errno = EINVAL;
73 		return (-1);
74 	}
75 }
76 
77 int tcsetpgrp(int fd, pid_t pgrp)
78 {
79 	return (ioctl(fd, TIOCSPGRP, &pgrp));
80 }
81 
82 speed_t cfgetospeed(const struct termios *t)
83 {
84 	return (t->c_ospeed);
85 }
86 
87 speed_t cfgetispeed(const struct termios *t)
88 {
89 	return (t->c_ispeed);
90 }
91 
92 int
93 cfsetospeed(struct termios *t,int speed)
94 {
95 	t->c_ospeed = speed;
96 	return (0);
97 }
98 
99 int
100 cfsetispeed(struct termios *t, int speed)
101 {
102 	t->c_ispeed = speed;
103 	return (0);
104 }
105 #endif /* HAVE_NEXT */
106