⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filesys.c

📁 PDA上的CF CARD 文件系统的建立程式
💻 C
📖 第 1 页 / 共 5 页
字号:
	if (*(FileSysHandleTable[handle]) == FAT_ID)
	{
		result = FAT_filelength(handle);
		FileSys_Errno = FATErrno;
		return result;
	}
  #endif

  FileSys_Errno = ERROR_INVALID_DEVICE;
  return -1;
}



/*************************************************************
Function: getdiskspace
Description:
	get the total size of free space on disk
Input:
	None
Output:
	free bytes on disk
	-1 if file system error
**************************************************************/
long fs_getdiskspace(void)
{
  long result;

  if (FileSys_Running == 0)
  {
	FileSys_Errno = ERROR_FILE_SYSTEM_NOT_INIT;
	return -1;
  }

  FileSys_Errno = 0;

  #ifdef NOR_FLASH_DISK_ID
	if (CurrentDrive == NOR_FLASH_DISK_ID)
	{
		result = NOR_FFS_getdiskspace();
		FileSys_Errno = NOR_FFS_Errno;
		return result;
	}
  #endif

  #ifdef NAND_FLASH_DISK_ID
	if (CurrentDrive == NAND_FLASH_DISK_ID)
	{
		result = NAND_FFS_getdiskspace();
		FileSys_Errno = NAND_FFS_Errno;
		return result;
	}
  #endif

  #ifdef RAMDISK_ID
	if (CurrentDrive == RAMDISK_ID)
	{
		result = RD_getdiskspace();
		FileSys_Errno = RDerrno;
		return result;
	}
  #endif

  #ifdef FAT_ID
	if (CurrentDrive == FAT_ID)
	{
		result = FAT_getdiskspace(0);
		FileSys_Errno = FATErrno;
		return result;
	}
  #endif

  FileSys_Errno = ERROR_INVALID_DEVICE;
  return -1;
}


/**** added by chilong 01/28/2002 ****/
/*************************************************************
Function: getDiskTotalCapacity
Description:
	get the total size of a disk
Input:
	None
Output:
	free bytes on disk
	-1 if file system error
**************************************************************/
long getDiskTotalCapacity(void)
{
  long result;

  if (FileSys_Running == 0)
  {
	FileSys_Errno = ERROR_FILE_SYSTEM_NOT_INIT;
	return -1;
  }

  FileSys_Errno = 0;

// NAND_FLASH & NOR_FLASH not supported yet
  #ifdef NOR_FLASH_DISK_ID
	if (CurrentDrive == NOR_FLASH_DISK_ID)
	{
//		result = NOR_FFS_getDiskTotalCapacity();
		FileSys_Errno = NOR_FFS_Errno;
		return result;
	}
  #endif

  #ifdef NAND_FLASH_DISK_ID
	if (CurrentDrive == NAND_FLASH_DISK_ID)
	{
//		result = NAND_FFS_getDiskTotalCapacity();
		FileSys_Errno = NAND_FFS_Errno;
		return result;
	}
  #endif
//     NAND_FLASH & NOR_FLASH not supported yet

  #ifdef RAMDISK_ID
	if (CurrentDrive == RAMDISK_ID)
	{
		result = RD_getDiskTotalCapacity();
		FileSys_Errno = RDerrno;
		return result;
	}
  #endif

  #ifdef FAT_ID
	if (CurrentDrive == FAT_ID)
	{
		result = FAT_getDiskTotalCapacity(0);
		FileSys_Errno = FATErrno;
		return result;
	}
  #endif

  FileSys_Errno = ERROR_INVALID_DEVICE;
  return -1;
	
}


/*************************************************************
Function: getDiskTotalCapacity2
Description:
	get the total size of a disk
Input:
	drive -- driver number starting from 1
Output:
	free bytes on disk
	-1 if file system error
**************************************************************/
long getDiskTotalCapacity2(int driveNO)
{
  long result;

  if (FileSys_Running == 0)
  {
	FileSys_Errno = ERROR_FILE_SYSTEM_NOT_INIT;
	return -1;
  }

  driveNO--;	// internal drive number starts from 0

  FileSys_Errno = 0;

  #ifdef NOR_FLASH_DISK_ID
	if (driveNO == NOR_FLASH_DISK_ID)
	{
//		result = NOR_FFS_getDiskTotalCapacity();
		FileSys_Errno = NOR_FFS_Errno;
		return result;
	}
  #endif

  #ifdef NAND_FLASH_DISK_ID
	if (driveNO == NAND_FLASH_DISK_ID)
	{
		/* Kevin */
		result = NAND_FFS_getDiskTotalCapacity();
		//result = -1;
		FileSys_Errno = NAND_FFS_Errno;
		return result;
	}
  #endif

  #ifdef RAMDISK_ID
	if (driveNO == RAMDISK_ID)
	{
		result = RD_getDiskTotalCapacity();
		FileSys_Errno = RDerrno;
		return result;
	}
  #endif

  #ifdef FAT_ID
	if (driveNO == FAT_ID)
	{
		result = FAT_getDiskTotalCapacity(0);
		FileSys_Errno = FATErrno;
		return result;
	}
  #endif

  FileSys_Errno = ERROR_INVALID_DEVICE;
  return -1;
}


/*************************************************************
Function: getDiskUsedSpace
Description:
	get the total used size of a disk
Input:
	None
Output:
	free bytes on disk
	-1 if file system error
**************************************************************/
long getDiskUsedSpace(void)
{
  long result;

  if (FileSys_Running == 0)
  {
	FileSys_Errno = ERROR_FILE_SYSTEM_NOT_INIT;
	return -1;
  }

  FileSys_Errno = 0;

//  NAND_FLASH & NOR_FLASH not supported yet
  #ifdef NOR_FLASH_DISK_ID
	if (CurrentDrive == NOR_FLASH_DISK_ID)
	{
//		result = NOR_FFS_getDiskUsedSpace();
		FileSys_Errno = NOR_FFS_Errno;
		return result;
	}
  #endif

  #ifdef NAND_FLASH_DISK_ID
	if (CurrentDrive == NAND_FLASH_DISK_ID)
	{
//		result = NAND_FFS_getDiskUsedSpace();
		result = -1;
		FileSys_Errno = NAND_FFS_Errno;
		return result;
	}
  #endif
//     NAND_FLASH & NOR_FLASH not supported yet

  #ifdef RAMDISK_ID
	if (CurrentDrive == RAMDISK_ID)
	{
		result = RD_getDiskUsedSpace();
		FileSys_Errno = RDerrno;
		return result;
	}
  #endif

  #ifdef FAT_ID
	if (CurrentDrive == FAT_ID)
	{
		result = FAT_getDiskUsedSpace(0);
		FileSys_Errno = FATErrno;
		return result;
	}
  #endif

  FileSys_Errno = ERROR_INVALID_DEVICE;
  return -1;
	
}

/*************************************************************
Function: getDiskUsedSpace2
Description:
	get the total used size of a disk
Input:
	drive -- drive number starting from 1
Output:
	free bytes on disk
	-1 if file system error
**************************************************************/
long getDiskUsedSpace2(int driveNO)
{
  long result;

  if (FileSys_Running == 0)
  {
	FileSys_Errno = ERROR_FILE_SYSTEM_NOT_INIT;
	return -1;
  }

  driveNO--;	// internal drive number starts from 0

  FileSys_Errno = 0;

  #ifdef NOR_FLASH_DISK_ID
	if (driveNO == NOR_FLASH_DISK_ID)
	{
//		result = NOR_FFS_getDiskUsedSpace();
		FileSys_Errno = NOR_FFS_Errno;
		return result;
	}
  #endif

  #ifdef NAND_FLASH_DISK_ID
	if (driveNO == NAND_FLASH_DISK_ID)
	{
		/* Kevin */
		result = NAND_FFS_getdiskspace();
		//result = NAND_FFS_getDiskUsedSpace();
		//result = -1;
		FileSys_Errno = NAND_FFS_Errno;
		return result;
	}
  #endif

  #ifdef RAMDISK_ID
	if (driveNO == RAMDISK_ID)
	{
		result = RD_getDiskUsedSpace();
		FileSys_Errno = RDerrno;
		return result;
	}
  #endif

  #ifdef FAT_ID
	if (driveNO == FAT_ID)
	{
		result = FAT_getDiskUsedSpace(0);
		FileSys_Errno = FATErrno;
		return result;
	}
  #endif

  FileSys_Errno = ERROR_INVALID_DEVICE;
  return -1;
}

/**** added by chilong 01/28/2002 ****/


/*************************************************************
Function: getdiskspace2
Description:
	get the total size of free space on the specific disk
Input:
	driveNO - the drive number (starts from 1)
Output:
	free bytes on disk
	-1 if file system error
**************************************************************/
long getdiskspace2(int driveNO)
{
  long result;

  if (FileSys_Running == 0)
  {
	FileSys_Errno = ERROR_FILE_SYSTEM_NOT_INIT;
	return -1;
  }

  driveNO--;	// internal drive number starts from 0

  FileSys_Errno = 0;

  #ifdef NOR_FLASH_DISK_ID
	if (driveNO == NOR_FLASH_DISK_ID)
	{
		result = NOR_FFS_getdiskspace();
		FileSys_Errno = NOR_FFS_Errno;
		return result;
	}
  #endif

  #ifdef NAND_FLASH_DISK_ID
	if (driveNO == NAND_FLASH_DISK_ID)
	{
		result = NAND_FFS_getdiskspace();
		FileSys_Errno = NAND_FFS_Errno;
		return result;
	}
  #endif

  #ifdef RAMDISK_ID
	if (driveNO == RAMDISK_ID)
	{
		result = RD_getdiskspace();
		FileSys_Errno = RDerrno;
		return result;
	}
  #endif

  #ifdef FAT_ID
	if (driveNO == FAT_ID)
	{
		result = FAT_getdiskspace(0);
		FileSys_Errno = FATErrno;
		return result;
	}
  #endif

  FileSys_Errno = ERROR_INVALID_DEVICE;
  return -1;
}


/*************************************************************
Function: stat
Description: get file's information of specified file
Input:
	path: filename
	buffer: stat struct associated with the file handle
Output:
	0 : SUCCESS
	-1: FAILURE
**************************************************************/
//int fs_stat(unsigned char *name, struct _stat *buffer)
int fs_stat(char *name, struct _stat *buffer)
{
  int result;
  short driveNO;

  /**** added by chilong 01/15/2002 ****/
  //unsigned char *Pathname1;
  char *Pathname1;       // by zhang xue ping
  /**** added by chilong 01/15/2002 ****/

  if (FileSys_Running == 0)
  {
	FileSys_Errno = ERROR_FILE_SYSTEM_NOT_INIT;
	return -1;
  }
  
  /**** added by chilong 12/7/2001 ****/
  if (name == NULL || buffer == NULL)
  	return -1;
  /**** added by chilong 12/7/2001 ****/

  /**** added by chilong 01/15/2002 ****/
  if ((Pathname1 = (char *)ap_malloc(MAX_PATHNAME_LEN + 2)) == NULL)
  {
  	FileSys_Errno = ERROR_ALLOC_MEM;
  	return -1;
  }
  /**** added by chilong 01/15/2002 ****/

  FileSys_Errno = 0;

  driveNO = getDriveNO(name, Pathname1);
  if (driveNO == -1)
  {
	ap_free(Pathname1);
	return -1;
  }

  buffer->st_dev = driveNO;
  buffer->st_rdev = driveNO;

  #ifdef NOR_FLASH_DISK_ID
	if (driveNO == NOR_FLASH_DISK_ID)
	{
		result = NOR_FFS_stat(Pathname1, buffer);
		FileSys_Errno = NOR_FFS_Errno;

		ap_free(Pathname1);
		
		return result;
	}
  #endif
  #ifdef NAND_FLASH_DISK_ID
	if (driveNO == NAND_FLASH_DISK_ID)
	{
		result = NAND_FFS_stat((unsigned char *)Pathname1, buffer);
		FileSys_Errno = NAND_FFS_Errno;
		
		ap_free(Pathname1);
		
		return result;
	}
  #endif
  #ifdef RAMDISK_ID
	if (driveNO == RAMDISK_ID)
	{
		result = RD_stat((unsigned char *)Pathname1, buffer);
		FileSys_Errno = RDerrno;
		
		ap_free(Pathname1);
		
		return result;
	}
  #endif

  #ifdef FAT_ID
	if (driveNO == FAT_ID)
	{
		result = FAT_stat((unsigned char *)Pathname1, buffer);
		FileSys_Errno = FATErrno;
		
		ap_free(Pathname1);
		
		return result;
	}
  #endif

  FileSys_Errno = ERROR_INVALID_DEVICE;
  
  ap_free(Pathname1);
  
  return -1;
}


/**** added by MSC 03/07/2002 ****/
/*************************************************************
Function: stat2
Description: get file's information of an opened file
Input:
	handle: file handle
	buffer: stat struct associated with the file handle
Output:
	0 : SUCCESS
	-1: FAILURE
**************************************************************/
int fs_stat2(int handle, struct _stat *buffer)
{
  int result;

  if (FileSys_Running == 0)
  {
	FileSys_Errno = ERROR_FILE_SYSTEM_NOT_INIT;
	return -1;
  }

  if ((handle < 0) || (handle >= MAX_OPEN_FILE) || (FileSysHandleTable[handle] == NULL))
  {
	FileSys_Errno = ERROR_INVALID_HANDLE;
	return -1;
  }

  buffer->st_dev = buffer->st_rdev = *(FileSysHandleTable[handle]);

  #ifdef NOR_FLASH_DISK_ID
	if (*(FileSysHandleTable[handle]) == NOR_FLASH_DISK_ID)
	{
		result = NOR_FFS_stat2(handle, buffer);
		FileSys_Errno = NOR_FFS_Errno;
		return result;
	}
  #endif

  #ifdef NAND_FLASH_DISK_ID
	if (*(FileSysHandleTable[handle]) == NAND_FLASH_DISK_ID)
	{
		//result = NAND_FFS_stat2(handle, buffer);
		//FileSys_Errno = NAND_FFS_Errno;
		result = 0;
		return result;
	}
  #endif

  #ifdef RAMDISK_ID
	if (*(FileSysHandleTable[handle]) == RAMDISK_ID)
	{
		/* marked by chilong 05/05/2002
		result = RD_stat2(handle, buffer);
		FileSys_Errno = RDerrno;
		return result;
		   marked by chilong 05/05/2002 */
		   
		// modified by chilong 05/05/2002 temporarily
		return -1;
	}
  #endif

  #ifdef FAT_ID
	if (*(FileSysHandleTable[handle]) == FAT_ID)
	{
		result = FAT_stat2(handle, buffer);
		FileSys_Errno = FATErrno;
		return result;
	}
  #endif

  FileSys_Errno = ERROR_INVALID_DEVICE;
  return -1;
}



/*************************************************************
Function: setStat2
Description: set file's information of an opened file
Input:
	handle: file handle
	buffer: stat struct associated with the file handle
Output:
	0 : SUCCESS
	-1: FAILURE
**************************************************************/
int fs_setStat2(int handle, struct _stat *buffer)
{
  int result;

  if (FileSys_Running == 0)
  {
	FileSys_Errno = ERROR_FILE_SYSTEM_NOT_INIT;
	return -1;
  }

  if ((handle < 0) || (handle >= MAX_OPEN_FILE) || (FileSysHandleTable[handle] == NULL))
  {
	FileSys_Errno = ERROR_INVALID_HANDLE;
	return -1;
  }

  buffer->st_dev = buffer->st_rdev = *(FileSysHandleTable[handle]);

  #ifdef NOR_FLASH_DISK_ID
	if (*(FileSysHandleTable[handle]) == NOR_FLASH_DISK_ID)
	{

⌨️ 快捷键说明

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