|
|
1.1 ! root 1: #include <stddef.h> ! 2: #include <stdio.h> ! 3: #include <string.h> ! 4: #include "scsi.h" ! 5: #include "juke.h" ! 6: ! 7: char *j_shelf[NSHELF]; ! 8: int j_wrshelf = 0; ! 9: ! 10: j_rdshelves(char *err) ! 11: { ! 12: FILE *fp; ! 13: static haveread = 0; ! 14: int shno; ! 15: char vname[256]; ! 16: ! 17: if(haveread) ! 18: return(0); ! 19: for(shno = 0; shno < NSHELF; shno++) ! 20: j_shelf[shno] = 0; ! 21: if((fp = fopen(JUKEDIR, "r")) == NULL){ ! 22: pperror(err, JUKEDIR); ! 23: return(-1); ! 24: } ! 25: while(fscanf(fp, "%d %s\n", &shno, vname) == 2){ ! 26: if((shno < 0) || (shno >= NSHELF)){ ! 27: fprintf(stderr, "Warning: bad shelf number in %s: %d (vol_id=%s)\n", ! 28: JUKEDIR, shno, vname); ! 29: continue; ! 30: ! 31: } ! 32: j_shelf[shno] = strdup(vname); ! 33: } ! 34: fclose(fp); ! 35: haveread = 1; ! 36: return(0); ! 37: } ! 38: ! 39: j_wrshelves(char *err) ! 40: { ! 41: FILE *fp; ! 42: int shno; ! 43: ! 44: if((fp = fopen(JUKEDIR, "w")) == NULL){ ! 45: pperror(err, JUKEDIR); ! 46: return(-1); ! 47: } ! 48: for(shno = 0; shno < NSHELF; shno++) ! 49: if(j_shelf[shno]) ! 50: fprintf(fp, "%d %s\n", shno, j_shelf[shno]); ! 51: fclose(fp); ! 52: return(0); ! 53: } ! 54: ! 55: int ! 56: j_shelfof(char *vol_id) ! 57: { ! 58: int i; ! 59: char buf[512]; ! 60: ! 61: for(;;){ ! 62: for(i = 0; i < NSHELF; i++) ! 63: if(j_shelf[i] && (strcmp(j_shelf[i], vol_id) == 0)) ! 64: return(i); ! 65: if((i = warm_inv(buf)) <= 0) ! 66: break; ! 67: } ! 68: if(i < 0) ! 69: fprintf(stderr, "jukebox: %s\n", buf); ! 70: return(-1); ! 71: } ! 72: ! 73: int ! 74: j_driveof(char *vol_id) ! 75: { ! 76: int i, sh; ! 77: ! 78: if((sh = j_shelfof(vol_id)) < 0) ! 79: return(-1); ! 80: for(i = 0; i < NLUN; i++) ! 81: if(j_status.lun[i].shelfvalid && (j_status.lun[i].retshelf == sh)) ! 82: return(i); ! 83: return(-1); ! 84: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.