Lines Matching refs:filep
77 static ino_t find(fileid_t *filep, char *path);
78 static ino_t dlook(fileid_t *filep, char *path);
79 static daddr32_t sbmap(fileid_t *filep, daddr32_t bn);
97 openi(fileid_t *filep, ino_t inode) in openi() argument
100 devid_t *devp = filep->fi_devp; in openi()
102 filep->fi_inode = get_cache((int)inode); in openi()
103 if (filep->fi_inode != 0) in openi()
106 filep->fi_offset = 0; in openi()
107 filep->fi_blocknum = fsbtodb(&devp->un_fs.di_fs, in openi()
111 filep->fi_count = devp->un_fs.di_fs.fs_bsize; in openi()
112 filep->fi_memp = 0; /* cached read */ in openi()
113 if (diskread(filep) != 0) { in openi()
117 dp = (struct dinode *)filep->fi_memp; in openi()
118 filep->fi_inode = (struct inode *) in openi()
120 bzero((char *)filep->fi_inode, sizeof (struct inode)); in openi()
121 filep->fi_inode->i_ic = in openi()
123 filep->fi_inode->i_number = inode; in openi()
124 set_cache((int)inode, (void *)filep->fi_inode, sizeof (struct inode)); in openi()
131 fileid_t *filep = head; in find_fp() local
134 while ((filep = filep->fi_forw) != head) in find_fp()
135 if (fd == filep->fi_filedes) in find_fp()
136 return (filep->fi_taken ? filep : 0); in find_fp()
143 find(fileid_t *filep, char *path) in find() argument
162 devp = filep->fi_devp; in find()
166 if (r && openi(filep, (ino_t)UFSROOTINO)) in find()
179 if ((inode = dlook(filep, lpathp)) != 0) { in find()
180 if (openi(filep, inode)) in find()
182 if ((filep->fi_inode->i_smode & IFMT) == IFLNK) { in find()
183 filep->fi_blocknum = in find()
185 filep->fi_inode->i_db[0]); in find()
186 filep->fi_count = DEV_BSIZE; in find()
187 filep->fi_memp = 0; in find()
188 if (diskread(filep) != 0) in find()
190 len = strlen(filep->fi_memp); in find()
191 if (filep->fi_memp[0] == '/') in find()
199 bcopy(filep->fi_memp, lpathp, len); in find()
216 sbmap(fileid_t *filep, daddr32_t bn) in sbmap() argument
224 devp = filep->fi_devp; in sbmap()
225 inodep = filep->fi_inode; in sbmap()
264 filep->fi_blocknum = fsbtodb(&devp->un_fs.di_fs, nb); in sbmap()
265 filep->fi_count = devp->un_fs.di_fs.fs_bsize; in sbmap()
266 filep->fi_memp = 0; in sbmap()
267 if (diskread(filep) != 0) in sbmap()
269 bap = (daddr32_t *)filep->fi_memp; in sbmap()
281 dlook(fileid_t *filep, char *path) in dlook() argument
288 ip = filep->fi_inode; in dlook()
302 dirp.fi = filep; in dlook()
323 fileid_t *filep; in readdir() local
328 filep = dstuff->fi; in readdir()
329 devp = filep->fi_devp; in readdir()
331 if (dstuff->loc >= filep->fi_inode->i_size) { in readdir()
338 d = sbmap(filep, lbn); in readdir()
343 filep->fi_blocknum = fsbtodb(&devp->un_fs.di_fs, d); in readdir()
344 filep->fi_count = in readdir()
345 blksize(&devp->un_fs.di_fs, filep->fi_inode, lbn); in readdir()
346 filep->fi_memp = 0; in readdir()
347 if (diskread(filep) != 0) { in readdir()
351 dp = (struct direct *)(filep->fi_memp + off); in readdir()
365 getblock(fileid_t *filep, caddr_t buf, int count, int *rcount) in getblock() argument
375 devp = filep->fi_devp; in getblock()
376 p = filep->fi_memp; in getblock()
377 if ((signed)filep->fi_count <= 0) { in getblock()
380 diff = filep->fi_inode->i_size - filep->fi_offset; in getblock()
388 lbn = lblkno(fs, filep->fi_offset); in getblock()
391 filep->fi_blocknum = fsbtodb(fs, sbmap(filep, lbn)); in getblock()
393 off = blkoff(fs, filep->fi_offset); in getblock()
396 size = blksize(fs, filep->fi_inode, lbn); in getblock()
397 filep->fi_count = size; in getblock()
398 filep->fi_memp = filep->fi_buf; in getblock()
406 filep->fi_memp = buf; in getblock()
407 if (diskread(filep)) { in getblock()
411 filep->fi_count = 0; in getblock()
413 } else if (diskread(filep)) in getblock()
416 if (filep->fi_offset - off + size >= filep->fi_inode->i_size) in getblock()
417 filep->fi_count = diff + off; in getblock()
418 filep->fi_count -= off; in getblock()
419 p = &filep->fi_memp[off]; in getblock()
421 filep->fi_memp = p; in getblock()
430 getblock_noopt(fileid_t *filep) in getblock_noopt() argument
440 devp = filep->fi_devp; in getblock_noopt()
441 p = filep->fi_memp; in getblock_noopt()
442 if ((signed)filep->fi_count <= 0) { in getblock_noopt()
445 diff = filep->fi_inode->i_size - filep->fi_offset; in getblock_noopt()
453 lbn = lblkno(fs, filep->fi_offset); in getblock_noopt()
456 filep->fi_blocknum = fsbtodb(fs, sbmap(filep, lbn)); in getblock_noopt()
458 off = blkoff(fs, filep->fi_offset); in getblock_noopt()
461 size = blksize(fs, filep->fi_inode, lbn); in getblock_noopt()
462 filep->fi_count = size; in getblock_noopt()
464 filep->fi_memp = NULL; in getblock_noopt()
466 if (diskread(filep)) in getblock_noopt()
469 if (filep->fi_offset - off + size >= filep->fi_inode->i_size) in getblock_noopt()
470 filep->fi_count = diff + off; in getblock_noopt()
471 filep->fi_count -= off; in getblock_noopt()
472 p = &filep->fi_memp[off]; in getblock_noopt()
474 filep->fi_memp = p; in getblock_noopt()
494 fileid_t *filep; in bufs_read() local
496 if (!(filep = find_fp(fd))) { in bufs_read()
500 if ((filep->fi_flags & FI_COMPRESSED) == 0 && in bufs_read()
501 filep->fi_offset + count > filep->fi_inode->i_size) in bufs_read()
502 count = filep->fi_inode->i_size - filep->fi_offset; in bufs_read()
510 if (filep->fi_flags & FI_COMPRESSED) { in bufs_read()
511 if ((j = cf_read(filep, buf, count)) < 0) in bufs_read()
517 if ((j = filep->fi_count) == 0) { in bufs_read()
518 (void) getblock(filep, buf, i, &rcount); in bufs_read()
521 filep->fi_offset += rcount; in bufs_read()
526 bcopy(filep->fi_memp, buf, (unsigned)j); in bufs_read()
530 filep->fi_memp += j; in bufs_read()
531 filep->fi_offset += j; in bufs_read()
532 filep->fi_count -= j; in bufs_read()
613 fileid_t *filep; in bufs_open() local
620 filep = (fileid_t *)bkmem_alloc(sizeof (fileid_t)); in bufs_open()
621 filep->fi_back = head->fi_back; in bufs_open()
622 filep->fi_forw = head; in bufs_open()
623 head->fi_back->fi_forw = filep; in bufs_open()
624 head->fi_back = filep; in bufs_open()
625 filep->fi_filedes = filedes++; in bufs_open()
626 filep->fi_taken = 1; in bufs_open()
627 filep->fi_path = (char *)bkmem_alloc(strlen(filename) + 1); in bufs_open()
628 (void) strcpy(filep->fi_path, filename); in bufs_open()
629 filep->fi_devp = ufs_devp; /* dev is already "mounted" */ in bufs_open()
630 filep->fi_inode = NULL; in bufs_open()
631 bzero(filep->fi_buf, MAXBSIZE); in bufs_open()
632 filep->fi_getblock = getblock_noopt; in bufs_open()
633 filep->fi_flags = 0; in bufs_open()
635 inode = find(filep, (char *)filename); in bufs_open()
638 (void) bufs_close(filep->fi_filedes); in bufs_open()
641 if (openi(filep, inode)) { in bufs_open()
643 (void) bufs_close(filep->fi_filedes); in bufs_open()
647 filep->fi_offset = filep->fi_count = 0; in bufs_open()
649 if (cf_check_compressed(filep) != 0) in bufs_open()
651 return (filep->fi_filedes); in bufs_open()
662 fileid_t *filep; in bufs_lseek() local
665 if (!(filep = find_fp(fd))) in bufs_lseek()
668 if (filep->fi_flags & FI_COMPRESSED) { in bufs_lseek()
669 cf_seek(filep, addr, whence); in bufs_lseek()
673 filep->fi_offset += addr; in bufs_lseek()
676 filep->fi_offset = addr; in bufs_lseek()
683 filep->fi_blocknum = addr / DEV_BSIZE; in bufs_lseek()
686 filep->fi_count = 0; in bufs_lseek()
695 fileid_t *filep; in bufs_fstat() local
698 if (!(filep = find_fp(fd))) in bufs_fstat()
701 ip = filep->fi_inode; in bufs_fstat()
739 fileid_t *filep; in bufs_close() local
742 if (!(filep = find_fp(fd))) in bufs_close()
745 if (filep->fi_taken && (filep != head)) { in bufs_close()
747 bkmem_free(filep->fi_path, strlen(filep->fi_path)+1); in bufs_close()
748 filep->fi_blocknum = filep->fi_count = filep->fi_offset = 0; in bufs_close()
749 filep->fi_memp = (caddr_t)0; in bufs_close()
750 filep->fi_devp = 0; in bufs_close()
751 filep->fi_taken = 0; in bufs_close()
754 filep->fi_forw->fi_back = filep->fi_back; in bufs_close()
755 filep->fi_back->fi_forw = filep->fi_forw; in bufs_close()
756 cf_close(filep); in bufs_close()
757 bkmem_free((char *)filep, sizeof (fileid_t)); in bufs_close()
771 fileid_t *filep = head; in bufs_closeall() local
773 while ((filep = filep->fi_forw) != head) in bufs_closeall()
774 if (filep->fi_taken) in bufs_closeall()
775 if (bufs_close(filep->fi_filedes)) in bufs_closeall()