static buf_s *victim (void) { buf_s *buf; unint wrap = 0; for (;;) { ++Clock; if (Clock == &Buf[Num_bufs]) { Clock = Buf; if (++wrap > 2) { bdump(); eprintf("All buffers in use"); return NULL; } } buf = Clock; if (buf->b_use < 0) { bflush(buf); buf->b_use = 1; unhash(buf); return buf; } if (buf->b_use == 0) { buf->b_use = -1; } } }
static buf_s *victim (void) { buf_s *buf; unint wrap = 0; for (;;) { ++Clock; if (Clock == &Buf[Num_bufs]) { Clock = Buf; if (++wrap > 2) { bdump(); fatal("All buffers in use"); return NULL; } } buf = Clock; if (buf->b_use < 0) { if (buf->b_ant.a_state == ANT_FLUSHING) continue; bflush(buf); aver(buf->b_ant.a_state != ANT_FLUSHING); aver(buf->b_ant.a_state != ANT_DIRTY); buf->b_use = 1; rmv(buf); return buf; } if (buf->b_use == 0) { buf->b_use = -1; } } }
int main(int argc, char **argv) { char *p; progname = argv[0]; (void) argc; if ((p = argv[1])) { int pagf; int datf; char *name; int n; name = (char *) malloc((n = strlen(p)) + sizeof(DBM_PAGFEXT)); if (!name) oops("cannot get memory"); strcpy(name, p); strcpy(name + n, DBM_PAGFEXT); if ((pagf = open(name, O_RDONLY)) < 0) oops("cannot open %s.", name); sdump(pagf); free(name); name = (char *) malloc(n + sizeof(DBM_DATFEXT)); if (!name) oops("cannot get memory"); strcpy(name, p); strcpy(name + n, DBM_DATFEXT); if ((datf = open(name, O_RDONLY)) >= 0) bdump(datf); free(name); } else oops("usage: %s dbname", progname); return 0; }
int relay_tee(PCStr(arg),int src,int dst1,int dst2,int *rccp,int *wccp1,int *wccp2) { int rcc,wcc,wc1; /* CStr(buf,0x4000); */ CStr(buf,0x10000); int isize = 0x4000; *wccp1 = 0; if( wccp2 ) *wccp2 = 0; /* rcc = read(src,buf,sizeof(buf)); */ rcc = read(src,buf,QVSSize(buf,isize)); if( rcc <= 0 && 0 <= top_fd(src,0) ){ int pop_fd(int fd,int rw); if( pop_fd(src,0) ){ syslog_ERROR("relay_tee(%d) -> pop_fd()\n",src); errno = EAGAIN; *rccp = 0; return -1; } } *rccp = rcc; if( rcc <= 0 ) { lastpackLeng = rcc; bzero(lastpack,sizeof(lastpack)); return rcc; } lastpackLeng = rcc; bcopy(buf,lastpack,8<rcc?8:rcc); if( dump_tcprelay ) bdump(src,dst1,buf,rcc); /* wcc = 0; while( wcc < rcc ){ wc1 = write(dst1,buf,rcc); if( wc1 <= 0 ) break; wcc += wc1; } */ wcc = writes(isize,src,dst1,buf,rcc,&wc1); *wccp1 = wcc; if( dst2 < 0 || wc1 <= 0 ) return wc1; /* wcc = 0; while( wcc < rcc ){ wc1 = write(dst2,buf,rcc); if( wc1 <= 0 ) break; wcc += wc1; } */ wcc = writes(isize,src,dst2,buf,rcc,&wc1); *wccp2 = wcc; return wc1; }
int dumpp (int argc, char *argv[]) { //baudit("cmd line"); bdump(); return 0; }