projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
notice failed opens other than timeout
[unix-history]
/
usr
/
src
/
usr.bin
/
tip
/
hunt.c
diff --git
a/usr/src/usr.bin/tip/hunt.c
b/usr/src/usr.bin/tip/hunt.c
index
c059c20
..
a337177
100644
(file)
--- a/
usr/src/usr.bin/tip/hunt.c
+++ b/
usr/src/usr.bin/tip/hunt.c
@@
-1,55
+1,62
@@
-/* hunt.c 4.3 81/10/02 */
-#include "tip.h"
+#ifndef lint
+static char sccsid[] = "@(#)hunt.c 4.8 (Berkeley) %G%";
+#endif
-#
define RD 04
+#
include "tip.h"
extern char *getremote();
extern char *rindex();
extern char *getremote();
extern char *rindex();
-int deadfl;
+static jmp_buf deadline;
+static int deadfl;
dead()
{
dead()
{
+
deadfl = 1;
deadfl = 1;
+ longjmp(deadline, 1);
}
hunt(name)
}
hunt(name)
-char *name;
+
char *name;
{
register char *cp;
{
register char *cp;
+ int (*f)();
+ f = signal(SIGALRM, dead);
deadfl = 0;
deadfl = 0;
- signal(SIGALRM, dead);
- while(cp = getremote(name)){
- if (access(cp, RD))
- continue;
+ while (cp = getremote(name)) {
uucplock = rindex(cp, '/')+1;
if (mlock(uucplock) < 0) {
delock(uucplock);
continue;
}
/*
uucplock = rindex(cp, '/')+1;
if (mlock(uucplock) < 0) {
delock(uucplock);
continue;
}
/*
- * Straight through call units, such as the BIZCOMP
- * and the DF, must indicate they're hardwired in
+ * Straight through call units, such as the BIZCOMP
,
+ *
VADIC
and the DF, must indicate they're hardwired in
* order to get an open file descriptor placed in FD.
* Otherwise, as for a DN-11, the open will have to
* be done in the "open" routine.
*/
if (!HW)
break;
* order to get an open file descriptor placed in FD.
* Otherwise, as for a DN-11, the open will have to
* be done in the "open" routine.
*/
if (!HW)
break;
- alarm(10);
- if((FD = open(cp, 2)) >= 0){
- alarm(0);
- if(!deadfl) {
- ioctl(FD, TIOCEXCL, 0);
- signal(SIGALRM, SIG_DFL);
- return((int)cp);
- }
+ if (setjmp(deadline) == 0) {
+ alarm(10);
+ FD = open(cp, O_RDWR);
}
alarm(0);
}
alarm(0);
- signal(SIGALRM, dead);
+ if (FD < 0) {
+ perror(cp);
+ deadfl = 1;
+ }
+ if (!deadfl) {
+ ioctl(FD, TIOCEXCL, 0);
+ ioctl(FD, TIOCHPCL, 0);
+ signal(SIGALRM, SIG_DFL);
+ return ((int)cp);
+ }
delock(uucplock);
}
delock(uucplock);
}
- signal(SIGALRM,
SIG_DFL
);
- return(deadfl ? -1 : (int)cp);
+ signal(SIGALRM,
f
);
+ return
(deadfl ? -1 : (int)cp);
}
}