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

📄 rtfiles.c

📁 MTK平台绝密核心代码之文件驱动,希望对大家有用
💻 C
📖 第 1 页 / 共 5 页
字号:
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#include <stdlib.h>
#include <string.h>
#include "kal_release.h"
#include "rtfiles.h"
#include "fs_kal.h"
#include "rtfex.h"
#include "app_buff_alloc.h"
//#include "text_encoding.h" /* Add for SFN display issue, Karen Hsu, 2004/06/02, ADD */
extern kal_uint16 UCS2_TO_WCHAR(kal_uint16 src_char); /* Add for SFN display issue, Karen Hsu, 2004/10/08, ADD */

#ifdef _MSC_VER
   #define INTERN _fastcall
#elif defined __BORLANDC__
   #define INTERN __fastcall
#else
   #define INTERN
#endif

#define DIR_COMPACT_SUPPORT   // comment out if you do not need this
#define CHECK_DISK_SUPPORT    // comment out if you do not need this

#define RTF_DELETED           ((char) -27) // first char in file name of deleted file
#define RTF_LONGNAME_ATTR     (RTF_ATTR_READ_ONLY | RTF_ATTR_HIDDEN | RTF_ATTR_SYSTEM | RTF_ATTR_VOLUME)

#define RTFATUnknown  0
#define RTFAT12      12
#define RTFAT16      16
#define RTFAT32      32

#define RTF_CHAIN_END_MARK    0x0FFFFFFFL

#define BITS                  (8*sizeof(int))          // default # of bits in integer
#define FMAX                  (1 << (BITS/2))          // max number of file handles
#define UMAX                  ((1 << (BITS/2-1)) - 1)  // max Unique value for file handles

// partition type flags
#define RTF_PARTITION_FIRST_PRIMARY  0x00000001
#define RTF_PARTITION_EXTENDED       0x00000002
#define RTF_PARTITION_OTHER_PRIMARY  0x00000004
#define RTF_PARTITION_ALL            0x00000007 // all of the above

// flags specifying how buffers are loaded and errors should be handled
#define NO_RAISE     0x00000001
#define NO_CRITICAL  0x00000002
#define NO_LOAD      0x00000004
#define ALT_BUFFER   0x00000008

typedef struct DiskCheckData {
   DWORD                  Flags;
   RTFDrive             * Drive;
   BYTE                 * S;
   BYTE                 * ClusterMap;
   RTFCheckDiskCallback   ErrorHandler;
   RTFDOSDirEntry         D;
   char                   Path[RTF_MAX_PATH];
} DiskCheckData;

const WCHAR dchar_dot[]={0x2e, 0}; /* . */
const WCHAR dchar_dot_dot[]={0x2e, 0x2e, 0}; /* .. */
const WCHAR dchar_start_dot_star[]={0x2a, 0x2e, 0x2a, 0}; /* *.* */

// theses chars may appear on disk. Note that "." is not in ShortNameChars, but " " is
static const char ShortNameChars[] = " $%'-_@~`!(){}^#&0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

static RTFDrive * DefaultDrive = NULL;
RTFMutex * RTFLock = NULL;

/* MTK Enhancement, Karen Hsu, ADD START */
/***********************************************************************/

#if (defined __FS_SYSDRV_ON_NAND__) && !(defined _NAND_FLASH_BOOTING_)
        /* Treat __FS_SYSDRV_ON_NAND__ equal _NAND_FLASH_BOOTING_ */
#define _NAND_FLASH_BOOTING_
#endif

//---------------------- MT Global Data --------------------------
static BYTE DrvMappingFlag = 0; //not mapping
int DrvMappingOld = 67; //default is C
int DrvMappingNew = 90; //default is Z
int SysLockFAT = 0; /* For USB mode to lock FS, Karen Hsu, 2004/10/19, ADD */

int SysBlockFAT = 1; //don't use compile option for easy customization

RTFMutex *MTFMLock = NULL;

RTFMutex *MTXLock = NULL;

#ifdef __FS_MOVE_SUPPORT__
   RTFMutex *MTMoveLock = NULL;
#endif

RTFMutex *MTXdelLock = NULL;

#ifdef __FS_SORT_SUPPORT__
   RTFMutex *MTSortLock = NULL;
#endif

static kal_bool  NorPartition = KAL_FALSE;
static kal_bool  NandPartition = KAL_FALSE;

#ifdef __FS_TRACE_SUPPORT__
   RTFMutex             *MTTraceLock = NULL;
   DWORD                g_TraceFlag = 0;
   static char          TraceStrBuf[MAX_TRACE_STR_LEN];
   char                 TraceTmpBuf[MT_TRACE_TMP_LEN];
   extern kal_bool      gFS_TraceTask[][2];
#endif

#ifdef __FS_QM_SUPPORT__
   WCHAR NvramName[6];
#endif

kal_bool COPYRIGHT_USB_ON = KAL_FALSE; //speedup, don't wrap with compile option flag
#ifdef __P_PROPRIETARY_COPYRIGHT__
RTFDirLocation CopyrightLongPos;       //speedup
RTFDirLocation CopyrightShortPos;      //speedup
RTFDOSDirEntry CopyrightDir;           //speedup
#endif

/* For Virtual File Feature */
const static WCHAR dchar_HexDigits[]= /* 0123456789ABCDEF */
   {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46};

const static WCHAR dchar_virtual_filename_prefix[]= /* \\.\FMapF\ */
   {0x5C, 0x5C, 0x2E, 0x5C, 0x46, 0x4D, 0x61, 0x70, 0x46, 0x5C, 0x0};

#ifdef __FS_SHADOW_NAND_32M__
   #define NUM_OF_FAT_CLUSTER_NAND 65536    //worst case needs 256KB
#elif defined __FS_SHADOW_NAND_64M__
   #define NUM_OF_FAT_CLUSTER_NAND 131072   //worst case needs 512KB
#elif defined __FS_SHADOW_NAND_128M__
   #define NUM_OF_FAT_CLUSTER_NAND 131072   //worst case needs 512KB
#elif defined __FS_SHADOW_NAND_256M__
   #define NUM_OF_FAT_CLUSTER_NAND 262144   //worst case needs 1MB
#elif defined __FS_SHADOW_NAND_512M__
   #define NUM_OF_FAT_CLUSTER_NAND 262144   //worst case needs 1MB
#elif defined __FS_SHADOW_NAND_1G__
   #define NUM_OF_FAT_CLUSTER_NAND 524288   //worst case needs 2MB
#endif

#ifdef __FS_SHADOW_CARD_32M__
   #define NUM_OF_FAT_CLUSTER_CARD 65536    //worst case needs 256KB
#elif defined __FS_SHADOW_CARD_64M__
   #define NUM_OF_FAT_CLUSTER_CARD 131072   //worst case needs 512KB
#elif defined __FS_SHADOW_CARD_128M__
   #define NUM_OF_FAT_CLUSTER_CARD 131072   //worst case needs 512KB
#elif defined __FS_SHADOW_CARD_256M__
   #define NUM_OF_FAT_CLUSTER_CARD 262144   //worst case needs 1MB
#elif defined __FS_SHADOW_CARD_512M__
   #define NUM_OF_FAT_CLUSTER_CARD 262144   //worst case needs 1MB
#elif defined __FS_SHADOW_CARD_1G__
   #define NUM_OF_FAT_CLUSTER_CARD 524288   //worst case needs 2MB
#endif

#if (defined(__FS_SHADOW_NAND__) || defined(__FS_SHADOW_CARD__))
#pragma arm section zidata = "SHADOW_FAT"

#ifdef __FS_SHADOW_NAND__
#ifndef NUM_OF_FAT_CLUSTER_NAND
#error "Size of NAND, __FS_SHADOW_NAND_xxx__, is not defined!"
#endif
   UINT Shadow_FAT_Array_NAND[NUM_OF_FAT_CLUSTER_NAND];
#endif

#ifdef __FS_SHADOW_CARD__
#ifndef NUM_OF_FAT_CLUSTER_CARD
#error "Size of CARD, __FS_SHADOW_CARD_xxx__, is not defined!"
#endif
   UINT Shadow_FAT_Array_CARD[NUM_OF_FAT_CLUSTER_CARD];
#endif

#pragma arm section zidata
#endif

#ifdef __FS_CARD_SUPPORT__
   #ifndef _NAND_FLASH_BOOTING_
      #define __FS_EMERGENT_NOR_BUFFER_SUPPORT__
      RTFBuffer g_Emergent_NOR_Buffer;
      BYTE g_Emergent_NOR_BufferData[RTF_MIN_BUFFER_SIZE];
   #endif
   #ifdef NAND_SUPPORT
      #define __FS_EMERGENT_NAND_BUFFER_SUPPORT__
      RTFBuffer g_Emergent_NAND_Buffer;
      BYTE g_Emergent_NAND_BufferData[RTF_MIN_BUFFER_SIZE];
   #endif
#else
   #if (defined NAND_SUPPORT) && !(defined _NAND_FLASH_BOOTING_)
      #define __FS_EMERGENT_NOR_BUFFER_SUPPORT__
      RTFBuffer g_Emergent_NOR_Buffer;
      BYTE g_Emergent_NOR_BufferData[RTF_MIN_BUFFER_SIZE];
      #define __FS_EMERGENT_NAND_BUFFER_SUPPORT__
      RTFBuffer g_Emergent_NAND_Buffer;
      BYTE g_Emergent_NAND_BufferData[RTF_MIN_BUFFER_SIZE];
   #endif
#endif

/* Sub Mark = Sub Watermark, store on FAT32 InfoSector.
 * Design to get faster respone in Free Cluster Search wrost case, especially on Large Disk
 */
#define SUBMARK_ID_SHIFT   (16)
#define SUBMARK_MASKOUT    (0xFFFF0000)

⌨️ 快捷键说明

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