file.c

来自「这是一个开放源代码的与WINNT/WIN2K/WIN2003兼容的操作系统」· C语言 代码 · 共 62 行

C
62
字号
/*
 * COPYRIGHT:        See COPYING in the top level directory
 * PROJECT:          ReactOS kernel
 * FILE:             services/fs/ext2/super.c
 * PURPOSE:          ext2 filesystem
 * PROGRAMMER:       David Welch (welch@mcmail.com)
 * UPDATE HISTORY:
 */

/* INCLUDES *****************************************************************/

#include <ntddk.h>

#define NDEBUG
#include <debug.h>

#include "ext2fs.h"

/* FUNCTIONS ****************************************************************/

#define addr_per_block (BLOCKSIZE / sizeof(ULONG))

ULONG Ext2BlockMap(PDEVICE_EXTENSION DeviceExt,
		  struct ext2_inode* inode,
		  ULONG offset)
{
   ULONG block;
   PULONG TempBuffer;
   BOOL b;

   DPRINT("Ext2BlockMap(DeviceExt %x, inode %x, offset %d)\n",
	   DeviceExt,inode,offset);
   if (offset < EXT2_NDIR_BLOCKS)
     {
	block = inode->i_block[offset];
	DPRINT("block %d\n",block);
	return(block);
     }
   offset = offset - EXT2_NDIR_BLOCKS;
   if (offset < addr_per_block)
     {
	block = inode->i_block[EXT2_IND_BLOCK];
	TempBuffer = ExAllocatePool(NonPagedPool, BLOCKSIZE);
	b = Ext2ReadSectors(DeviceExt->StorageDevice,
			    block,
			    1,
			    TempBuffer);
	if (!b)
	  {
	     DbgPrint("ext2fs:%s:%d: Disk io failed\n", __FILE__, __LINE__);
	     return(0);
	  }
	block = TempBuffer[offset];
	ExFreePool(TempBuffer);
	return(block);
     }
   offset = offset - addr_per_block;
   DbgPrint("Failed at %s:%d\n",__FILE__,__LINE__);
   for(;;);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?