Lines Matching defs:extents

96 static int  read_attr_data(struct hfsmount *hfsmp, uio_t uio, size_t datasize, HFSPlusExtentDescriptor *extents);
98 static int write_attr_data(struct hfsmount *hfsmp, uio_t uio, size_t datasize, HFSPlusExtentDescriptor *extents);
100 static int alloc_attr_blks(struct hfsmount *hfsmp, size_t attrsize, size_t extentbufsize, HFSPlusExtentDescriptor *extents, int *blocks);
102 static void free_attr_blks(struct hfsmount *hfsmp, int blkcnt, HFSPlusExtentDescriptor *extents);
106 static int count_extent_blocks(int maxblks, HFSPlusExtentRecord extents);
426 * overflow extents file to find non-resource, non-finderinfo EAs. There may be cases
555 /* Process overflow extents if necessary. */
572 /* Get a buffer to hold the worst case amount of extents. */
583 /* Grab the first 8 extents. */
584 bcopy(&recp->forkData.theFork.extents[0], extentptr, sizeof(HFSPlusExtentRecord));
586 blkcnt = count_extent_blocks(totalblocks, recp->forkData.theFork.extents);
588 /* Now lookup the overflow extents. */
596 printf("hfs_getxattr: %s missing extents, only %d blks of %d found\n",
601 /* Grab the next 8 extents. */
602 bcopy(&recp->overflowExtents.extents[0], extentptr, sizeof(HFSPlusExtentRecord));
604 blkcnt += count_extent_blocks(totalblocks, recp->overflowExtents.extents);
619 else /* No overflow extents. */ {
620 result = read_attr_data(hfsmp, uio, recp->forkData.theFork.logicalSize, recp->forkData.theFork.extents);
1114 bcopy(extentptr, recp->forkData.theFork.extents, sizeof(HFSPlusExtentRecord));
1124 extentblks = count_extent_blocks(blkcnt, recp->forkData.theFork.extents);
1129 /* Create overflow extents as needed. */
1137 /* Copy the next set of extents. */
1139 bcopy(&extentptr[i], recp->overflowExtents.extents, sizeof(HFSPlusExtentRecord));
1147 extentblks = count_extent_blocks(blkcnt, recp->overflowExtents.extents);
1586 /* Process the first 8 extents. */
1587 extentblks = count_extent_blocks(totalblks, attrdata.forkData.theFork.extents);
1591 free_attr_blks(hfsmp, extentblks, attrdata.forkData.theFork.extents);
1596 /* Process any overflow extents. */
1609 /* Process the next 8 extents. */
1610 extentblks = count_extent_blocks(totalblks, attrdata.overflowExtents.extents);
1614 free_attr_blks(hfsmp, extentblks, attrdata.overflowExtents.extents);
2278 read_attr_data(struct hfsmount *hfsmp, uio_t uio, size_t datasize, HFSPlusExtentDescriptor *extents)
2298 for (i = 0; (attrsize > 0) && (bufsize > 0) && (extents[i].startBlock != 0); ++i) {
2299 iosize = (int)extents[i].blockCount * blksize;
2303 uio_setoffset(uio, (u_int64_t)extents[i].startBlock * (u_int64_t)blksize);
2309 iosize, extents[i].startBlock, extents[i].blockCount, result);
2327 write_attr_data(struct hfsmount *hfsmp, uio_t uio, size_t datasize, HFSPlusExtentDescriptor *extents)
2348 for (i = 0; (attrsize > 0) && (bufsize > 0) && (extents[i].startBlock != 0); ++i) {
2349 iosize = (int)extents[i].blockCount * blksize;
2353 uio_setoffset(uio, (u_int64_t)extents[i].startBlock * (u_int64_t)blksize);
2359 iosize, extents[i].startBlock, extents[i].blockCount, result);
2377 alloc_attr_blks(struct hfsmount *hfsmp, size_t attrsize, size_t extentbufsize, HFSPlusExtentDescriptor *extents, int *blocks)
2398 &extents[i].startBlock, &extents[i].blockCount);
2401 blkcnt, extents[i].startBlock, extents[i].blockCount, result);
2404 extents[i].startBlock = 0;
2405 extents[i].blockCount = 0;
2408 blkcnt -= extents[i].blockCount;
2409 startblk = extents[i].startBlock + extents[i].blockCount;
2412 * If it didn't fit in the extents buffer then bail.
2421 if ((blkcnt = extents[i].blockCount) != 0) {
2422 (void) BlockDeallocate(hfsmp, extents[i].startBlock, blkcnt, 0);
2423 extents[i].startBlock = 0;
2424 extents[i].blockCount = 0;
2437 free_attr_blks(struct hfsmount *hfsmp, int blkcnt, HFSPlusExtentDescriptor *extents)
2446 for (i = 0; (remblks > 0) && (extents[i].blockCount != 0); i++) {
2447 if (extents[i].blockCount > (u_int32_t)blkcnt) {
2450 extents[i].startBlock, extents[i].blockCount);
2452 extents[i].blockCount = 0;
2455 if (extents[i].startBlock == 0) {
2458 (void)BlockDeallocate(hfsmp, extents[i].startBlock, extents[i].blockCount, 0);
2459 remblks -= extents[i].blockCount;
2460 extents[i].startBlock = 0;
2461 extents[i].blockCount = 0;
2465 extents[i].startBlock, extents[i].blockCount);
2471 start = (u_int64_t)extents[i].startBlock * (u_int64_t)hfsmp->blockSize;
2472 end = start + (u_int64_t)extents[i].blockCount * (u_int64_t)hfsmp->blockSize;
2485 if (forkdata->extents[7].blockCount == 0)
2488 blocks = forkdata->extents[0].blockCount +
2489 forkdata->extents[1].blockCount +
2490 forkdata->extents[2].blockCount +
2491 forkdata->extents[3].blockCount +
2492 forkdata->extents[4].blockCount +
2493 forkdata->extents[5].blockCount +
2494 forkdata->extents[6].blockCount +
2495 forkdata->extents[7].blockCount;
2501 count_extent_blocks(int maxblks, HFSPlusExtentRecord extents)
2507 /* Ignore obvious bogus extents. */
2508 if (extents[i].blockCount > (u_int32_t)maxblks)
2510 if (extents[i].startBlock == 0 || extents[i].blockCount == 0)
2512 blocks += extents[i].blockCount;