24pfs_cache_t *pfsBlockGetNextSegment(pfs_cache_t *clink,
int *result)
28 if (clink->u.inode->next_segment.number)
29 return pfsCacheGetData(clink->pfsMount,
30 clink->u.inode->next_segment.subpart,
31 clink->u.inode->next_segment.number << clink->pfsMount->inode_scale,
32 PFS_CACHE_FLAG_SEGI, result);
34 PFS_PRINTF(PFS_DRV_NAME
": Error: There is no next segment descriptor\n");
41int pfsBlockSeekNextSegment(pfs_cache_t *clink,
pfs_blockpos_t *blockpos)
43 pfs_cache_t *nextSegment;
46 if (blockpos->byte_offset)
48 PFS_PRINTF(PFS_DRV_NAME
": Panic: This is a bug!\n");
54 if (pfsFixIndex(blockpos->block_segment+1)==0)
56 if ((nextSegment=pfsBlockGetNextSegment(pfsCacheUsedAdd(blockpos->inode), &result)) == NULL)
58 pfsCacheFree(blockpos->inode);
59 blockpos->inode=nextSegment;
60 if (clink->u.inode->number_data-1 == ++blockpos->block_segment)
64 blockpos->block_offset=0;
65 blockpos->block_segment++;
73 i = (u32)(size / blockpos->inode->pfsMount->zsize);
74 blockpos->byte_offset += size % blockpos->inode->pfsMount->zsize;
76 if (blockpos->byte_offset >= blockpos->inode->pfsMount->zsize)
78 blockpos->byte_offset -= blockpos->inode->pfsMount->zsize;
84int pfsBlockInitPos(pfs_cache_t *clink,
pfs_blockpos_t *blockpos, u64 position)
86 blockpos->inode=pfsCacheUsedAdd(clink);
87 blockpos->byte_offset=0;
89 if (clink->u.inode->size)
91 blockpos->block_segment=1;
92 blockpos->block_offset=0;
94 blockpos->block_segment=0;
95 blockpos->block_offset=1;
97 return pfsInodeSync(blockpos, position, clink->u.inode->number_data);