コード例 #1
0
ファイル: InodeAccess.c プロジェクト: yantangucsb/Potato
ErrorCode writeInodeData(FileSystem* fs, Inode* inode, BYTE* buf, size_type off, size_type size, size_type* writebyte){
    assert(off < MAX_FILE_SIZE);
/*    size_type i = 0;
    for(i=0; i<size; i++){
        printf("%c", *(buf+i));
    }
  */  
    size_type byteswritten = 0;
    size_type start = off;
    while(byteswritten < size){
        size_type b_id;
        size_type b_offset;
        size_type len;
        ErrorCode err = Potato_bmap(fs, inode, &start, &b_id, &b_offset);
        if(err == Success && b_id > 0){
            
            len = size - byteswritten < BLOCK_SIZE-b_offset? size-byteswritten:BLOCK_SIZE-b_offset;
            printf("[writeInodeData] write block %ld, offset %ld, len %ld\n", b_id, b_offset, len);
            err = writeDataBlock(fs, b_id, buf, b_offset, len);
            if(err != Success){
                return err;
            }
        }else{
            ErrorCode err = Potato_balloc(fs, inode, start/BLOCK_SIZE, &b_id);
            printf("[writeInodeData] cur b_id: %ld\n", b_id);
            if(err != Success)
                return err;
            b_offset = start%BLOCK_SIZE;
            len = size - byteswritten < BLOCK_SIZE-b_offset? size-byteswritten:BLOCK_SIZE-b_offset;
            err = writeDataBlock(fs, b_id, buf, b_offset, len);
            if(err != Success)
                return err;
        }
        byteswritten += len;
        start+= len;
        buf+=len;
    }
    *writebyte = byteswritten;
    inode->fileSize = off+size>inode->fileSize? off+size: inode->fileSize;
    return Success;
}
コード例 #2
0
ファイル: cache.c プロジェクト: shaojianqing/StartOS
void writeBlock(CacheData *cacheData) {
	if (cacheData!=NULL) {
		writeDataBlock(cacheData);	
	}
}