1 /* 2 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 /* 7 * Copyright (c) 1983 Regents of the University of California. 8 * All rights reserved. The Berkeley software License Agreement 9 * specifies the terms and conditions for redistribution. 10 */ 11 12 #pragma ident "%Z%%M% %I% %E% SMI" 13 14 #include "tip.h" 15 16 static sigjmp_buf deadline; 17 static int deadfl; 18 19 void 20 dead(void) 21 { 22 23 deadfl = 1; 24 siglongjmp(deadline, 1); 25 } 26 27 int 28 hunt(char *name) 29 { 30 char *cp; 31 sig_handler_t f; 32 33 f = signal(SIGALRM, (sig_handler_t)dead); 34 while (cp = getremote(name)) { 35 deadfl = 0; 36 uucplock = cp; 37 if (tip_mlock(uucplock) < 0) { 38 delock(uucplock); 39 continue; 40 } 41 /* 42 * Straight through call units, such as the BIZCOMP, 43 * VADIC and the DF, must indicate they're hardwired in 44 * order to get an open file descriptor placed in FD. 45 * Otherwise, as for a DN-11, the open will have to 46 * be done in the "open" routine. 47 */ 48 if (!HW) 49 break; 50 if (sigsetjmp(deadline, 1) == 0) { 51 (void) alarm(10); 52 if (!trusted_device) 53 userperm(); 54 errno = 0; 55 if ((FD = open(cp, O_RDWR)) < 0 && errno != EBUSY) { 56 (void) fprintf(stderr, "tip: "); 57 perror(cp); 58 } 59 if (!trusted_device) 60 myperm(); 61 if (FD >= 0 && !isatty(FD)) { 62 (void) fprintf(stderr, "tip: %s: not a tty\n", 63 cp); 64 (void) close(FD); 65 FD = -1; 66 } 67 } 68 (void) alarm(0); 69 if (!deadfl && FD >= 0) { 70 struct termios t; 71 72 (void) ioctl(FD, TCGETS, &t); 73 t.c_cflag |= XCLUDE|HUPCL; 74 (void) ioctl(FD, TCSETSF, &t); 75 (void) signal(SIGALRM, f); 76 return ((int)cp); 77 } 78 delock(uucplock); 79 } 80 (void) signal(SIGALRM, f); 81 return (deadfl ? -1 : (int)cp); 82 } 83