📄 rtfiles.c
字号:
* 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 + -