52 |
|
short writable; /* 0 read-only, <0 write error encountered */ |
53 |
|
int nfrags; /* number of known fragments */ |
54 |
|
BEAMI *fi; /* fragments, descending file position */ |
55 |
< |
long flen; /* last known file length */ |
55 |
> |
off_t flen; /* last known file length */ |
56 |
|
} *hdfragl; /* fragment lists, indexed by file descriptor */ |
57 |
|
|
58 |
|
static int nhdfragls; /* size of hdfragl array */ |
154 |
|
int fd; /* corresponding file descriptor */ |
155 |
|
HDGRID *hproto; /* holodeck section grid */ |
156 |
|
{ |
157 |
< |
long rtrunc; |
158 |
< |
long fpos; |
157 |
> |
off_t rtrunc; |
158 |
> |
off_t fpos; |
159 |
|
int writable; |
160 |
|
register HOLO *hp; |
161 |
|
register int n; |
186 |
|
if (fd < nhdfragls && hdfragl[fd].nlinks) |
187 |
|
writable = hdfragl[fd].writable; |
188 |
|
else |
189 |
< |
writable = lseek(fd, (off_t)fpos, 0) == fpos && |
189 |
> |
writable = lseek(fd, fpos, 0) == fpos && |
190 |
|
write(fd, (char *)hp, sizeof(HDGRID)) == |
191 |
|
sizeof(HDGRID); |
192 |
|
} else { /* else assume we're creating it */ |
242 |
|
register int j; |
243 |
|
|
244 |
|
if (!hp->dirty++) { /* write smudge first time */ |
245 |
< |
if (lseek(hp->fd, (off_t)(biglob(hp)->fo+(i-1)*sizeof(BEAMI)), 0) < 0 |
245 |
> |
if (lseek(hp->fd, biglob(hp)->fo+(i-1)*sizeof(BEAMI), 0) < 0 |
246 |
|
|| write(hp->fd, (char *)&smudge, |
247 |
|
sizeof(BEAMI)) != sizeof(BEAMI)) |
248 |
|
error(SYSTEM, "seek/write error in hdmarkdirty"); |
305 |
|
return(0); |
306 |
|
errno = 0; /* write dirty segments */ |
307 |
|
for (j = 0; j < hp->dirty; j++) { |
308 |
< |
if (lseek(hp->fd, (off_t)(biglob(hp)->fo + |
309 |
< |
(hp->dirseg[j].s-1)*sizeof(BEAMI)), 0) < 0) |
308 |
> |
if (lseek(hp->fd, biglob(hp)->fo + |
309 |
> |
(hp->dirseg[j].s-1)*sizeof(BEAMI), 0) < 0) |
310 |
|
error(SYSTEM, "cannot seek on holodeck file"); |
311 |
|
n = hp->dirseg[j].n * sizeof(BEAMI); |
312 |
|
if (write(hp->fd, (char *)(hp->bi+hp->dirseg[j].s), n) != n) |
346 |
|
} |
347 |
|
|
348 |
|
|
349 |
< |
long |
349 |
> |
off_t |
350 |
|
hdfilen(fd) /* return file length for fd */ |
351 |
|
int fd; |
352 |
|
{ |
353 |
< |
long fpos, flen; |
353 |
> |
off_t fpos, flen; |
354 |
|
|
355 |
|
if (fd < 0) |
356 |
|
return(-1); |
358 |
|
if ((fpos = lseek(fd, (off_t)0L, 1)) < 0) |
359 |
|
return(-1); |
360 |
|
flen = lseek(fd, (off_t)0L, 2); |
361 |
< |
lseek(fd, (off_t)fpos, 0); |
361 |
> |
lseek(fd, fpos, 0); |
362 |
|
return(flen); |
363 |
|
} |
364 |
|
return(hdfragl[fd].flen); |
365 |
|
} |
366 |
|
|
367 |
|
|
368 |
< |
long |
368 |
> |
off_t |
369 |
|
hdfiluse(fd, all) /* compute file usage (in bytes) */ |
370 |
|
int fd; /* open file descriptor to check */ |
371 |
|
int all; /* include overhead and unflushed data */ |
372 |
|
{ |
373 |
< |
long total = 0; |
373 |
> |
off_t total = 0; |
374 |
|
register int i, j; |
375 |
|
|
376 |
|
for (j = 0; hdlist[j] != NULL; j++) { |
413 |
|
blglob(hp)->nrm += n; |
414 |
|
if ((n = hp->bl[i]->nrm = hp->bi[i].nrd)) { |
415 |
|
errno = 0; |
416 |
< |
if (lseek(hp->fd, (off_t)hp->bi[i].fo, 0) < 0) |
416 |
> |
if (lseek(hp->fd, hp->bi[i].fo, 0) < 0) |
417 |
|
error(SYSTEM, "seek error on holodeck file"); |
418 |
|
n *= sizeof(RAYVAL); |
419 |
|
if (read(hp->fd, (char *)hdbray(hp->bl[i]), n) != n) |
452 |
|
hp->bl[i] = (BEAM *)hdrealloc(NULL, hdbsiz(n), "hdgetbeam"); |
453 |
|
blglob(hp)->nrm += hp->bl[i]->nrm = n; |
454 |
|
errno = 0; |
455 |
< |
if (lseek(hp->fd, (off_t)hp->bi[i].fo, 0) < 0) |
455 |
> |
if (lseek(hp->fd, hp->bi[i].fo, 0) < 0) |
456 |
|
error(SYSTEM, "seek error on holodeck file"); |
457 |
|
n *= sizeof(RAYVAL); |
458 |
|
if (read(hp->fd, (char *)hdbray(hp->bl[i]), n) != n) |
632 |
|
} |
633 |
|
|
634 |
|
|
635 |
< |
long |
635 |
> |
off_t |
636 |
|
hdallocfrag(fd, nrays) /* allocate a file fragment */ |
637 |
|
int fd; |
638 |
|
unsigned int4 nrays; |
639 |
|
{ |
640 |
|
register struct fraglist *f; |
641 |
|
register int j; |
642 |
< |
long nfo; |
642 |
> |
off_t nfo; |
643 |
|
|
644 |
|
if (nrays == 0) |
645 |
|
return(-1L); |
669 |
|
int fragfreed; |
670 |
|
unsigned int4 nrays; |
671 |
|
unsigned int n; |
672 |
< |
long nfo; |
672 |
> |
off_t nfo; |
673 |
|
/* check file status */ |
674 |
|
if (hdfragl[hp->fd].writable <= 0) |
675 |
|
return(hdfragl[hp->fd].writable); |
683 |
|
if (nrays) { /* get and write new fragment */ |
684 |
|
nfo = hdallocfrag(hp->fd, nrays); |
685 |
|
errno = 0; |
686 |
< |
if (lseek(hp->fd, (off_t)nfo, 0) < 0) |
686 |
> |
if (lseek(hp->fd, nfo, 0) < 0) |
687 |
|
error(SYSTEM, "cannot seek on holodeck file"); |
688 |
|
n = hp->bl[i]->nrm * sizeof(RAYVAL); |
689 |
|
if (write(hp->fd, (char *)hdbray(hp->bl[i]), n) != n) { |