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
add .Vx so tmac.andoc will call tmac.mdoc-old
[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
4030f78
..
d4c3ce6
100644
(file)
--- a/
usr/src/usr.bin/tip/hunt.c
+++ b/
usr/src/usr.bin/tip/hunt.c
@@
-1,55
+1,67
@@
-/* hunt.c 4.4 81/11/20 */
-#include "tip.h"
+/*
+ * Copyright (c) 1983 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.redist.c%
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)hunt.c 5.6 (Berkeley) %G%";
+#endif /* not lint */
-#
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;
+void
dead()
{
deadfl = 1;
dead()
{
deadfl = 1;
+ longjmp(deadline, 1);
}
hunt(name)
char *name;
{
register char *cp;
}
hunt(name)
char *name;
{
register char *cp;
+ sig_t f;
- deadfl = 0;
- signal(SIGALRM, dead);
- while(cp = getremote(name)){
- if (access(cp, RD))
- continue;
+ f = signal(SIGALRM, dead);
+ while (cp = getremote(name)) {
+ deadfl = 0;
uucplock = rindex(cp, '/')+1;
uucplock = rindex(cp, '/')+1;
- if (mlock(uucplock) < 0) {
- delock(uucplock);
+ if (uu_lock(uucplock) < 0)
continue;
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);
- delock(uucplock);
+ if (FD < 0) {
+ perror(cp);
+ deadfl = 1;
+ }
+ if (!deadfl) {
+ ioctl(FD, TIOCEXCL, 0);
+ ioctl(FD, TIOCHPCL, 0);
+ signal(SIGALRM, SIG_DFL);
+ return ((int)cp);
+ }
+ (void)uu_unlock(uucplock);
}
}
- signal(SIGALRM,
SIG_DFL
);
- return(deadfl ? -1 : (int)cp);
+ signal(SIGALRM,
f
);
+ return
(deadfl ? -1 : (int)cp);
}
}