pdp11v/usr/src/cmd/uucp/us_rrs.c
/* @(#)us_rrs.c 1.6 */
#include "uucp.h"
#ifdef UUSTAT
#include <sys/types.h>
#include "uust.h"
/*
* We get the job number from a command file "cfile".
* using the jobn as the key to search thru "R_stat"
* file and modify the corresponding status as indicated
* in "stat". "Stat" is defined in "uust.h".
* return:
* 0 -> success
* FAIL -> failure
*/
long ftell();
us_rrs(cfilel,stat)
char *cfilel;
short stat;
{
FILE *fp;
register short i;
struct us_rsf u;
char cfile[20], *strrchr(), *lxp, *name, buf[BUFSIZ];
char *strcpy();
long pos;
long time();
short n;
int mask;
/*
* strip path info
*/
strcpy(cfile, (lxp=strrchr(cfilel, '/'))?lxp+1:cfilel);
DEBUG(9, "\nenter us_rrs, cfile: %s", cfile);
DEBUG(9, " request status: %o\n", stat);
/*
* extract the last 4 digits
* convert to digits
*/
name = cfile + strlen(cfile) - 4;
n = atoi(name);
mask = umask(0);
for(i=0; i<=15; i++) {
if (ulockf(LCKRSTAT, 15) != FAIL)
break;
sleep(1);
}
if (i > 15) {
DEBUG(3, "ulockf of %s failed\n", LCKRSTAT);
umask(mask);
return(FAIL);
}
if ((fp = fopen(R_stat, "r+")) == NULL) {
DEBUG(3, "fopen of %s failed\n", R_stat);
rmlock(LCKRSTAT);
umask(mask);
return(FAIL);
}
umask(mask);
while(fread(&u, sizeof(u), 1, fp) != NULL){
if (u.jobn == n) {
DEBUG(6, " jobn : %d\n", u.jobn);
pos = ftell(fp);
u.ustat = stat;
fseek(fp, pos-(long)sizeof(u), 0);
fwrite(&u, sizeof(u), 1, fp);
break;
}
}
fflush(fp);
fclose(fp);
rmlock(LCKRSTAT);
return(FAIL);
}
#endif