|
|
1.1 root 1: #include <stddef.h>
2: #include <stdio.h>
3: #include <string.h>
4: #include "jukeface.h"
5: #include "jukebox.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.