Lines Matching refs:ds

644 	struct udf_dirstream *ds;  in udf_opendir()  local
646 ds = uma_zalloc(udf_zone_ds, M_WAITOK | M_ZERO); in udf_opendir()
648 ds->node = node; in udf_opendir()
649 ds->offset = offset; in udf_opendir()
650 ds->udfmp = udfmp; in udf_opendir()
651 ds->fsize = fsize; in udf_opendir()
653 return (ds); in udf_opendir()
657 udf_getfid(struct udf_dirstream *ds) in udf_getfid() argument
663 if (ds->offset + ds->off >= ds->fsize) { in udf_getfid()
664 ds->error = 0; in udf_getfid()
669 if (ds->off == 0) { in udf_getfid()
670 ds->size = 0; in udf_getfid()
671 error = udf_readatoffset(ds->node, &ds->size, ds->offset, in udf_getfid()
672 &ds->bp, &ds->data); in udf_getfid()
674 ds->error = error; in udf_getfid()
675 if (ds->bp != NULL) in udf_getfid()
676 brelse(ds->bp); in udf_getfid()
685 if (ds->fid_fragment && ds->buf != NULL) { in udf_getfid()
686 ds->fid_fragment = 0; in udf_getfid()
687 free(ds->buf, M_UDFFID); in udf_getfid()
690 fid = (struct fileid_desc*)&ds->data[ds->off]; in udf_getfid()
697 if (ds->off + UDF_FID_SIZE > ds->size || in udf_getfid()
698 ds->off + le16toh(fid->l_iu) + fid->l_fi + UDF_FID_SIZE > ds->size){ in udf_getfid()
700 frag_size = ds->size - ds->off; in udf_getfid()
701 if (frag_size >= ds->udfmp->bsize) { in udf_getfid()
703 ds->error = EINVAL; in udf_getfid()
711 ds->buf = malloc(ds->udfmp->bsize, M_UDFFID, in udf_getfid()
713 bcopy(fid, ds->buf, frag_size); in udf_getfid()
716 fid = (struct fileid_desc*)ds->buf; in udf_getfid()
718 if (ds->bp != NULL) in udf_getfid()
719 brelse(ds->bp); in udf_getfid()
722 ds->offset += ds->size; in udf_getfid()
723 ds->size = 0; in udf_getfid()
724 error = udf_readatoffset(ds->node, &ds->size, ds->offset, in udf_getfid()
725 &ds->bp, &ds->data); in udf_getfid()
727 ds->error = error; in udf_getfid()
736 bcopy(ds->data, &ds->buf[frag_size], in udf_getfid()
745 if (total_fid_size > ds->udfmp->bsize) { in udf_getfid()
747 ds->error = EIO; in udf_getfid()
750 bcopy(ds->data, &ds->buf[frag_size], in udf_getfid()
753 ds->fid_fragment = 1; in udf_getfid()
762 ds->this_off = ds->offset + ds->off; in udf_getfid()
763 if (!ds->fid_fragment) { in udf_getfid()
764 ds->off += (total_fid_size + 3) & ~0x03; in udf_getfid()
766 ds->off = (total_fid_size - frag_size + 3) & ~0x03; in udf_getfid()
773 udf_closedir(struct udf_dirstream *ds) in udf_closedir() argument
776 if (ds->bp != NULL) in udf_closedir()
777 brelse(ds->bp); in udf_closedir()
779 if (ds->fid_fragment && ds->buf != NULL) in udf_closedir()
780 free(ds->buf, M_UDFFID); in udf_closedir()
782 uma_zfree(udf_zone_ds, ds); in udf_closedir()
795 struct udf_dirstream *ds; in udf_readdir() local
831 ds = udf_opendir(node, uio->uio_offset, len, node->udfmp); in udf_readdir()
833 while ((fid = udf_getfid(ds)) != NULL) { in udf_readdir()
880 dir.d_off = ds->this_off; in udf_readdir()
884 ds->this_off); in udf_readdir()
888 uio->uio_offset = ds->offset + ds->off; in udf_readdir()
897 error = ds->error; in udf_readdir()
899 udf_closedir(ds); in udf_readdir()
1137 struct udf_dirstream *ds; in udf_lookup() local
1177 ds = udf_opendir(node, offset, fsize, udfmp); in udf_lookup()
1179 while ((fid = udf_getfid(ds)) != NULL) { in udf_lookup()
1206 error = ds->error; in udf_lookup()
1210 udf_closedir(ds); in udf_lookup()
1221 node->diroff = ds->offset + ds->off; in udf_lookup()
1224 udf_closedir(ds); in udf_lookup()
1255 udf_closedir(ds); in udf_lookup()
1258 udf_closedir(ds); in udf_lookup()