pdp11v/usr/src/cmd/uucp/rkill.c
#
#include "uucp.h"
#include <time.h>
#include <sys/types.h>
#include <signal.h>
#include "uust.h"
struct us_rsf uu;
FILE *pdf;
delete(no)
{
char f[20];
char *name;
register int n;
int v;
v = USR_QUEUED;
fseek(pdf, 0L, 0);
while (gnamef(pdf, f)) {
if(strlen(f) <= 4)
continue;
if(f[1] != '.')
continue;
name = f + strlen(f) - 4;
n = atoi(name);
if (n == no) {
DEBUG(5, "KILL %s\n",f);
if (f[0] == CMDPRE){
v = USR_KCOMP;
}
if(v == USR_QUEUED)
v = USR_KINC;
if(unlink(f) == -1){
fprintf(stderr,"Can't unlink %s\n",f);
}
}
}
return(v);
}
int sigz;
int getit();
kill(jn)
{
FILE *fp, *fq;
register int n;
int fnd;
char *name, file[100];
int ret, val;
char b[BUFSIZ];
char s[200];
register i;
int sqit, shup, sint;
sigz = 0;
fnd = 0;
sigz= 1;
{
register int i;
for(i=0; i<=15; i++) {
if (ulockf(LCKRSTAT, 15) != FAIL) break;
sleep(1);
}
if (i > 15) {
fprintf(stderr, "cannot lock %s\n", LCKRSTAT);
fclose(fq);
unlink(s);
return(FAIL);
}
}
shup = (int)signal(SIGHUP, getit);
sint = (int)signal(SIGINT, getit);
sqit = (int)signal(SIGQUIT, getit);
if ((fp=fopen(R_stat, "r")) == NULL) {
fprintf(stderr, "cannot open %s\n", R_stat);
rmlock(LCKRSTAT);
fclose(fq);
unlink(s);
sigz = 0;
signal(SIGHUP, shup);
signal(SIGINT, sint);
signal(SIGQUIT, sqit);
return(FAIL);
}
/*
* delete the command file from spool dir.
* spool directory
*/
if ((pdf=fopen(Spool,"r"))==NULL) {
perror(Spool);
rmlock(LCKRSTAT);
fclose(fp);
fclose(fq);
unlink(s);
sigz = 0;
signal(SIGHUP, shup);
signal(SIGINT, sint);
signal(SIGQUIT, sqit);
return(FAIL);
}
while(fread(&uu, sizeof(uu), 1 , fp) != NULL) {
if ((uu.jobn==jn) && ((strcmp(uu.user,User)==SAME)
|| (getuid()==0))) {
if((uu.ustat&(USR_KINC|USR_KCOMP)) == 0){
DEBUG(5, "Job %d is deleted\n", jn);
if((uu.ustat&USR_COMP) == 0){
val = delete(jn);
if(val == USR_QUEUED){
val = USR_KINC;
fprintf(stderr,"Job %hd not found\n",uu.jobn);
}
fnd++;
uu.ustat = val;
fseek(fq,(long)(-sizeof(uu)), 1);
}else{
fprintf(stderr,"job %hd already complete\n",uu.jobn);
}
}
}
fwrite(&uu, sizeof(uu), 1, fq);
}
if(fnd == 0){
val = delete(jn);
if(val == USR_QUEUED)
fprintf(stderr,"Job %hd not found\n",jn);
}
fclose(pdf);
fclose(fq);
rmlock(LCKRSTAT);
sigz = 0;
signal(SIGHUP, shup);
signal(SIGINT, sint);
signal(SIGQUIT, sqit);
return(0);
}
getit()
{
rmlock(CNULL);
}