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