コード例 #1
0
ファイル: write.c プロジェクト: jrfl/ext2fsd
BOOLEAN
Ext2ZeroData (
    IN PEXT2_IRP_CONTEXT IrpContext,
    IN PEXT2_VCB         Vcb,
    IN PFILE_OBJECT      FileObject,
    IN PLARGE_INTEGER    Start,
    IN PLARGE_INTEGER    End
    )
{
    PEXT2_FCB       Fcb;
    PBCB            Bcb;
    PVOID           Ptr;
    ULONG           Size;
    BOOLEAN         rc = TRUE;

    ASSERT (End && Start && End->QuadPart > Start->QuadPart);
    Fcb = (PEXT2_FCB) FileObject->FsContext;

    /* skip data zero if we've already tracked unwritten part */
    if (0 == (  End->LowPart & (BLOCK_SIZE -1)) &&
        0 == (Start->LowPart & (BLOCK_SIZE -1))) {

        if (INODE_HAS_EXTENT(Fcb->Inode)) {
            return TRUE;
        } else {
#if !EXT2_PRE_ALLOCATION_SUPPORT
            return TRUE;
#endif
        }
    }

    /* clear data in range [Start, End) */
    return CcZeroData(FileObject, Start, End, Ext2CanIWait());
}
コード例 #2
0
ファイル: ext2fs.cpp プロジェクト: Klozz/ext2read
int Ext2Partition::read_data_block(EXT2_INODE *ino, lloff_t lbn, void *buf)
{
    lloff_t block;

    if(INODE_HAS_EXTENT(ino))
        block = extent_to_logical(ino, lbn);
    else
        block = fileblock_to_logical(ino, lbn);

    if(block == 0)
        return -1;

    return ext2_readblock(block, buf);
}
コード例 #3
0
ファイル: Partition.cpp プロジェクト: BIZMONT/ExtMounter
int Partition::ReadDataBlock(EXT2_INODE *ino, uint64_t lbn, void *buf)
{
    uint64_t block;

    if(INODE_HAS_EXTENT(ino))
        block = ExtentToLogical(ino, lbn);
    else
        block = FileblockToLogical(ino, lbn);

    if(block == 0)
        return -1;

    return ReadBlock(block, buf);
}