Lines Matching refs:disk

8 mkwidth(Disk *disk)  in mkwidth()  argument
12 snprint(buf, sizeof buf, "%lld", disk->size); in mkwidth()
13 disk->width = strlen(buf); in mkwidth()
14 return disk; in mkwidth()
59 partitiongeometry(Disk *disk) in partitiongeometry() argument
66 if(disk->c == 0 || disk->h == 0 || disk->s == 0) in partitiongeometry()
75 rawname = malloc(strlen(disk->prefix) + 5); /* prefix + "data" + nul */ in partitiongeometry()
79 strcpy(rawname, disk->prefix); in partitiongeometry()
92 if(seek(disk->fd, 0, 0) < 0 in partitiongeometry()
93 || readn(disk->fd, buf, 512) != 512 in partitiongeometry()
122 disk->h = h+1; /* heads count from 0 */ in partitiongeometry()
123 disk->s = s; /* sectors count from 1 */ in partitiongeometry()
124 disk->c = disk->secs / (disk->h*disk->s); in partitiongeometry()
125 disk->chssrc = Gpart; in partitiongeometry()
133 drivergeometry(Disk *disk) in drivergeometry() argument
137 if(disk->c == 0 || disk->h == 0 || disk->s == 0) in drivergeometry()
140 disk->chssrc = Gdisk; in drivergeometry()
141 if(disk->c < 1024) in drivergeometry()
144 switch(disk->h) { in drivergeometry()
146 disk->h = 255; in drivergeometry()
147 disk->c /= 17; in drivergeometry()
151 for(m = 2; m*disk->h < 256; m *= 2) { in drivergeometry()
152 if(disk->c/m < 1024) { in drivergeometry()
153 disk->c /= m; in drivergeometry()
154 disk->h *= m; in drivergeometry()
160 disk->h = 255; in drivergeometry()
161 disk->s = 63; in drivergeometry()
162 disk->c = disk->secs / (disk->h * disk->s); in drivergeometry()
181 guessgeometry(Disk *disk) in guessgeometry() argument
186 disk->chssrc = Gguess; in guessgeometry()
189 if(c*guess[i].h*guess[i].s >= disk->secs) { in guessgeometry()
190 disk->h = guess[i].h; in guessgeometry()
191 disk->s = guess[i].s; in guessgeometry()
192 disk->c = disk->secs / (disk->h * disk->s); in guessgeometry()
197 disk->h = 255; in guessgeometry()
198 disk->s = 63; in guessgeometry()
199 disk->c = disk->secs / (disk->h * disk->s); in guessgeometry()
204 findgeometry(Disk *disk) in findgeometry() argument
206 if(partitiongeometry(disk) < 0 in findgeometry()
207 && drivergeometry(disk) < 0 in findgeometry()
208 && guessgeometry(disk) < 0) { /* can't happen */ in findgeometry()
215 openfile(Disk *disk) in openfile() argument
219 if((d = dirfstat(disk->fd)) == nil){ in openfile()
220 free(disk); in openfile()
224 disk->secsize = 512; in openfile()
225 disk->size = d->length; in openfile()
226 disk->secs = disk->size / disk->secsize; in openfile()
227 disk->offset = 0; in openfile()
230 findgeometry(disk); in openfile()
231 return mkwidth(disk); in openfile()
235 opensd(Disk *disk) in opensd() argument
241 Binit(&b, disk->ctlfd, OREAD); in opensd()
246 disk->secsize = strtoll(f[2], 0, 0); in opensd()
248 disk->c = strtol(f[3], 0, 0); in opensd()
249 disk->h = strtol(f[4], 0, 0); in opensd()
250 disk->s = strtol(f[5], 0, 0); in opensd()
253 if(nf >= 4 && strcmp(f[0], "part") == 0 && strcmp(f[1], disk->part) == 0) { in opensd()
254 disk->offset = strtoll(f[2], 0, 0); in opensd()
255 disk->secs = strtoll(f[3], 0, 0) - disk->offset; in opensd()
260 disk->size = disk->secs * disk->secsize; in opensd()
261 if(disk->size <= 0) { in opensd()
262 strcpy(disk->part, ""); in opensd()
263 disk->type = Tfile; in opensd()
264 return openfile(disk); in opensd()
267 findgeometry(disk); in opensd()
268 return mkwidth(disk); in opensd()
272 opendisk(char *disk, int rdonly, int noctl) in opendisk() argument
284 d->fd = open(disk, OREAD); in opendisk()
292 d->wfd = open(disk, OWRITE); in opendisk()
300 p = malloc(strlen(disk) + 4); /* 4: slop for "ctl\0" */ in opendisk()
307 strcpy(p, disk); in opendisk()
334 d->part = strdup(disk+(q-p)); in opendisk()