1: #include <stdio.h>
   2: #include <a.out.h>
   3: #include <param.h>
   4: #include <proc.h>
   5: #include <sys/stat.h>
   6: struct stat xstat;
   7: struct proc mproc[NPROC];
   8: struct nlist nl[]
   9: {   { "_proc"},
  10:     { ""},
  11: };
  12: int err;
  13: main(argc,argv) char **argv;
  14: {   int i,j;
  15:     if(argc<=1) exit(0);
  16:     for(i=1;i<argc;i++)
  17:     {   if((j=isalock(argv[i]))>0)
  18:             if(isapid(j))
  19:             {   fprintf(stderr,"recovery: %s in use\n",argv[i]);
  20:                 err=1;
  21:             }
  22:             else    unlink(argv[i]);
  23:         else    fprintf(stderr,"reocvery: %s not a lock\n",argv[i]);
  24:     }
  25:     exit(err);
  26: }
  27: isalock(s) char *s;
  28: {   int pid,fd;
  29:     if(stat(s,&xstat)<0) return(0);
  30:     if(xstat.st_size!=2) return(0);
  31:     fd=open(s,0);
  32:     if(fd<0) return(-1);
  33:     read(fd,&pid,2);
  34:     close(fd);
  35:     return(pid);
  36: }
  37: int gotpids,pids[NPROC];
  38: isapid(n)
  39: {   int i;
  40:     if(gotpids==0) getpids();
  41:     for(i=0;i<NPROC;i++)
  42:         if(n==pids[i]) return(1);
  43:     return(0);
  44: }
  45: getpids()
  46: {   int i,mem;
  47:     nlist("/unix",nl);
  48:     if(nl[0].n_type==0)
  49:     {   fprintf(stderr,"no namelist, no lock recovery\n");
  50:         exit(1);
  51:     }
  52:     mem=open("/dev/mem",0);
  53:     lseek(mem,(long)nl[0].n_value,0);
  54:     read(mem,mproc,sizeof(mproc));
  55:     if(mproc[0].p_pid != 0)
  56:     {   fprintf(stderr,"/unix not loaded, no lock recovery\n");
  57:         exit(1);
  58:     }
  59:     for(i=0;i<NPROC;i++)
  60:     {   if(mproc[i].p_stat==0 ||
  61:             mproc[i].p_stat==SZOMB)
  62:             pids[i]=0;
  63:         else    pids[i]=mproc[i].p_pid;
  64:     }
  65:     gotpids=1;
  66: }
  67: unlock(s) char *s;
  68: {
  69:     unlink(s);
  70: }

Defined functions

getpids defined in line 45; used 1 times
  • in line 40
isalock defined in line 27; used 1 times
  • in line 17
isapid defined in line 38; used 1 times
  • in line 18
main defined in line 13; never used
unlock defined in line 67; never used

Defined variables

err defined in line 12; used 2 times
gotpids defined in line 37; used 2 times
mproc defined in line 7; used 6 times
nl defined in line 8; used 3 times
pids defined in line 37; used 3 times
xstat defined in line 6; used 2 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 726
Valid CSS Valid XHTML 1.0 Strict