This is hunt.c in view mode; [Download] [Up]
/*
* Copyright (c) 1983 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that: (1) source distributions retain this entire copyright
* notice and comment, and (2) distributions including binaries display
* the following acknowledgement: ``This product includes software
* developed by the University of California, Berkeley and its contributors''
* in the documentation or other materials provided with the distribution
* and in all advertising materials mentioning features or use of this
* software. Neither the name of the University nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#include <sys/file.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include "tip.h"
extern char *getremote();
extern char *rindex();
int uu_lock();
unsigned int alarm();
int uu_unlock();
int ioctl();
int open(const char *path, int flags, ...);
static jmp_buf deadline;
static int deadfl;
#ifdef TIPX
char opened_tty[128];
#endif
void
dead()
{
deadfl = 1;
longjmp(deadline, 1);
}
int hunt(name)
char *name;
{
register char *cp;
void (*f)();
f = signal(SIGALRM, dead);
while (cp = getremote(name)) {
deadfl = 0;
uucplock = rindex(cp, '/')+1;
if (uu_lock(uucplock) < 0)
continue;
/*
* 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;
#ifdef TIPX
strcpy(opened_tty,cp);
#endif
if (setjmp(deadline) == 0) {
alarm(10);
FD = open(cp, O_RDWR);
}
alarm(0);
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, f);
return (deadfl ? -1 : (int)cp);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.