From b263d0ea45742dc8ac8b6a225b55f00a7893ddee Mon Sep 17 00:00:00 2001 From: P L Sai Krishna Date: Thu, 18 Dec 2014 15:35:11 +0530 Subject: [PATCH] xilffs: Modified the xilffs according to MISRAC 2012 compliant. This patch modifies the xilffs library according to MISRAC 2012 compliant and cache related changes were removed in previous upgrade and the changes are done again to correct it. Signed-off-by: P L Sai Krishna --- lib/sw_services/xilffs/src/diskio.c | 126 +- lib/sw_services/xilffs/src/ff.c | 2445 ++++++++++++------- lib/sw_services/xilffs/src/include/diskio.h | 51 +- lib/sw_services/xilffs/src/include/ff.h | 141 +- lib/sw_services/xilffs/src/include/ffconf.h | 8 +- 5 files changed, 1733 insertions(+), 1038 deletions(-) diff --git a/lib/sw_services/xilffs/src/diskio.c b/lib/sw_services/xilffs/src/diskio.c index 58e48779..f487043d 100755 --- a/lib/sw_services/xilffs/src/diskio.c +++ b/lib/sw_services/xilffs/src/diskio.c @@ -69,6 +69,7 @@ * WP/CD. CR# 810655. * Make changes for prototypes of disk_read and * disk_write according to latest version. +* 12/15/14 Modified the code according to MISRAC 2012 Compliant. * * * @@ -76,6 +77,7 @@ * ******************************************************************************/ #include "diskio.h" +#include "ff.h" #include "xparameters.h" #include "xil_types.h" @@ -86,11 +88,11 @@ #include "xil_printf.h" #define SD_DEVICE_ID XPAR_XSDPS_0_DEVICE_ID -#define HIGH_SPEED_SUPPORT 0x01 -#define WIDTH_4_BIT_SUPPORT 0x4 -#define SD_CLK_25_MHZ 25000000 -#define SD_CLK_26_MHZ 26000000 -#define SD_CLK_52_MHZ 52000000 +#define HIGH_SPEED_SUPPORT 0x01U +#define WIDTH_4_BIT_SUPPORT 0x4U +#define SD_CLK_25_MHZ 25000000U +#define SD_CLK_26_MHZ 26000000U +#define SD_CLK_52_MHZ 52000000U #define EXT_CSD_DEVICE_TYPE_BYTE 196 #define EXT_CSD_4_BIT_WIDTH_BYTE 183 #define EXT_CSD_HIGH_SPEED_BYTE 185 @@ -113,10 +115,10 @@ static XSdPs SdInstance; #ifdef __ICCARM__ #pragma data_alignment = 32 -u8 ExtCsd[512]; +static u8 ExtCsd[512]; #pragma data_alignment = 4 #else -u8 ExtCsd[512] __attribute__ ((aligned(32))); +static u8 ExtCsd[512] __attribute__ ((aligned(32))); #endif /*-----------------------------------------------------------------------*/ @@ -129,7 +131,7 @@ u8 ExtCsd[512] __attribute__ ((aligned(32))); * Gets the status of the disk. * In case of SD, it checks whether card is present or not. * -* @param drv - Drive number +* @param pdrv - Drive number * * @return * 0 Status ok @@ -142,23 +144,23 @@ u8 ExtCsd[512] __attribute__ ((aligned(32))); * ******************************************************************************/ DSTATUS disk_status ( - BYTE drv /* Drive number (0) */ + BYTE pdrv /* Drive number (0) */ ) { DSTATUS s = Stat; u32 StatusReg; #ifdef FILE_SYSTEM_INTERFACE_SD - StatusReg = XSdPs_GetPresentStatusReg(XPAR_XSDPS_0_BASEADDR); + StatusReg = XSdPs_GetPresentStatusReg((u32)XPAR_XSDPS_0_BASEADDR); #if XPAR_XSDPS_0_HAS_CD - if ((StatusReg & XSDPS_PSR_CARD_INSRT_MASK) == 0) { + if ((StatusReg & XSDPS_PSR_CARD_INSRT_MASK) == 0U) { s = STA_NODISK | STA_NOINIT; goto Label; } #endif s &= ~STA_NODISK; #if XPAR_XSDPS_0_HAS_WP - if ((StatusReg & XSDPS_PSR_WPS_PL_MASK) == 0){ + if ((StatusReg & XSDPS_PSR_WPS_PL_MASK) == 0U){ s |= STA_PROTECT; goto Label; } @@ -182,7 +184,7 @@ Label: * This function also selects additional settings such as bus width, * speed and block size. * -* @param drv - Drive number +* @param pdrv - Drive number * * @return s - which contains an OR of the following information * STA_NODISK Disk is not present @@ -194,19 +196,19 @@ Label: * ******************************************************************************/ DSTATUS disk_initialize ( - BYTE drv /* Physical drive number (0) */ + BYTE pdrv /* Physical drive number (0) */ ) { DSTATUS s; - int Status; + s32 Status; #ifdef __ICCARM__ #pragma data_alignment = 32 - u8 SCR[8]; - u8 ReadBuff[64]; + u8 SCR[8] = {0U}; + u8 ReadBuff[64] = {0U}; #pragma data_alignment = 4 #else - u8 SCR[8] __attribute__ ((aligned(32))); - u8 ReadBuff[64] __attribute__ ((aligned(32))); + u8 SCR[8] __attribute__ ((aligned(32))) = {0U}; + u8 ReadBuff[64] __attribute__ ((aligned(32))) = {0U}; #endif #ifdef FILE_SYSTEM_INTERFACE_SD @@ -216,15 +218,15 @@ DSTATUS disk_initialize ( /* * Check if card is in the socket */ - s = disk_status(drv); - if (s & STA_NODISK) { + s = disk_status(pdrv); + if ((s & STA_NODISK) != 0U) { return s; } /* * Initialize the host controller */ - SdConfig = XSdPs_LookupConfig(SD_DEVICE_ID); + SdConfig = XSdPs_LookupConfig((u16)SD_DEVICE_ID); if (NULL == SdConfig) { s |= STA_NOINIT; return s; @@ -269,7 +271,7 @@ DSTATUS disk_initialize ( return s; } - if(ReadBuff[13] & HIGH_SPEED_SUPPORT){ + if((ReadBuff[13] & HIGH_SPEED_SUPPORT) != 0U){ Status = XSdPs_Change_BusSpeed(&SdInstance); if (Status != XST_SUCCESS) { s |= STA_NOINIT; @@ -283,7 +285,7 @@ DSTATUS disk_initialize ( return s; } - if (SCR[1] & WIDTH_4_BIT_SUPPORT) { + if ((SCR[1] & WIDTH_4_BIT_SUPPORT) != 0U) { Status = XSdPs_Change_BusWidth(&SdInstance); if (Status != XST_SUCCESS) { s |= STA_NOINIT; @@ -291,7 +293,7 @@ DSTATUS disk_initialize ( } } - Status = XSdPs_SetBlkSize(&SdInstance, XSDPS_BLK_SIZE_512_MASK); + Status = XSdPs_SetBlkSize(&SdInstance, (u16)XSDPS_BLK_SIZE_512_MASK); if (Status != XST_SUCCESS) { s |= STA_NOINIT; return s; @@ -383,7 +385,7 @@ DSTATUS disk_initialize ( * Reads the drive * In case of SD, it reads the SD card using ADMA2 in polled mode. * -* @param drv - Drive number +* @param pdrv - Drive number * @param *buff - Pointer to the data buffer to store read data * @param sector - Start sector number * @param count - Sector count @@ -397,7 +399,7 @@ DSTATUS disk_initialize ( * ******************************************************************************/ DRESULT disk_read ( - BYTE drv, /* Physical drive number (0) */ + BYTE pdrv, /* Physical drive number (0) */ BYTE *buff, /* Pointer to the data buffer to store read data */ DWORD sector, /* Start sector number (LBA) */ UINT count /* Sector count (1..128) */ @@ -405,18 +407,24 @@ DRESULT disk_read ( { #ifdef FILE_SYSTEM_INTERFACE_SD DSTATUS s; - int Status; + s32 Status; + DWORD LocSector = sector; + s = disk_status(pdrv); - s = disk_status(drv); - - if (s & STA_NOINIT) return RES_NOTRDY; - if (!count) return RES_PARERR; + if ((s & STA_NOINIT) != 0U) { + return RES_NOTRDY; + } + if (count == 0U) { + return RES_PARERR; + } /* Convert LBA to byte address if needed */ - if (!(SdInstance.HCS)) sector *= XSDPS_BLK_SIZE_512_MASK; + if ((SdInstance.HCS) == 0U) { + LocSector *= (DWORD)XSDPS_BLK_SIZE_512_MASK; + } - Status = XSdPs_ReadPolled(&SdInstance, sector, count, buff); + Status = XSdPs_ReadPolled(&SdInstance, (u32)LocSector, count, buff); if (Status != XST_SUCCESS) { return RES_ERROR; } @@ -430,28 +438,30 @@ DRESULT disk_read ( /*-----------------------------------------------------------------------*/ DRESULT disk_ioctl ( - BYTE drv, /* Physical drive number (0) */ - BYTE ctrl, /* Control code */ + BYTE pdrv, /* Physical drive number (0) */ + BYTE cmd, /* Control code */ void *buff /* Buffer to send/receive control data */ ) { #ifdef FILE_SYSTEM_INTERFACE_SD DRESULT res; - - if (disk_status(drv) & STA_NOINIT) /* Check if card is in the socket */ - return RES_NOTRDY; + void *LocBuff = buff; + if ((disk_status(pdrv) & STA_NOINIT) != 0U) { /* Check if card is in the socket */ + return RES_NOTRDY; + } res = RES_ERROR; - switch (ctrl) { - case CTRL_SYNC : /* Make sure that no pending write process */ + switch (cmd) { + case (BYTE)CTRL_SYNC : /* Make sure that no pending write process */ res = RES_OK; break; - case GET_SECTOR_COUNT : /* Get number of sectors on the disk (DWORD) */ + case (BYTE)GET_SECTOR_COUNT : /* Get number of sectors on the disk (DWORD) */ + res = RES_ERROR; break; - case GET_BLOCK_SIZE : /* Get erase block size in unit of sector (DWORD) */ - *(DWORD*)buff = 128; + case (BYTE)GET_BLOCK_SIZE : /* Get erase block size in unit of sector (DWORD) */ + (*((DWORD *)((void *)LocBuff))) = ((DWORD)128); res = RES_OK; break; @@ -461,8 +471,9 @@ DRESULT disk_ioctl ( } return res; -#endif +#else return 0; +#endif } /******************************************************************************/ @@ -480,7 +491,7 @@ DRESULT disk_ioctl ( DWORD get_fattime (void) { - return ((DWORD)(2010 - 1980) << 25) /* Fixed to Jan. 1, 2010 */ + return ((DWORD)(2010U - 1980U) << 25U) /* Fixed to Jan. 1, 2010 */ | ((DWORD)1 << 21) | ((DWORD)1 << 16) | ((DWORD)0 << 11) @@ -494,7 +505,7 @@ DWORD get_fattime (void) * Reads the drive * In case of SD, it reads the SD card using ADMA2 in polled mode. * -* @param drv - Drive number +* @param pdrv - Drive number * @param *buff - Pointer to the data to be written * @param sector - Sector address * @param count - Sector count @@ -508,25 +519,32 @@ DWORD get_fattime (void) * ******************************************************************************/ DRESULT disk_write ( - BYTE drv, /* Physical drive nmuber (0..) */ + BYTE pdrv, /* Physical drive nmuber (0..) */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address (LBA) */ UINT count /* Number of sectors to write (1..128) */ ) { DSTATUS s; - int Status; + s32 Status; + DWORD LocSector = sector; #ifdef FILE_SYSTEM_INTERFACE_SD - s = disk_status(drv); + s = disk_status(pdrv); - if (s & STA_NOINIT) return RES_NOTRDY; - if (!count) return RES_PARERR; + if ((s & STA_NOINIT) != 0U) { + return RES_NOTRDY; + } + if (count == 0U) { + return RES_PARERR; + } /* Convert LBA to byte address if needed */ - if (!(SdInstance.HCS)) sector *= XSDPS_BLK_SIZE_512_MASK; + if ((SdInstance.HCS) == 0U) { + LocSector *= (DWORD)XSDPS_BLK_SIZE_512_MASK; + } - Status = XSdPs_WritePolled(&SdInstance, sector, count, buff); + Status = XSdPs_WritePolled(&SdInstance, (u32)LocSector, count, buff); if (Status != XST_SUCCESS) { return RES_ERROR; } diff --git a/lib/sw_services/xilffs/src/ff.c b/lib/sw_services/xilffs/src/ff.c index 7159612b..7862a67a 100755 --- a/lib/sw_services/xilffs/src/ff.c +++ b/lib/sw_services/xilffs/src/ff.c @@ -128,7 +128,7 @@ ---------------------------------------------------------------------------*/ -#if _FATFS != 8051 /* Revision ID */ +#if FAT_FS != 8051 /* Revision ID */ #error Wrong include file (ff.h). #endif @@ -139,13 +139,13 @@ #error Static LFN work area cannot be used at thread-safe configuration. #endif #define ENTER_FF(fs) { if (!lock_fs(fs)) return FR_TIMEOUT; } -#define LEAVE_FF(fs, res) { unlock_fs(fs, res); return res; } +#define LEAVE_FF(fs, res) { unlock_fs((fs), (res)); return (res); } #else #define ENTER_FF(fs) -#define LEAVE_FF(fs, res) return res +#define LEAVE_FF(fs, res) return ((res)) #endif -#define ABORT(fs, res) { fp->err = (BYTE)(res); LEAVE_FF(fs, res); } +#define ABORT(fs, res) { fp->err = (BYTE)(res); LEAVE_FF((fs), (res)); } /* Definitions of sector size */ @@ -153,7 +153,7 @@ #error Wrong sector size configuration. #endif #if _MAX_SS == _MIN_SS -#define SS(fs) ((UINT)_MAX_SS) /* Fixed sector size */ +#define SS(fs) _MAX_SS /* Fixed sector size */ #else #define SS(fs) ((fs)->ssize) /* Variable sector size */ #endif @@ -177,183 +177,183 @@ typedef struct { /* DBCS code ranges and SBCS extend character conversion table */ #if _CODE_PAGE == 932 /* Japanese Shift-JIS */ -#define _DF1S 0x81 /* DBC 1st byte range 1 start */ -#define _DF1E 0x9F /* DBC 1st byte range 1 end */ -#define _DF2S 0xE0 /* DBC 1st byte range 2 start */ -#define _DF2E 0xFC /* DBC 1st byte range 2 end */ -#define _DS1S 0x40 /* DBC 2nd byte range 1 start */ -#define _DS1E 0x7E /* DBC 2nd byte range 1 end */ -#define _DS2S 0x80 /* DBC 2nd byte range 2 start */ -#define _DS2E 0xFC /* DBC 2nd byte range 2 end */ +#define DF1S 0x81U /* DBC 1st byte range 1 start */ +#define DF_1E 0x9FU /* DBC 1st byte range 1 end */ +#define DF_2S 0xE0U /* DBC 1st byte range 2 start */ +#define DF_2E 0xFCU /* DBC 1st byte range 2 end */ +#define DS_1S 0x40U /* DBC 2nd byte range 1 start */ +#define DS_1E 0x7EU /* DBC 2nd byte range 1 end */ +#define DS_2S 0x80U /* DBC 2nd byte range 2 start */ +#define DS_2E 0xFCU /* DBC 2nd byte range 2 end */ #elif _CODE_PAGE == 936 /* Simplified Chinese GBK */ -#define _DF1S 0x81 -#define _DF1E 0xFE -#define _DS1S 0x40 -#define _DS1E 0x7E -#define _DS2S 0x80 -#define _DS2E 0xFE +#define DF1S 0x81U +#define DF_1E 0xFEU +#define DS_1S 0x40U +#define DS_1E 0x7EU +#define DS_2S 0x80U +#define DS_2E 0xFEU #elif _CODE_PAGE == 949 /* Korean */ -#define _DF1S 0x81 -#define _DF1E 0xFE -#define _DS1S 0x41 -#define _DS1E 0x5A -#define _DS2S 0x61 -#define _DS2E 0x7A -#define _DS3S 0x81 -#define _DS3E 0xFE +#define DF1S 0x81U +#define DF_1E 0xFEU +#define DS_1S 0x41U +#define DS_1E 0x5AU +#define DS_2S 0x61U +#define DS_2E 0x7AU +#define _DS3S 0x81U +#define _DS3E 0xFEU #elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */ -#define _DF1S 0x81 -#define _DF1E 0xFE -#define _DS1S 0x40 -#define _DS1E 0x7E -#define _DS2S 0xA1 -#define _DS2E 0xFE +#define DF1S 0x81U +#define DF_1E 0xFEU +#define DS_1S 0x40U +#define DS_1E 0x7EU +#define DS_2S 0xA1U +#define DS_2E 0xFEU #elif _CODE_PAGE == 437 /* U.S. (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F,0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 720 /* Arabic (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x45,0x41,0x84,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x49,0x49,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 737 /* Greek (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \ 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xE7,0xE8,0xF1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 775 /* Baltic (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ 0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xA5,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE3,0xE8,0xE8,0xEA,0xEA,0xEE,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 852 /* Latin 2 (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F,0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0x9F, \ 0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF} #elif _CODE_PAGE == 855 /* Cyrillic (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F,0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \ 0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xDD,0xD9,0xDA,0xDB,0xDC,0xDD,0xE0,0xDF, \ 0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE,0xEF,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 857 /* Turkish (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x98,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \ 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0x59,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 862 /* Hebrew (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 866 /* Russian (OEM) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0x90,0x91,0x92,0x93,0x9d,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 1250 /* Central Europe (Windows) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xA5,0xAA,0xBB,0xBC,0xBD,0xBC,0xAF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} #elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x82,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ 0xA0,0xA2,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF} #elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xAd,0x9B,0x8C,0x9D,0xAE,0x9F, \ 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} #elif _CODE_PAGE == 1253 /* Greek (Windows) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xA2,0xB8,0xB9,0xBA, \ 0xE0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xFB,0xBC,0xFD,0xBF,0xFF} #elif _CODE_PAGE == 1254 /* Turkish (Windows) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x9E,0x9F, \ 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} #elif _CODE_PAGE == 1255 /* Hebrew (Windows) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 1256 /* Arabic (Windows) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x8C,0x9D,0x9E,0x9F, \ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0x41,0xE1,0x41,0xE3,0xE4,0xE5,0xE6,0x43,0x45,0x45,0x45,0x45,0xEC,0xED,0x49,0x49,0xF0,0xF1,0xF2,0xF3,0x4F,0xF5,0xF6,0xF7,0xF8,0x55,0xFA,0x55,0x55,0xFD,0xFE,0xFF} #elif _CODE_PAGE == 1257 /* Baltic (Windows) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xBC,0xBD,0xBE,0xAF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} #elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */ -#define _DF1S 0 +#define DF1S 0 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0xAC,0x9D,0x9E,0x9F, \ 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ @@ -363,7 +363,7 @@ typedef struct { #if _USE_LFN #error Cannot use LFN feature without valid code page. #endif -#define _DF1S 0 +#define DF1S 0 #else #error Unknown code page @@ -372,22 +372,22 @@ typedef struct { /* Character code support macros */ -#define IsUpper(c) (((c)>='A')&&((c)<='Z')) -#define IsLower(c) (((c)>='a')&&((c)<='z')) -#define IsDigit(c) (((c)>='0')&&((c)<='9')) +#define IsUpper(c) (((c)>=(BYTE)'A')&&((c)<=(BYTE)'Z')) +#define IsLower(c) (((c)>=(BYTE)'a')&&((c)<=(BYTE)'z')) +#define IsDigit(c) (((c)>=(BYTE)'0')&&((c)<=(BYTE)'9')) -#if _DF1S /* Code page is DBCS */ +#if DF1S /* Code page is DBCS */ -#ifdef _DF2S /* Two 1st byte areas */ -#define IsDBCS1(c) (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E)) +#ifdef DF_2S /* Two 1st byte areas */ +#define IsDBCS1(c) ((((BYTE)(c) >= DF1S) && ((BYTE)(c) <= DF_1E)) || (((BYTE)(c) >= DF_2S) && ((BYTE)(c) <= DF_2E))) #else /* One 1st byte area */ -#define IsDBCS1(c) ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) +#define IsDBCS1(c) (((BYTE)(c) >= DF1S) && ((BYTE)(c) <= DF_1E)) #endif #ifdef _DS3S /* Three 2nd byte areas */ -#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E)) +#define IsDBCS2(c) ((((BYTE)(c) >= DS_1S) && ((BYTE)(c) <= DS_1E)) || (((BYTE)(c) >= DS_2S) && ((BYTE)(c) <= DS_2E)) || (((BYTE)(c) >= _DS3S) && ((BYTE)(c) <= _DS3E))) #else /* Two 2nd byte areas */ -#define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E)) +#define IsDBCS2(c) ((((BYTE)(c) >= DS_1S) && ((BYTE)(c) <= DS_1E)) || (((BYTE)(c) >= DS_2S) && ((BYTE)(c) <= DS_2E))) #endif #else /* Code page is SBCS */ @@ -395,17 +395,17 @@ typedef struct { #define IsDBCS1(c) 0 #define IsDBCS2(c) 0 -#endif /* _DF1S */ +#endif /* DF1S */ /* Name status flags */ #define NS 11 /* Index of name status byte in fn[] */ -#define NS_LOSS 0x01 /* Out of 8.3 format */ -#define NS_LFN 0x02 /* Force to create LFN entry */ -#define NS_LAST 0x04 /* Last segment */ -#define NS_BODY 0x08 /* Lower case flag (body) */ -#define NS_EXT 0x10 /* Lower case flag (ext) */ -#define NS_DOT 0x20 /* Dot entry */ +#define NS_LOSS 0x01U /* Out of 8.3 format */ +#define NS_LFN 0x02U /* Force to create LFN entry */ +#define NS_LAST 0x04U /* Last segment */ +#define NS_BODY 0x08U /* Lower case flag (body) */ +#define NS_EXT 0x10U /* Lower case flag (ext) */ +#define NS_DOT 0x20U /* Dot entry */ /* FAT sub-type boundaries */ @@ -417,65 +417,65 @@ typedef struct { / structure member because the structure is not binary compatible between / different platforms */ -#define BS_jmpBoot 0 /* Jump instruction (3) */ -#define BS_OEMName 3 /* OEM name (8) */ -#define BPB_BytsPerSec 11 /* Sector size [byte] (2) */ -#define BPB_SecPerClus 13 /* Cluster size [sector] (1) */ -#define BPB_RsvdSecCnt 14 /* Size of reserved area [sector] (2) */ -#define BPB_NumFATs 16 /* Number of FAT copies (1) */ -#define BPB_RootEntCnt 17 /* Number of root directory entries for FAT12/16 (2) */ -#define BPB_TotSec16 19 /* Volume size [sector] (2) */ -#define BPB_Media 21 /* Media descriptor (1) */ -#define BPB_FATSz16 22 /* FAT size [sector] (2) */ -#define BPB_SecPerTrk 24 /* Track size [sector] (2) */ -#define BPB_NumHeads 26 /* Number of heads (2) */ -#define BPB_HiddSec 28 /* Number of special hidden sectors (4) */ -#define BPB_TotSec32 32 /* Volume size [sector] (4) */ -#define BS_DrvNum 36 /* Physical drive number (2) */ -#define BS_BootSig 38 /* Extended boot signature (1) */ -#define BS_VolID 39 /* Volume serial number (4) */ -#define BS_VolLab 43 /* Volume label (8) */ -#define BS_FilSysType 54 /* File system type (1) */ -#define BPB_FATSz32 36 /* FAT size [sector] (4) */ -#define BPB_ExtFlags 40 /* Extended flags (2) */ -#define BPB_FSVer 42 /* File system version (2) */ -#define BPB_RootClus 44 /* Root directory first cluster (4) */ -#define BPB_FSInfo 48 /* Offset of FSINFO sector (2) */ -#define BPB_BkBootSec 50 /* Offset of backup boot sector (2) */ -#define BS_DrvNum32 64 /* Physical drive number (2) */ -#define BS_BootSig32 66 /* Extended boot signature (1) */ -#define BS_VolID32 67 /* Volume serial number (4) */ -#define BS_VolLab32 71 /* Volume label (8) */ -#define BS_FilSysType32 82 /* File system type (1) */ -#define FSI_LeadSig 0 /* FSI: Leading signature (4) */ -#define FSI_StrucSig 484 /* FSI: Structure signature (4) */ -#define FSI_Free_Count 488 /* FSI: Number of free clusters (4) */ -#define FSI_Nxt_Free 492 /* FSI: Last allocated cluster (4) */ -#define MBR_Table 446 /* MBR: Partition table offset (2) */ -#define SZ_PTE 16 /* MBR: Size of a partition table entry */ -#define BS_55AA 510 /* Signature word (2) */ +#define BS_jmpBoot 0U /* Jump instruction (3) */ +#define BS_OEMName 3U /* OEM name (8) */ +#define BPB_BytsPerSec 11U /* Sector size [byte] (2) */ +#define BPB_SecPerClus 13U /* Cluster size [sector] (1) */ +#define BPB_RsvdSecCnt 14U /* Size of reserved area [sector] (2) */ +#define BPB_NumFATs 16U /* Number of FAT copies (1) */ +#define BPB_RootEntCnt 17U /* Number of root directory entries for FAT12/16 (2) */ +#define BPB_TotSec16 19U /* Volume size [sector] (2) */ +#define BPB_Media 21U /* Media descriptor (1) */ +#define BPB_FATSz16 22U /* FAT size [sector] (2) */ +#define BPB_SecPerTrk 24U /* Track size [sector] (2) */ +#define BPB_NumHeads 26U /* Number of heads (2) */ +#define BPB_HiddSec 28U /* Number of special hidden sectors (4) */ +#define BPB_TotSec32 32U /* Volume size [sector] (4) */ +#define BS_DrvNum 36U /* Physical drive number (2) */ +#define BS_BootSig 38U /* Extended boot signature (1) */ +#define BS_VolID 39U /* Volume serial number (4) */ +#define BS_VolLab 43U /* Volume label (8) */ +#define BS_FilSysType 54U /* File system type (1) */ +#define BPB_FATSz32 36U /* FAT size [sector] (4) */ +#define BPB_ExtFlags 40U /* Extended flags (2) */ +#define BPB_FSVer 42U /* File system version (2) */ +#define BPB_RootClus 44U /* Root directory first cluster (4) */ +#define BPB_FSInfo 48U /* Offset of FSINFO sector (2) */ +#define BPB_BkBootSec 50U /* Offset of backup boot sector (2) */ +#define BS_DrvNum32 64U /* Physical drive number (2) */ +#define BS_BootSig32 66U /* Extended boot signature (1) */ +#define BS_VolID32 67U /* Volume serial number (4) */ +#define BS_VolLab32 71U /* Volume label (8) */ +#define BS_FilSysType32 82U /* File system type (1) */ +#define FSI_LeadSig 0U /* FSI: Leading signature (4) */ +#define FSI_StrucSig 484U /* FSI: Structure signature (4) */ +#define FSI_Free_Count 488U /* FSI: Number of free clusters (4) */ +#define FSI_Nxt_Free 492U /* FSI: Last allocated cluster (4) */ +#define MBR_Table 446U /* MBR: Partition table offset (2) */ +#define SZ_PTE 16U /* MBR: Size of a partition table entry */ +#define BS_55AA 510U /* Signature word (2) */ -#define DIR_Name 0 /* Short file name (11) */ -#define DIR_Attr 11 /* Attribute (1) */ -#define DIR_NTres 12 /* NT flag (1) */ -#define DIR_CrtTimeTenth 13 /* Created time sub-second (1) */ -#define DIR_CrtTime 14 /* Created time (2) */ -#define DIR_CrtDate 16 /* Created date (2) */ -#define DIR_LstAccDate 18 /* Last accessed date (2) */ -#define DIR_FstClusHI 20 /* Higher 16-bit of first cluster (2) */ -#define DIR_WrtTime 22 /* Modified time (2) */ -#define DIR_WrtDate 24 /* Modified date (2) */ -#define DIR_FstClusLO 26 /* Lower 16-bit of first cluster (2) */ -#define DIR_FileSize 28 /* File size (4) */ -#define LDIR_Ord 0 /* LFN entry order and LLE flag (1) */ -#define LDIR_Attr 11 /* LFN attribute (1) */ -#define LDIR_Type 12 /* LFN type (1) */ -#define LDIR_Chksum 13 /* Sum of corresponding SFN entry */ -#define LDIR_FstClusLO 26 /* Filled by zero (0) */ -#define SZ_DIR 32 /* Size of a directory entry */ -#define LLE 0x40 /* Last long entry flag in LDIR_Ord */ -#define DDE 0xE5 /* Deleted directory entry mark in DIR_Name[0] */ -#define NDDE 0x05 /* Replacement of the character collides with DDE */ +#define DIR_Name 0U /* Short file name (11) */ +#define DIR_Attr 11U /* Attribute (1) */ +#define DIR_NTres 12U /* NT flag (1) */ +#define DIR_CrtTimeTenth 13U /* Created time sub-second (1) */ +#define DIR_CrtTime 14U /* Created time (2) */ +#define DIR_CrtDate 16U /* Created date (2) */ +#define DIR_LstAccDate 18U /* Last accessed date (2) */ +#define DIR_FstClusHI 20U /* Higher 16-bit of first cluster (2) */ +#define DIR_WrtTime 22U /* Modified time (2) */ +#define DIR_WrtDate 24U /* Modified date (2) */ +#define DIR_FstClusLO 26U /* Lower 16-bit of first cluster (2) */ +#define DIR_FileSize 28U /* File size (4) */ +#define LDIR_Ord 0U /* LFN entry order and LLE flag (1) */ +#define LDIR_Attr 11U /* LFN attribute (1) */ +#define LDIR_Type 12U /* LFN type (1) */ +#define LDIR_Chksum 13U /* Sum of corresponding SFN entry */ +#define LDIR_FstClusLO 26U /* Filled by zero (0) */ +#define SZ_DIR 32U /* Size of a directory entry */ +#define LLE 0x40U /* Last long entry flag in LDIR_Ord */ +#define DDE 0xE5U /* Deleted directory entry mark in DIR_Name[0] */ +#define NDDE 0x05U /* Replacement of the character collides with DDE */ @@ -495,9 +495,6 @@ FATFS *FatFs[_VOLUMES]; /* Pointer to the file system objects (logical drives) #error Number of volumes must be 1 to 10. #endif -static -WORD Fsid; /* File system mount ID */ - #if _FS_RPATH && _VOLUMES >= 2 static BYTE CurrVol; /* Current drive */ @@ -561,8 +558,8 @@ const BYTE ExCvt[] = _EXCVT; /* Upper conversion table for extended characters * /* Copy memory to memory */ static void mem_cpy (void* dst, const void* src, UINT cnt) { - BYTE *d = (BYTE*)dst; - const BYTE *s = (const BYTE*)src; + BYTE *d = (BYTE*)(void *)dst; + const BYTE *s = src; #if _WORD_ACCESS == 1 while (cnt >= sizeof (int)) { @@ -571,45 +568,60 @@ void mem_cpy (void* dst, const void* src, UINT cnt) { cnt -= sizeof (int); } #endif - while (cnt--) - *d++ = *s++; + while ((cnt) > 0U){ + *d=*s; + d+=1U; + s+=1U; + cnt-=1U; + } } /* Fill memory */ static -void mem_set (void* dst, int val, UINT cnt) { - BYTE *d = (BYTE*)dst; +void mem_set (void* dst, s32 val, UINT cnt) { + BYTE *d = (BYTE*)(void *)dst; - while (cnt--) - *d++ = (BYTE)val; + while ((cnt) > 0U){ + *d = (BYTE)val; + d+=1U; + cnt-=1U; + } } /* Compare memory to memory */ static -int mem_cmp (const void* dst, const void* src, UINT cnt) { - const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src; - int r = 0; - - while (cnt-- && (r = *d++ - *s++) == 0) ; +s32 mem_cmp (const void* dst, const void* src, UINT cnt) { + const BYTE *d = dst, *s = src; + s32 r = (s32)0; + UINT LocCnt = cnt; + while (((LocCnt) != 0U) && ((r = (s32)(*d - *s)) == 0)) { + d+=1U; + s+=1U; + LocCnt-=1U; + } return r; } /* Check if chr is contained in the string */ static -int chk_chr (const char* str, int chr) { - while (*str && *str != chr) str++; - return *str; +s32 chk_chr (const char* str, s32 chr) { + char Status; + const char *LocStr = str; + while (((*LocStr) != (char)0) && ((*LocStr != chr) != 0U)){ + LocStr+=1; + } + Status = *LocStr; + return (s32)Status; } - /*-----------------------------------------------------------------------*/ /* Request/Release grant to access the volume */ /*-----------------------------------------------------------------------*/ #if _FS_REENTRANT static -int lock_fs ( +s32 lock_fs ( FATFS* fs /* File system object */ ) { @@ -644,7 +656,7 @@ void unlock_fs ( static FRESULT chk_lock ( /* Check if the file can be accessed */ DIR* dp, /* Directory object pointing the file to be checked */ - int acc /* Desired access type (0:Read, 1:Write, 2:Delete/Rename) */ + s32 acc /* Desired access type (0:Read, 1:Write, 2:Delete/Rename) */ ) { UINT i, be; @@ -668,7 +680,7 @@ FRESULT chk_lock ( /* Check if the file can be accessed */ static -int enq_lock (void) /* Check if an entry is available for a new object */ +s32 enq_lock (void) /* Check if an entry is available for a new object */ { UINT i; @@ -680,7 +692,7 @@ int enq_lock (void) /* Check if an entry is available for a new object */ static UINT inc_lock ( /* Increment object open counter and returns its index (0:Internal error) */ DIR* dp, /* Directory object pointing the file to register or increment */ - int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ + s32 acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ ) { UINT i; @@ -760,16 +772,17 @@ FRESULT sync_window ( DWORD wsect; UINT nf; - - if (fs->wflag) { /* Write back the sector if it is dirty */ + if (fs->wflag != 0U) { /* Write back the sector if it is dirty */ wsect = fs->winsect; /* Current sector number */ - if (disk_write(fs->drv, fs->win, wsect, 1)) + if (disk_write(fs->drv, fs->win, wsect, 1U) != RES_OK) { return FR_DISK_ERR; - fs->wflag = 0; - if (wsect - fs->fatbase < fs->fsize) { /* Is it in the FAT area? */ - for (nf = fs->n_fats; nf >= 2; nf--) { /* Reflect the change to all FAT copies */ + } + fs->wflag = 0U; + if ((wsect - fs->fatbase) < fs->fsize) { /* Is it in the FAT area? */ + nf = (UINT)fs->n_fats; + for (; nf >= 2U; nf--) { /* Reflect the change to all FAT copies */ wsect += fs->fsize; - disk_write(fs->drv, fs->win, wsect, 1); + (void)disk_write(fs->drv, fs->win, wsect, 1U); } } } @@ -786,12 +799,14 @@ FRESULT move_window ( { if (sector != fs->winsect) { /* Changed current window */ #if !_FS_READONLY - if (sync_window(fs) != FR_OK) + if (sync_window(fs) != FR_OK) { return FR_DISK_ERR; + } #endif - if (disk_read(fs->drv, fs->win, sector, 1)) + if (disk_read(fs->drv, fs->win, sector, 1U) != RES_OK) { return FR_DISK_ERR; - fs->winsect = sector; + } + fs->winsect = sector; } return FR_OK; @@ -811,26 +826,32 @@ FRESULT sync_fs ( /* FR_OK: successful, FR_DISK_ERR: failed */ { FRESULT res; - + BYTE *lp; res = sync_window(fs); if (res == FR_OK) { /* Update FSINFO sector if needed */ - if (fs->fs_type == FS_FAT32 && fs->fsi_flag == 1) { + if (((fs->fs_type == FS_FAT32) != 0U) && ((fs->fsi_flag == 1U) != 0U)) { /* Create FSINFO structure */ mem_set(fs->win, 0, SS(fs)); - ST_WORD(fs->win+BS_55AA, 0xAA55); - ST_DWORD(fs->win+FSI_LeadSig, 0x41615252); - ST_DWORD(fs->win+FSI_StrucSig, 0x61417272); - ST_DWORD(fs->win+FSI_Free_Count, fs->free_clust); - ST_DWORD(fs->win+FSI_Nxt_Free, fs->last_clust); + lp = fs->win+BS_55AA; + ST_WORD(lp, 0xAA55U); + lp = fs->win+FSI_LeadSig; + ST_DWORD(lp, 0x41615252); + lp = fs->win+FSI_StrucSig; + ST_DWORD(lp, 0x61417272); + lp = fs->win+FSI_Free_Count; + ST_DWORD(lp, fs->free_clust); + lp = fs->win+FSI_Nxt_Free; + ST_DWORD(lp, fs->last_clust); /* Write it into the FSINFO sector */ - fs->winsect = fs->volbase + 1; - disk_write(fs->drv, fs->win, fs->winsect, 1); - fs->fsi_flag = 0; + fs->winsect = fs->volbase + 1U; + (void)disk_write(fs->drv, fs->win, fs->winsect, 1U); + fs->fsi_flag = 0U; } /* Make sure that no pending write process in the physical drive */ - if (disk_ioctl(fs->drv, CTRL_SYNC, 0) != RES_OK) + if (disk_ioctl(fs->drv, CTRL_SYNC, (void*)NULL) != RES_OK) { res = FR_DISK_ERR; + } } return res; @@ -850,9 +871,17 @@ DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */ DWORD clst /* Cluster# to be converted */ ) { - clst -= 2; - if (clst >= (fs->n_fatent - 2)) return 0; /* Invalid cluster# */ - return clst * fs->csize + fs->database; + DWORD LocalCluster = clst; + DWORD res; + LocalCluster -= 2U; + if (LocalCluster >= (fs->n_fatent - 2)){ + res = ((DWORD)0U); /* Invalid cluster# */ + } + else { + res = ((LocalCluster * fs->csize) + fs->database); + } + + return res; } @@ -869,36 +898,51 @@ DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, Else:Cluster status ) { UINT wc, bc; - BYTE *p; + BYTE *p,temp; + DWORD Status = 0xFFFFFFFFU; - if (clst < 2 || clst >= fs->n_fatent) /* Check range */ - return 1; - + if (((clst < 2U) != 0U) || ((clst >= fs->n_fatent) != 0U)){ /* Chack range */ + Status = (DWORD)1; + } + else{ switch (fs->fs_type) { case FS_FAT12 : bc = (UINT)clst; bc += bc / 2; - if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; - wc = fs->win[bc % SS(fs)]; bc++; - if (move_window(fs, fs->fatbase + (bc / SS(fs)))) break; - wc |= fs->win[bc % SS(fs)] << 8; - return clst & 1 ? wc >> 4 : (wc & 0xFFF); + if (move_window(fs, fs->fatbase + ((DWORD)bc / (DWORD)SS(fs))) > 0){ + break; + } + wc = (UINT)fs->win[bc % (UINT)SS(fs)]; bc++; + if (move_window(fs, fs->fatbase + ((DWORD)bc / (DWORD)SS(fs))) > 0){ + break; + } + temp = fs->win[bc % (UINT)SS(fs)] << 4; + temp = temp << 4; + wc |= temp; + Status = (DWORD)(((clst & (DWORD)1) == (DWORD)(1U)) ? (DWORD)((DWORD)wc >> 4) : (DWORD)((DWORD)wc & (DWORD)0xFFFU)); + break; case FS_FAT16 : - if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2)))) break; - p = &fs->win[clst * 2 % SS(fs)]; - return LD_WORD(p); + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))) > 0){ + break; + } + p = &fs->win[(clst * 2) % SS(fs)]; + Status = (DWORD)LD_WORD(p); + break; case FS_FAT32 : - if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4)))) break; - p = &fs->win[clst * 4 % SS(fs)]; - return LD_DWORD(p) & 0x0FFFFFFF; - - default: - return 1; + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) > 0){ + break; + } + p = &fs->win[(clst * 4) % SS(fs)]; + Status = (LD_DWORD(p) & (DWORD)0x0FFFFFFFU); + break; + default : + /* This is added for Misrac Compliance */ + break; } - - return 0xFFFFFFFF; /* An error occurred at the disk I/O layer */ + } + return Status; /* An error occurred at the disk I/O layer */ } @@ -918,46 +962,55 @@ FRESULT put_fat ( UINT bc; BYTE *p; FRESULT res; + DWORD LocVal = val; - - if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ + if (((clst < 2U) != 0U) || ((clst >= fs->n_fatent) != 0U)) { /* Check range */ res = FR_INT_ERR; } else { switch (fs->fs_type) { case FS_FAT12 : bc = (UINT)clst; bc += bc / 2; - res = move_window(fs, fs->fatbase + (bc / SS(fs))); - if (res != FR_OK) break; + res = move_window(fs, fs->fatbase + ((DWORD)bc / (DWORD)SS(fs))); + if (res != FR_OK){ + break; + } p = &fs->win[bc % SS(fs)]; - *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; + *p = (((clst & 1U) == 1U) ? ((*p & 0x0FU) | ((BYTE)LocVal << 4)) : (BYTE)LocVal); bc++; - fs->wflag = 1; - res = move_window(fs, fs->fatbase + (bc / SS(fs))); - if (res != FR_OK) break; + fs->wflag = 1U; + res = move_window(fs, fs->fatbase + ((DWORD)bc / (DWORD)SS(fs))); + if (res != FR_OK){ + break; + } p = &fs->win[bc % SS(fs)]; - *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); + *p = (((clst & 1U) == 1U) ? (BYTE)(LocVal >> 4) : ((*p & 0xF0U) | ((BYTE)(LocVal >> 8) & 0x0FU))); break; case FS_FAT16 : res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))); - if (res != FR_OK) break; - p = &fs->win[clst * 2 % SS(fs)]; - ST_WORD(p, (WORD)val); + if (res != FR_OK){ + break; + } + p = &fs->win[(clst * 2) % SS(fs)]; + ST_WORD(p, (WORD)LocVal); break; case FS_FAT32 : res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))); - if (res != FR_OK) break; - p = &fs->win[clst * 4 % SS(fs)]; - val |= LD_DWORD(p) & 0xF0000000; - ST_DWORD(p, val); + if (res != FR_OK){ + break; + } + p = &fs->win[(clst * 4) % SS(fs)]; + LocVal |= LD_DWORD(p) & 0xF0000000U; + ST_DWORD(p, LocVal); break; default : res = FR_INT_ERR; + break; } - fs->wflag = 1; + fs->wflag = 1U; } return res; @@ -979,25 +1032,30 @@ FRESULT remove_chain ( { FRESULT res; DWORD nxt; + DWORD LocClst = clst; #if _USE_ERASE - DWORD scl = clst, ecl = clst, rt[2]; + DWORD scl = LocClst, ecl = LocClst, rt[2]; #endif - if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ + if (((LocClst < 2U) != 0U) || ((LocClst >= fs->n_fatent) != 0U)) { /* Check range */ res = FR_INT_ERR; } else { res = FR_OK; - while (clst < fs->n_fatent) { /* Not a last link? */ - nxt = get_fat(fs, clst); /* Get cluster status */ - if (nxt == 0) break; /* Empty cluster? */ - if (nxt == 1) { res = FR_INT_ERR; break; } /* Internal error? */ - if (nxt == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } /* Disk error? */ - res = put_fat(fs, clst, 0); /* Mark the cluster "empty" */ - if (res != FR_OK) break; - if (fs->free_clust != 0xFFFFFFFF) { /* Update FSINFO */ + while (LocClst < fs->n_fatent) { /* Not a last link? */ + nxt = get_fat(fs, LocClst); /* Get cluster status */ + if (nxt == 0U) { + break; /* Empty cluster? */ + } + if (nxt == 1U) { res = FR_INT_ERR; break; } /* Internal error? */ + if (nxt == 0xFFFFFFFFU) { res = FR_DISK_ERR; break; } /* Disk error? */ + res = put_fat(fs, LocClst, 0U); /* Mark the cluster "empty" */ + if (res != FR_OK) { + break; + } + if (fs->free_clust != 0xFFFFFFFFU) { /* Update FSInfo */ fs->free_clust++; - fs->fsi_flag |= 1; + fs->fsi_flag |= 1U; } #if _USE_ERASE if (ecl + 1 == nxt) { /* Is next cluster contiguous? */ @@ -1009,7 +1067,7 @@ FRESULT remove_chain ( scl = ecl = nxt; } #endif - clst = nxt; /* Next cluster */ + LocClst = nxt; /* Next cluster */ } } @@ -1034,44 +1092,59 @@ DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk err FRESULT res; - if (clst == 0) { /* Create a new chain */ + if (clst == 0U) { /* Create a new chain */ scl = fs->last_clust; /* Get suggested start point */ - if (!scl || scl >= fs->n_fatent) scl = 1; + if (((!scl) != 0U) || ((scl >= fs->n_fatent) != 0U)){ + scl = 1U; + } } else { /* Stretch the current chain */ cs = get_fat(fs, clst); /* Check the cluster status */ - if (cs < 2) return 1; /* Invalid value */ - if (cs == 0xFFFFFFFF) return cs; /* A disk error occurred */ - if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ + if (cs < 2U) { + return (DWORD)1; /* Invalid value */ + } + if (cs == (DWORD)0xFFFFFFFFU) { + return cs; /* A disk error occurred */ + } + if (cs < fs->n_fatent) { + return cs; /* It is already followed by next cluster */ + } scl = clst; } ncl = scl; /* Start cluster */ for (;;) { ncl++; /* Next cluster */ - if (ncl >= fs->n_fatent) { /* Check wrap around */ - ncl = 2; - if (ncl > scl) return 0; /* No free cluster */ + if (ncl >= fs->n_fatent) { /* Wrap around */ + ncl = 2U; + if (ncl > scl) { + return 0; /* No free cluster */ + } } cs = get_fat(fs, ncl); /* Get the cluster status */ - if (cs == 0) break; /* Found a free cluster */ - if (cs == 0xFFFFFFFF || cs == 1)/* An error occurred */ + if (cs == 0U) { + break; /* Found a free cluster */ + } + if ((cs == 0xFFFFFFFFU) || (cs == 1U)) {/* An error occurred */ return cs; - if (ncl == scl) return 0; /* No free cluster */ + } + if (ncl == scl) { + return 0; /* No free cluster */ + } } - res = put_fat(fs, ncl, 0x0FFFFFFF); /* Mark the new cluster "last link" */ - if (res == FR_OK && clst != 0) { + res = put_fat(fs, ncl, 0x0FFFFFFFU); /* Mark the new cluster "last link" */ + if ((res == FR_OK) && (clst != 0U)) { res = put_fat(fs, clst, ncl); /* Link it to the previous one if needed */ } if (res == FR_OK) { fs->last_clust = ncl; /* Update FSINFO */ - if (fs->free_clust != 0xFFFFFFFF) { + if (fs->free_clust != 0xFFFFFFFFU) { fs->free_clust--; - fs->fsi_flag |= 1; + fs->fsi_flag |= 1U; } } else { - ncl = (res == FR_DISK_ERR) ? 0xFFFFFFFF : 1; + ncl = (res == FR_DISK_ERR) ? 0xFFFFFFFFU : 1U; } return ncl; /* Return new cluster number or error code */ @@ -1099,8 +1172,12 @@ DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */ cl = ofs / SS(fp->fs) / fp->fs->csize; /* Cluster order from top of the file */ for (;;) { ncl = *tbl++; /* Number of cluters in the fragment */ - if (!ncl) return 0; /* End of table? (error) */ - if (cl < ncl) break; /* In this fragment? */ + if (ncl == ((DWORD)0U)) { + return 0; /* End of table? (error) */ + } + if (cl < ncl) { + break; /* In this fragment? */ + } cl -= ncl; tbl++; /* Next fragment */ } return cl + *tbl; /* Return the cluster number */ @@ -1120,37 +1197,44 @@ FRESULT dir_sdi ( UINT idx /* Index of directory table */ ) { + WORD LocalDirectory = (WORD)idx; DWORD clst, sect; UINT ic; - dp->index = (WORD)idx; /* Current index */ + dp->index = (WORD)LocalDirectory; /* Current index */ clst = dp->sclust; /* Table start cluster (0:root) */ - if (clst == 1 || clst >= dp->fs->n_fatent) /* Check start cluster range */ + if (((clst == 1U) !=0) || ((clst >= dp->fs->n_fatent) !=0)) { /* Check start cluster range */ return FR_INT_ERR; - if (!clst && dp->fs->fs_type == FS_FAT32) /* Replace cluster# 0 with root cluster# if in FAT32 */ + } + if ((clst == ((DWORD)0U)) && ((dp->fs->fs_type == FS_FAT32) != 0U)) { /* Replace cluster# 0 with root cluster# if in FAT32 */ clst = dp->fs->dirbase; + } - if (clst == 0) { /* Static table (root-directory in FAT12/16) */ - if (idx >= dp->fs->n_rootdir) /* Is index out of range? */ + if (clst == 0U) { /* Static table (root-directory in FAT12/16) */ + if (LocalDirectory >= dp->fs->n_rootdir) { /* Is index out of range? */ return FR_INT_ERR; + } sect = dp->fs->dirbase; } else { /* Dynamic table (root-directory in FAT32 or sub-directory) */ - ic = SS(dp->fs) / SZ_DIR * dp->fs->csize; /* Entries per cluster */ - while (idx >= ic) { /* Follow cluster chain */ + ic = (UINT)((UINT)(SS(dp->fs) / SZ_DIR) * (UINT)dp->fs->csize); /* Entries per cluster */ + while (LocalDirectory >= ic) { /* Follow cluster chain */ clst = get_fat(dp->fs, clst); /* Get next cluster */ - if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ - if (clst < 2 || clst >= dp->fs->n_fatent) /* Reached to end of table or internal error */ + if (clst == 0xFFFFFFFFU) { + return FR_DISK_ERR; /* Disk error */ + } + if (((clst < 2U) != 0U) || ((clst >= dp->fs->n_fatent) != 0U)) { /* Reached to end of table or internal error */ return FR_INT_ERR; - idx -= ic; + } + LocalDirectory -= (WORD)ic; } sect = clust2sect(dp->fs, clst); } dp->clust = clst; /* Current cluster# */ - if (!sect) return FR_INT_ERR; - dp->sect = sect + idx / (SS(dp->fs) / SZ_DIR); /* Sector# of the directory entry */ - dp->dir = dp->fs->win + (idx % (SS(dp->fs) / SZ_DIR)) * SZ_DIR; /* Ptr to the entry in the sector */ + if (sect == ((DWORD)0U)) {return FR_INT_ERR;} + dp->sect = sect + ((DWORD)idx / ((DWORD)SS(dp->fs) / (DWORD)SZ_DIR)); /* Sector# of the directory entry */ + dp->dir = dp->fs->win + ((idx % (SS(dp->fs) / SZ_DIR)) * SZ_DIR); /* Ptr to the entry in the sector */ return FR_OK; } @@ -1165,49 +1249,69 @@ FRESULT dir_sdi ( static FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */ DIR* dp, /* Pointer to the directory object */ - int stretch /* 0: Do not stretch table, 1: Stretch table if needed */ + s32 stretch /* 0: Do not stretch table, 1: Stretch table if needed */ ) { DWORD clst; UINT i; - i = dp->index + 1; - if (!(i & 0xFFFF) || !dp->sect) /* Report EOT when index has reached 65535 */ + i = ((UINT)dp->index + (UINT)1U); + if (((!(i & 0xFFFFU)) != 0U) || ((!dp->sect) != 0U)) { /* Report EOT when index has reached 65535 */ return FR_NO_FILE; + } - if (!(i % (SS(dp->fs) / SZ_DIR))) { /* Sector changed? */ + if ((!(i % (SS(dp->fs) / SZ_DIR))) != 0U) { /* Sector changed? */ dp->sect++; /* Next sector */ - if (!dp->clust) { /* Static table */ - if (i >= dp->fs->n_rootdir) /* Report EOT if it reached end of static table */ + if ((!dp->clust) != 0U) { /* Static table */ + if (i >= dp->fs->n_rootdir) { /* Report EOT if it reached end of static table */ return FR_NO_FILE; + } } else { /* Dynamic table */ - if (((i / (SS(dp->fs) / SZ_DIR)) & (dp->fs->csize - 1)) == 0) { /* Cluster changed? */ + if (((i / (SS(dp->fs) / SZ_DIR)) & (dp->fs->csize - 1U)) == 0U) { /* Cluster changed? */ clst = get_fat(dp->fs, dp->clust); /* Get next cluster */ - if (clst <= 1) return FR_INT_ERR; - if (clst == 0xFFFFFFFF) return FR_DISK_ERR; + if (clst <= 1U) { + return FR_INT_ERR; + } + if (clst == 0xFFFFFFFFU) { + return FR_DISK_ERR; + } if (clst >= dp->fs->n_fatent) { /* If it reached end of dynamic table, */ #if !_FS_READONLY UINT c; - if (!stretch) return FR_NO_FILE; /* If do not stretch, report EOT */ + if (stretch == ((s32)0)) { + return FR_NO_FILE; /* If do not stretch, report EOT */ + } clst = create_chain(dp->fs, dp->clust); /* Stretch cluster chain */ - if (clst == 0) return FR_DENIED; /* No free cluster */ - if (clst == 1) return FR_INT_ERR; - if (clst == 0xFFFFFFFF) return FR_DISK_ERR; + if (clst == 0U) { + return FR_DENIED; /* No free cluster */ + } + if (clst == 1U) { + return FR_INT_ERR; + } + if (clst == 0xFFFFFFFFU) { + return FR_DISK_ERR; + } /* Clean-up stretched table */ - if (sync_window(dp->fs)) return FR_DISK_ERR;/* Flush disk access window */ + if ((sync_window(dp->fs)) != 0U) { + return FR_DISK_ERR;/* Flush disk access window */ + } mem_set(dp->fs->win, 0, SS(dp->fs)); /* Clear window buffer */ dp->fs->winsect = clust2sect(dp->fs, clst); /* Cluster start sector */ - for (c = 0; c < dp->fs->csize; c++) { /* Fill the new cluster with 0 */ - dp->fs->wflag = 1; - if (sync_window(dp->fs)) return FR_DISK_ERR; + for (c = 0U; c < dp->fs->csize; c++) { /* Fill the new cluster with 0 */ + dp->fs->wflag = 1U; + if ((sync_window(dp->fs)) != 0U) { + return FR_DISK_ERR; + } dp->fs->winsect++; } dp->fs->winsect -= c; /* Rewind window offset */ #else - if (!stretch) return FR_NO_FILE; /* If do not stretch, report EOT (this is to suppress warning) */ + if (stretch == ((s32)0U)) { + return FR_NO_FILE; /* If do not stretch, report EOT (this is to suppress warning) */ + } return FR_NO_FILE; /* Report EOT */ #endif } @@ -1218,7 +1322,7 @@ FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could } dp->index = (WORD)i; /* Current index */ - dp->dir = dp->fs->win + (i % (SS(dp->fs) / SZ_DIR)) * SZ_DIR; /* Current entry in the window */ + dp->dir = dp->fs->win + ((i % (SS(dp->fs) / SZ_DIR)) * SZ_DIR); /* Current entry in the window */ return FR_OK; } @@ -1241,21 +1345,28 @@ FRESULT dir_alloc ( UINT n; - res = dir_sdi(dp, 0); + res = dir_sdi(dp, 0U); if (res == FR_OK) { - n = 0; + n = 0U; do { res = move_window(dp->fs, dp->sect); - if (res != FR_OK) break; - if (dp->dir[0] == DDE || dp->dir[0] == 0) { /* Is it a blank entry? */ - if (++n == nent) break; /* A block of contiguous entries is found */ + if (res != FR_OK) { + break; + } + if ((dp->dir[0] == DDE) || (dp->dir[0] == 0U)) { /* Is it a blank entry? */ + n += (UINT)1; + if (n == nent) { + break; /* A block of contiguous entries is found */ + } } else { - n = 0; /* Not a blank entry. Restart to search */ + n = 0U; /* Not a blank entry. Restart to search */ } res = dir_next(dp, 1); /* Next entry with table stretch enabled */ } while (res == FR_OK); } - if (res == FR_NO_FILE) res = FR_DENIED; /* No directory entry to allocate */ + if (res == FR_NO_FILE) { + res = FR_DENIED; /* No directory entry to allocate */ + } return res; } #endif @@ -1275,9 +1386,10 @@ DWORD ld_clust ( { DWORD cl; - cl = LD_WORD(dir+DIR_FstClusLO); - if (fs->fs_type == FS_FAT32) - cl |= (DWORD)LD_WORD(dir+DIR_FstClusHI) << 16; + cl = (DWORD)LD_WORD(dir+DIR_FstClusLO); + if (fs->fs_type == FS_FAT32) { + cl |= (DWORD)(LD_WORD(dir+DIR_FstClusHI)) << 16; + } return cl; } @@ -1307,7 +1419,7 @@ const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}; /* Offset of LFN char static -int cmp_lfn ( /* 1:Matched, 0:Not matched */ +s32 cmp_lfn ( /* 1:Matched, 0:Not matched */ WCHAR* lfnbuf, /* Pointer to the LFN to be compared */ BYTE* dir /* Pointer to the directory entry containing a part of LFN */ ) @@ -1325,12 +1437,15 @@ int cmp_lfn ( /* 1:Matched, 0:Not matched */ if (i >= _MAX_LFN || wc != ff_wtoupper(lfnbuf[i++])) /* Compare it */ return 0; /* Not matched */ } else { - if (uc != 0xFFFF) return 0; /* Check filler */ + if (uc != 0xFFFF) { + return 0; /* Check filler */ + } } } while (++s < 13); /* Repeat until all characters in the entry are checked */ - if ((dir[LDIR_Ord] & LLE) && wc && lfnbuf[i]) /* Last segment matched but different length */ + if ((dir[LDIR_Ord] & LLE) && wc && lfnbuf[i]) { /* Last segment matched but different length */ return 0; + } return 1; /* The part of LFN matched */ } @@ -1338,7 +1453,7 @@ int cmp_lfn ( /* 1:Matched, 0:Not matched */ static -int pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */ +s32 pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */ WCHAR* lfnbuf, /* Pointer to the Unicode-LFN buffer */ BYTE* dir /* Pointer to the directory entry */ ) @@ -1353,15 +1468,21 @@ int pick_lfn ( /* 1:Succeeded, 0:Buffer overflow */ do { uc = LD_WORD(dir+LfnOfs[s]); /* Pick an LFN character from the entry */ if (wc) { /* Last character has not been processed */ - if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ + if (i >= _MAX_LFN) { + return 0; /* Buffer overflow? */ + } lfnbuf[i++] = wc = uc; /* Store it */ } else { - if (uc != 0xFFFF) return 0; /* Check filler */ + if (uc != 0xFFFF) { + return 0; /* Check filler */ + } } } while (++s < 13); /* Read all character in the entry */ if (dir[LDIR_Ord] & LLE) { /* Put terminator if it is the last LFN part */ - if (i >= _MAX_LFN) return 0; /* Buffer overflow? */ + if (i >= _MAX_LFN) { + return 0; /* Buffer overflow? */ + } lfnbuf[i] = 0; } @@ -1390,11 +1511,17 @@ void fit_lfn ( i = (ord - 1) * 13; /* Get offset in the LFN buffer */ s = wc = 0; do { - if (wc != 0xFFFF) wc = lfnbuf[i++]; /* Get an effective character */ + if (wc != 0xFFFF) { + wc = lfnbuf[i++]; /* Get an effective character */ + } ST_WORD(dir+LfnOfs[s], wc); /* Put it */ - if (!wc) wc = 0xFFFF; /* Padding characters following last character */ + if (!wc) { + wc = 0xFFFF; /* Padding characters following last character */ + } } while (++s < 13); - if (wc == 0xFFFF || !lfnbuf[i]) ord |= LLE; /* Bottom LFN part is the start of LFN sequence */ + if (wc == 0xFFFF || !lfnbuf[i]) { + ord |= LLE; /* Bottom LFN part is the start of LFN sequence */ + } dir[LDIR_Ord] = ord; /* Set the LFN order */ } @@ -1431,7 +1558,9 @@ void gen_numname ( for (i = 0; i < 16; i++) { sr = (sr << 1) + (wc & 1); wc >>= 1; - if (sr & 0x10000) sr ^= 0x11021; + if (sr & 0x10000) { + sr ^= 0x11021; + } } } seq = (UINT)sr; @@ -1441,7 +1570,9 @@ void gen_numname ( i = 7; do { c = (seq % 16) + '0'; - if (c > '9') c += 7; + if (c > '9') { + c += 7; + } ns[i--] = c; seq /= 16; } while (seq); @@ -1450,7 +1581,9 @@ void gen_numname ( /* Append the number */ for (j = 0; j < i && dst[j] != ' '; j++) { if (IsDBCS1(dst[j])) { - if (j == i - 1) break; + if (j == i - 1) { + break; + } j++; } } @@ -1493,50 +1626,58 @@ FRESULT dir_find ( ) { FRESULT res; - BYTE c, *dir; + BYTE c, *directory; #if _USE_LFN BYTE a, ord, sum; #endif - res = dir_sdi(dp, 0); /* Rewind directory object */ - if (res != FR_OK) return res; + res = dir_sdi(dp, 0U); /* Rewind directory object */ + if (res == FR_OK) { #if _USE_LFN ord = sum = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ #endif do { res = move_window(dp->fs, dp->sect); - if (res != FR_OK) break; - dir = dp->dir; /* Ptr to the directory entry of current index */ - c = dir[DIR_Name]; - if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ + if (res != FR_OK) { + break; + } + directory = dp->dir; /* Ptr to the directory entry of current index */ + c = *(directory+DIR_Name); + if (c == 0U) { res = FR_NO_FILE; break; } /* Reached to end of table */ #if _USE_LFN /* LFN configuration */ - a = dir[DIR_Attr] & AM_MASK; + a = directory[DIR_Attr] & AM_MASK; if (c == DDE || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ ord = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ } else { if (a == AM_LFN) { /* An LFN entry is found */ if (dp->lfn) { if (c & LLE) { /* Is it start of LFN sequence? */ - sum = dir[LDIR_Chksum]; + sum = directory[LDIR_Chksum]; c &= ~LLE; ord = c; /* LFN start order */ dp->lfn_idx = dp->index; /* Start index of LFN */ } /* Check validity of the LFN entry and compare it with given name */ - ord = (c == ord && sum == dir[LDIR_Chksum] && cmp_lfn(dp->lfn, dir)) ? ord - 1 : 0xFF; + ord = (c == ord && sum == directory[LDIR_Chksum] && cmp_lfn(dp->lfn, dir)) ? ord - 1 : 0xFF; } } else { /* An SFN entry is found */ - if (!ord && sum == sum_sfn(dir)) break; /* LFN matched? */ - if (!(dp->fn[NS] & NS_LOSS) && !mem_cmp(dir, dp->fn, 11)) break; /* SFN matched? */ + if (!ord && sum == sum_sfn(directory)) { + break; /* LFN matched? */ + } + if (!(dp->fn[NS] & NS_LOSS) && !mem_cmp(dir, dp->fn, 11)) { + break; /* SFN matched? */ + } ord = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ } } #else /* Non LFN configuration */ - if (!(dir[DIR_Attr] & AM_VOL) && !mem_cmp(dir, dp->fn, 11)) /* Is it a valid entry? */ + if (((!mem_cmp(directory, dp->fn, 11U)) != 0)&&((!(*(directory+DIR_Attr) & AM_VOL)) != 0U)) { /* Is it a valid entry? */ break; + } #endif res = dir_next(dp, 0); /* Next entry */ } while (res == FR_OK); + } return res; } @@ -1551,50 +1692,58 @@ FRESULT dir_find ( static FRESULT dir_read ( DIR* dp, /* Pointer to the directory object */ - int vol /* Filtered by 0:file/directory or 1:volume label */ + s32 vol /* Filtered by 0:file/directory or 1:volume label */ ) { FRESULT res; - BYTE a, c, *dir; + BYTE a, c, *directory; #if _USE_LFN BYTE ord = 0xFF, sum = 0xFF; #endif res = FR_NO_FILE; - while (dp->sect) { + while ((dp->sect) != 0U) { res = move_window(dp->fs, dp->sect); - if (res != FR_OK) break; - dir = dp->dir; /* Ptr to the directory entry of current index */ - c = dir[DIR_Name]; - if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ - a = dir[DIR_Attr] & AM_MASK; + if (res != FR_OK) { + break; + } + directory = dp->dir; /* Ptr to the directory entry of current index */ + c = *(directory+DIR_Name); + if (c == 0U) { res = FR_NO_FILE; break; } /* Reached to end of table */ + a = (*(directory+DIR_Attr)) & AM_MASK; #if _USE_LFN /* LFN configuration */ - if (c == DDE || (!_FS_RPATH && c == '.') || (int)(a == AM_VOL) != vol) { /* An entry without valid data */ - ord = 0xFF; + if (c == DDE || (!_FS_RPATH && c == '.') || (s32)(a == AM_VOL) != vol) { /* An entry without valid data */ + ord = 0xFFU; } else { if (a == AM_LFN) { /* An LFN entry is found */ if (c & LLE) { /* Is it start of LFN sequence? */ - sum = dir[LDIR_Chksum]; + sum = directory[LDIR_Chksum]; c &= ~LLE; ord = c; dp->lfn_idx = dp->index; } /* Check LFN validity and capture it */ - ord = (c == ord && sum == dir[LDIR_Chksum] && pick_lfn(dp->lfn, dir)) ? ord - 1 : 0xFF; + ord = (c == ord && sum == directory[LDIR_Chksum] && pick_lfn(dp->lfn, directory)) ? ord - 1 : 0xFF; } else { /* An SFN entry is found */ - if (ord || sum != sum_sfn(dir)) /* Is there a valid LFN? */ - dp->lfn_idx = 0xFFFF; /* It has no LFN. */ + if (ord || sum != sum_sfn(directory)) { /* Is there a valid LFN? */ + dp->lfn_idx = 0xFFFFU; /* It has no LFN. */ + } break; } } #else /* Non LFN configuration */ - if (c != DDE && (_FS_RPATH || c != '.') && a != AM_LFN && (int)(a == AM_VOL) == vol) /* Is it a valid entry? */ + if (((c != DDE) != 0U) && ((_FS_RPATH || (c != (BYTE)'.')) != 0) && (a != AM_LFN) && (((a == AM_VOL) == vol)!= 0U)) { /* Is it a valid entry? */ break; + } #endif res = dir_next(dp, 0); /* Next entry */ - if (res != FR_OK) break; + if (res != FR_OK) { + break; + } } - if (res != FR_OK) dp->sect = 0; + if (res != FR_OK) { + dp->sect = 0U; + } return res; } @@ -1622,18 +1771,25 @@ FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many fn = dp->fn; lfn = dp->lfn; mem_cpy(sn, fn, 12); - if (_FS_RPATH && (sn[NS] & NS_DOT)) /* Cannot create dot entry */ + if (_FS_RPATH && (sn[NS] & NS_DOT)) { /* Cannot create dot entry */ return FR_INVALID_NAME; + } if (sn[NS] & NS_LOSS) { /* When LFN is out of 8.3 format, generate a numbered name */ fn[NS] = 0; dp->lfn = 0; /* Find only SFN */ for (n = 1; n < 100; n++) { gen_numname(fn, sn, lfn, n); /* Generate a numbered name */ res = dir_find(dp); /* Check if the name collides with existing SFN */ - if (res != FR_OK) break; + if (res != FR_OK) { + break; + } + } + if (n == 100) { + return FR_DENIED; /* Abort if too many collisions */ + } + if (res != FR_NO_FILE) { + return res; /* Abort if the result is other than 'not collided' */ } - if (n == 100) return FR_DENIED; /* Abort if too many collisions */ - if (res != FR_NO_FILE) return res; /* Abort if the result is other than 'not collided' */ fn[NS] = sn[NS]; dp->lfn = lfn; } @@ -1651,7 +1807,9 @@ FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many sum = sum_sfn(dp->fn); /* Sum value of the SFN tied to the LFN */ do { /* Store LFN entries in bottom first */ res = move_window(dp->fs, dp->sect); - if (res != FR_OK) break; + if (res != FR_OK) { + break; + } fit_lfn(dp->lfn, dp->dir, (BYTE)nent, sum); dp->fs->wflag = 1; res = dir_next(dp, 0); /* Next entry */ @@ -1659,18 +1817,18 @@ FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many } } #else /* Non LFN configuration */ - res = dir_alloc(dp, 1); /* Allocate an entry for SFN */ + res = dir_alloc(dp, 1U); /* Allocate an entry for SFN */ #endif if (res == FR_OK) { /* Set SFN entry */ res = move_window(dp->fs, dp->sect); if (res == FR_OK) { mem_set(dp->dir, 0, SZ_DIR); /* Clean the entry */ - mem_cpy(dp->dir, dp->fn, 11); /* Put SFN */ + mem_cpy(dp->dir, dp->fn, 11U); /* Put SFN */ #if _USE_LFN - dp->dir[DIR_NTres] = dp->fn[NS] & (NS_BODY | NS_EXT); /* Put NT flag */ + dp->dir[DIR_NTres] = *(dp->fn+NS) & (NS_BODY | NS_EXT); /* Put NT flag */ #endif - dp->fs->wflag = 1; + dp->fs->wflag = 1U; } } @@ -1691,32 +1849,39 @@ FRESULT dir_remove ( /* FR_OK: Successful, FR_DISK_ERR: A disk error */ ) { FRESULT res; + WORD temp; #if _USE_LFN /* LFN configuration */ UINT i; - i = dp->index; /* SFN index */ - res = dir_sdi(dp, (dp->lfn_idx == 0xFFFF) ? i : dp->lfn_idx); /* Goto the SFN or top of the LFN entries */ + res = dir_sdi(dp, (WORD)((dp->lfn_idx == 0xFFFF) ? i : dp->lfn_idx)); /* Goto the SFN or top of the LFN entries */ if (res == FR_OK) { do { res = move_window(dp->fs, dp->sect); - if (res != FR_OK) break; + if (res != FR_OK) { + break; + } mem_set(dp->dir, 0, SZ_DIR); /* Clear and mark the entry "deleted" */ *dp->dir = DDE; dp->fs->wflag = 1; - if (dp->index >= i) break; /* When reached SFN, all entries of the object has been deleted. */ + if (dp->index >= i) { + break; /* When reached SFN, all entries of the object has been deleted. */ + } res = dir_next(dp, 0); /* Next entry */ } while (res == FR_OK); - if (res == FR_NO_FILE) res = FR_INT_ERR; + if (res == FR_NO_FILE) { + res = FR_INT_ERR; + } } #else /* Non LFN configuration */ - res = dir_sdi(dp, dp->index); + temp = dp->index; + res = dir_sdi(dp, temp); if (res == FR_OK) { res = move_window(dp->fs, dp->sect); if (res == FR_OK) { mem_set(dp->dir, 0, SZ_DIR); /* Clear and mark the entry "deleted" */ *dp->dir = DDE; - dp->fs->wflag = 1; + dp->fs->wflag = 1U; } } #endif @@ -1743,28 +1908,41 @@ void get_fileinfo ( /* No return code */ p = fno->fname; - if (dp->sect) { /* Get SFN */ + if (dp->sect!=((DWORD)0U)) { /* Get SFN */ BYTE *dir = dp->dir; - i = 0; - while (i < 11) { /* Copy name body and extension */ - c = (TCHAR)dir[i++]; - if (c == ' ') continue; /* Skip padding spaces */ - if (c == NDDE) c = (TCHAR)DDE; /* Restore replaced DDE character */ - if (i == 9) *p++ = '.'; /* Insert a . if extension is exist */ + i = 0U; + while (i < 11U) { /* Copy name body and extension */ + c = (TCHAR)(*(dir+i)); + i += (UINT)1; + if (c == ' ') { + continue; /* Skip padding spaces */ + } + if (c == (BYTE)NDDE) { + c = (TCHAR)DDE; /* Restore replaced DDE character */ + } + if (i == (UINT)9) { + *p = '.'; /* Insert a . if extension is exist */ + p += 1U; + } #if _USE_LFN - if (IsUpper(c) && (dir[DIR_NTres] & (i >= 9 ? NS_EXT : NS_BODY))) + if (IsUpper(c) && (dir[DIR_NTres] & (i >= 9U ? NS_EXT : NS_BODY))) { c += 0x20; /* To lower */ + } #if _LFN_UNICODE - if (IsDBCS1(c) && i != 8 && i != 11 && IsDBCS2(dir[i])) + if (IsDBCS1(c) && i != 8 && i != 11 && IsDBCS2(dir[i])) { c = c << 8 | dir[i++]; + } c = ff_convert(c, 1); /* OEM -> Unicode */ - if (!c) c = '?'; + if (c == ((TCHAR)0U)) { + c = '?'; + } #endif #endif - *p++ = c; + *p = c; + p += 1U; } - fno->fattrib = dir[DIR_Attr]; /* Attribute */ + fno->fattrib = (*(dir+DIR_Attr)); /* Attribute */ fno->fsize = LD_DWORD(dir+DIR_FileSize); /* Size */ fno->fdate = LD_WORD(dir+DIR_WrtDate); /* Date */ fno->ftime = LD_WORD(dir+DIR_WrtTime); /* Time */ @@ -1782,8 +1960,9 @@ void get_fileinfo ( /* No return code */ #if !_LFN_UNICODE w = ff_convert(w, 0); /* Unicode -> OEM */ if (!w) { i = 0; break; } /* No LFN if it could not be converted */ - if (_DF1S && w >= 0x100) /* Put 1st byte if it is a DBC (always false on SBCS cfg) */ + if (DF1S && w >= 0x100) { /* Put 1st byte if it is a DBC (always false on SBCS cfg) */ p[i++] = (TCHAR)(w >> 8); + } #endif if (i >= fno->lfsize - 1) { i = 0; break; } /* No LFN if buffer overflow */ p[i++] = (TCHAR)w; @@ -1812,7 +1991,7 @@ FRESULT create_name ( BYTE b, cf; WCHAR w, *lfn; UINT i, ni, si, di; - const TCHAR *p; + const BYTE *p; /* Create LFN in Unicode */ for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Strip duplicated separator */ @@ -1820,22 +1999,29 @@ FRESULT create_name ( si = di = 0; for (;;) { w = p[si++]; /* Get a character */ - if (w < ' ' || w == '/' || w == '\\') break; /* Break on end of segment */ - if (di >= _MAX_LFN) /* Reject too long name */ + if (w < ' ' || w == '/' || w == '\\') { + break; /* Break on end of segment */ + } + if (di >= _MAX_LFN) { /* Reject too long name */ return FR_INVALID_NAME; + } #if !_LFN_UNICODE w &= 0xFF; if (IsDBCS1(w)) { /* Check if it is a DBC 1st byte (always false on SBCS cfg) */ b = (BYTE)p[si++]; /* Get 2nd byte */ - if (!IsDBCS2(b)) + if (!IsDBCS2(b)) { return FR_INVALID_NAME; /* Reject invalid sequence */ + } w = (w << 8) + b; /* Create a DBC */ } w = ff_convert(w, 1); /* Convert ANSI/OEM to Unicode */ - if (!w) return FR_INVALID_NAME; /* Reject invalid code */ + if (!w) { + return FR_INVALID_NAME; /* Reject invalid code */ + } #endif - if (w < 0x80 && chk_chr("\"*:<>\?|\x7F", w)) /* Reject illegal characters for LFN */ + if (w < 0x80 && chk_chr("\"*:<>\?|\x7F", w)) {/* Reject illegal characters for LFN */ return FR_INVALID_NAME; + } lfn[di++] = w; /* Store the Unicode character */ } *path = &p[si]; /* Return pointer to the next segment */ @@ -1852,23 +2038,33 @@ FRESULT create_name ( #endif while (di) { /* Strip trailing spaces and dots */ w = lfn[di-1]; - if (w != ' ' && w != '.') break; + if (w != ' ' && w != '.') { + break; + } di--; } - if (!di) return FR_INVALID_NAME; /* Reject nul string */ + if (!di) { + return FR_INVALID_NAME; /* Reject nul string */ + } lfn[di] = 0; /* LFN is created */ /* Create SFN in directory form */ mem_set(dp->fn, ' ', 11); for (si = 0; lfn[si] == ' ' || lfn[si] == '.'; si++) ; /* Strip leading spaces and dots */ - if (si) cf |= NS_LOSS | NS_LFN; - while (di && lfn[di - 1] != '.') di--; /* Find extension (di<=si: no extension) */ + if (si) { + cf |= NS_LOSS | NS_LFN; + } + while (di && lfn[di - 1] != '.') { + di--; /* Find extension (di<=si: no extension) */ + } b = i = 0; ni = 8; for (;;) { w = lfn[si++]; /* Get an LFN character */ - if (!w) break; /* Break on end of the LFN */ + if ((!w) != 0U) { + break; /* Break on end of the LFN */ + } if (w == ' ' || (w == '.' && si != di)) { /* Remove spaces and dots */ cf |= NS_LOSS | NS_LFN; continue; } @@ -1877,8 +2073,12 @@ FRESULT create_name ( if (ni == 11) { /* Long extension */ cf |= NS_LOSS | NS_LFN; break; } - if (si != di) cf |= NS_LOSS | NS_LFN; /* Out of 8.3 format */ - if (si > di) break; /* No extension */ + if (si != di) { + cf |= NS_LOSS | NS_LFN; /* Out of 8.3 format */ + } + if (si > di) { + break; /* No extension */ + } si = di; i = 8; ni = 11; /* Enter extension section */ b <<= 2; continue; } @@ -1886,14 +2086,16 @@ FRESULT create_name ( if (w >= 0x80) { /* Non ASCII character */ #ifdef _EXCVT w = ff_convert(w, 0); /* Unicode -> OEM code */ - if (w) w = ExCvt[w - 0x80]; /* Convert extended character to upper (SBCS) */ + if (w) { + w = ExCvt[w - 0x80]; /* Convert extended character to upper (SBCS) */ + } #else w = ff_convert(ff_wtoupper(w), 0); /* Upper converted Unicode -> OEM code */ #endif cf |= NS_LFN; /* Force create LFN entry */ } - if (_DF1S && w >= 0x100) { /* Double byte character (always false on SBCS cfg) */ + if (DF1S && w >= 0x100) { /* Double byte character (always false on SBCS cfg) */ if (i >= ni - 1) { cf |= NS_LOSS | NS_LFN; i = ni; continue; } @@ -1914,14 +2116,23 @@ FRESULT create_name ( dp->fn[i++] = (BYTE)w; } - if (dp->fn[0] == DDE) dp->fn[0] = NDDE; /* If the first character collides with deleted mark, replace it with 0x05 */ + if (dp->fn[0] == DDE) { + dp->fn[0] = NDDE; /* If the first character collides with deleted mark, replace it with 0x05 */ + } - if (ni == 8) b <<= 2; - if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capitals */ + if (ni == 8) { + b <<= 2; + } + if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) { /* Create LFN entry when there are composite capitals */ cf |= NS_LFN; + } if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended character, NT flags are created */ - if ((b & 0x03) == 0x01) cf |= NS_EXT; /* NT flag (Extension has only small capital) */ - if ((b & 0x0C) == 0x04) cf |= NS_BODY; /* NT flag (Filename has only small capital) */ + if ((b & 0x03) == 0x01) { + cf |= NS_EXT; /* NT flag (Extension has only small capital) */ + } + if ((b & 0x0C) == 0x04) { + cf |= NS_BODY; /* NT flag (Filename has only small capital) */ + } } dp->fn[NS] = cf; /* SFN is created */ @@ -1932,74 +2143,100 @@ FRESULT create_name ( #else /* Non-LFN configuration */ BYTE b, c, d, *sfn; UINT ni, si, i; - const char *p; - + const BYTE *p; + p = *path; /* Create file name in directory form */ - for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Strip duplicated separator */ + for (; (*p == (BYTE)'/') || (*p == (BYTE)'\\'); ) {p++;}/* Strip duplicated separator */ sfn = dp->fn; - mem_set(sfn, ' ', 11); - si = i = b = 0; ni = 8; + mem_set(sfn, (s32)' ', 11U); + si = 0U; + i = 0U; + b = 0U; ni = 8U; #if _FS_RPATH if (p[si] == '.') { /* Is this a dot entry? */ for (;;) { c = (BYTE)p[si++]; - if (c != '.' || si >= 3) break; + if (c != '.' || si >= 3) { + break; + } sfn[i++] = c; } - if (c != '/' && c != '\\' && c > ' ') return FR_INVALID_NAME; + if (c != '/' && c != '\\' && c > ' ') { + return FR_INVALID_NAME; + } *path = &p[si]; /* Return pointer to the next segment */ sfn[NS] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of path */ return FR_OK; } #endif for (;;) { - c = (BYTE)p[si++]; - if (c <= ' ' || c == '/' || c == '\\') break; /* Break on end of segment */ - if (c == '.' || i >= ni) { - if (ni != 8 || c != '.') return FR_INVALID_NAME; - i = 8; ni = 11; - b <<= 2; continue; + c = ((BYTE)(*(p+si))); + si+=1U; + if (((c <= (BYTE)' ') != 0) || ((c == (BYTE)'/') != 0) || ((c == (BYTE)'\\') != 0)) { + break; /* Break on end of segment */ } - if (c >= 0x80) { /* Extended character? */ - b |= 3; /* Eliminate NT flag */ + if ((c == (BYTE)'.') || (i >= ni)) { + if ((ni != 8U) || (c != (BYTE)'.')) { + return FR_INVALID_NAME; + } + i = 8U; ni = 11U; + b <<= 2U; continue; + } + if (c >= 0x80U) { /* Extended character? */ + b |= 3U; /* Eliminate NT flag */ #ifdef _EXCVT - c = ExCvt[c - 0x80]; /* To upper extended characters (SBCS cfg) */ + c = ExCvt[c - 0x80U]; /* To upper extended characters (SBCS cfg) */ #else -#if !_DF1S +#if !DF1S return FR_INVALID_NAME; /* Reject extended characters (ASCII cfg) */ #endif #endif } if (IsDBCS1(c)) { /* Check if it is a DBC 1st byte (always false on SBCS cfg) */ - d = (BYTE)p[si++]; /* Get 2nd byte */ - if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */ + d = ((BYTE)(*(p+si))); /* Get 2nd byte */ + si+=1U; + if ((!IsDBCS2(d)) || (i >= (ni - 1))) { /* Reject invalid DBC */ return FR_INVALID_NAME; - sfn[i++] = c; - sfn[i++] = d; + } + *(sfn+i) = c; + i+=1U; + *(sfn+i) = d; + i+=1U; } else { /* Single byte code */ - if (chk_chr("\"*+,:;<=>\?[]|\x7F", c)) /* Reject illegal chrs for SFN */ + if ((chk_chr("\"*+,:;<=>\?[]|\x7F", c)) != 0) { /* Reject illegal chrs for SFN */ return FR_INVALID_NAME; + } if (IsUpper(c)) { /* ASCII large capital? */ - b |= 2; + b |= 2U; } else { if (IsLower(c)) { /* ASCII small capital? */ - b |= 1; c -= 0x20; + b |= 1U; c -= 0x20U; } } - sfn[i++] = c; + *(sfn+i) = c; + i+=1U; } } - *path = &p[si]; /* Return pointer to the next segment */ - c = (c <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ + *path = (p+si); /* Return pointer to the next segment */ + c = (c <= (BYTE)' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ - if (!i) return FR_INVALID_NAME; /* Reject nul string */ - if (sfn[0] == DDE) sfn[0] = NDDE; /* When first character collides with DDE, replace it with 0x05 */ + if (i == (UINT)0U){ + return FR_INVALID_NAME; /* Reject nul string */ + } + if ((*(sfn+0)) == DDE){ + *(sfn+0) = NDDE; /* When first char collides with 0xE5, replace it with 0x05 */ + } + if (ni == 8U){ + b <<= 2U; + } + if ((b & 0x03U) == 0x01U){ + c |= NS_EXT; /* NT flag (Name extension has only small capital) */ + } + if ((b & 0x0CU) == 0x04U){ + c |= NS_BODY; /* NT flag (Name body has only small capital) */ + } - if (ni == 8) b <<= 2; - if ((b & 0x03) == 0x01) c |= NS_EXT; /* NT flag (Name extension has only small capital) */ - if ((b & 0x0C) == 0x04) c |= NS_BODY; /* NT flag (Name body has only small capital) */ - - sfn[NS] = c; /* Store NT flag, File name is created */ + *(sfn+NS) = c; /* Store NT flag, File name is created */ return FR_OK; #endif @@ -2019,48 +2256,58 @@ FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */ ) { FRESULT res; - BYTE *dir, ns; - + BYTE *directory, NameStatus; + TCHAR Status = *path; + const TCHAR *LocPath = path; #if _FS_RPATH - if (*path == '/' || *path == '\\') { /* There is a heading separator */ - path++; dp->sclust = 0; /* Strip it and start from the root directory */ - } else { /* No heading separator */ - dp->sclust = dp->fs->cdir; /* Start from the current directory */ + if (*LocPath == '/' || *LocPath == '\\') { /* There is a heading separator */ + LocPath++; dp->sclust = 0; /* Strip it and start from the root dir */ + } else { /* No heading separator */ + dp->sclust = dp->fs->cdir; /* Start from the current dir */ } #else - if (*path == '/' || *path == '\\') /* Strip heading separator if exist */ - path++; - dp->sclust = 0; /* Always start from the root directory */ + if ((*LocPath == '/') || (*LocPath == '\\')) { /* Strip heading separator if exist */ + LocPath++; + } + dp->sclust = 0U; /* Start from the root dir */ #endif - - if ((UINT)*path < ' ') { /* Null path name is the origin directory itself */ - res = dir_sdi(dp, 0); - dp->dir = 0; + Status = *LocPath; + if ((UINT)Status < (UINT)' ') { /* Null path name is the origin directory itself */ + res = dir_sdi(dp, 0U); + dp->dir = 0U; } else { /* Follow path */ for (;;) { - res = create_name(dp, &path); /* Get a segment name of the path */ - if (res != FR_OK) break; + res = create_name(dp, &LocPath); /* Get a segment name of the path */ + if (res != FR_OK) { + break; + } res = dir_find(dp); /* Find an object with the sagment name */ - ns = dp->fn[NS]; + NameStatus = *(dp->fn+NS); if (res != FR_OK) { /* Failed to find the object */ if (res == FR_NO_FILE) { /* Object is not found */ - if (_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exist, */ - dp->sclust = 0; dp->dir = 0; /* it is the root directory and stay there */ - if (!(ns & NS_LAST)) continue; /* Continue to follow if not last segment */ + if (_FS_RPATH && ((NameStatus & NS_DOT) != 0U)) { /* If dot entry is not exist, */ + dp->sclust = 0U; dp->dir = 0U; /* it is the root directory and stay there */ + if ((!(NameStatus & NS_LAST))!= 0U) { + continue; /* Continue to follow if not last segment */ + } res = FR_OK; /* Ended at the root directroy. Function completed. */ } else { /* Could not find the object */ - if (!(ns & NS_LAST)) res = FR_NO_PATH; /* Adjust error code if not last segment */ + if ((!(NameStatus & NS_LAST)) != 0U) { + res = FR_NO_PATH; /* Adjust error code if not last segment */ + } } } break; } - if (ns & NS_LAST) break; /* Last segment matched. Function completed. */ - dir = dp->dir; /* Follow the sub-directory */ - if (!(dir[DIR_Attr] & AM_DIR)) { /* It is not a sub-directory and cannot follow */ + if ((NameStatus & NS_LAST) != 0U) { + break; /* Last segment matched. Function completed. */ + } + directory = dp->dir; /* Follow the sub-directory */ + if ((!((*(directory+DIR_Attr)) & AM_DIR)) != 0U) { /* It is not a sub-directory and cannot follow */ res = FR_NO_PATH; break; } - dp->sclust = ld_clust(dp->fs, dir); + dp->sclust = (DWORD)ld_clust(dp->fs, directory); } } @@ -2075,24 +2322,27 @@ FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */ /*-----------------------------------------------------------------------*/ static -int get_ldnumber ( /* Returns logical drive number (-1:invalid drive) */ +s32 get_ldnumber ( /* Returns logical drive number (-1:invalid drive) */ const TCHAR** path /* Pointer to pointer to the path name */ ) { const TCHAR *tp, *tt; UINT i; - int vol = -1; + s32 vol = -1; - if (*path) { /* If the pointer is not a null */ - for (tt = *path; (UINT)*tt >= (_USE_LFN ? ' ' : '!') && *tt != ':'; tt++) ; /* Find ':' in the path */ + if ((*path)!=NULL) { /* If the pointer is not a null */ + tt = *path; + for (; (*tt >= '!') && (*tt != ':'); ) {tt += 1U;} /* Find ':' in the path */ if (*tt == ':') { /* If a ':' is exist in the path name */ tp = *path; - i = *tp++ - '0'; - if (i < 10 && tp == tt) { /* Is there a numeric drive id? */ + i = (*tp - '0'); + tp += 1U; + if ((i < 10U) && (tp == tt)) { /* Is there a numeric drive id? */ if (i < _VOLUMES) { /* If a drive id is found, get the value and strip it */ - vol = (int)i; - *path = ++tt; + vol = (s32)i; + tt += 1U; + *path = ((TCHAR *)tt); } } else { /* No numeric drive number */ #if _STR_VOLUME_ID /* Find string drive id */ @@ -2101,27 +2351,30 @@ int get_ldnumber ( /* Returns logical drive number (-1:invalid drive) */ char c; TCHAR tc; - i = 0; tt++; + i = 0; tt += 1U; do { sp = str[i]; tp = *path; do { /* Compare a string drive id with path name */ c = *sp++; tc = *tp++; - if (IsLower(tc)) tc -= 0x20; + if (IsLower(tc)) { + tc -= 0x20; + } } while (c && (TCHAR)c == tc); } while ((c || tp != tt) && ++i < _VOLUMES); /* Repeat for each id until pattern match */ if (i < _VOLUMES) { /* If a drive id is found, get the value and strip it */ - vol = (int)i; + vol = (s32)i; *path = tt; } #endif } - return vol; } + else { #if _FS_RPATH && _VOLUMES >= 2 - vol = CurrVol; /* Current drive */ + vol = CurrVol; /* Current drive */ #else - vol = 0; /* Drive 0 */ + vol = 0; /* Drive 0 */ #endif + } } return vol; } @@ -2139,19 +2392,23 @@ BYTE check_fs ( /* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a b DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */ ) { - fs->wflag = 0; fs->winsect = 0xFFFFFFFF; /* Invaidate window */ - if (move_window(fs, sect) != FR_OK) /* Load boot record */ - return 3; + fs->wflag = 0U; fs->winsect = 0xFFFFFFFFU; /* Invaidate window */ + if (move_window(fs, sect) != FR_OK) { /* Load boot record */ + return (BYTE)3; + } - if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55) /* Check boot record signature (always placed at offset 510 even if the sector size is >512) */ - return 2; + if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55U) { /* Check boot record signature (always placed at offset 510 even if the sector size is >512) */ + return (BYTE)2; + } - if ((LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ - return 0; - if ((LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ - return 0; + if ((LD_DWORD(&fs->win[BS_FilSysType]) & 0xFFFFFFU) == 0x544146U) { /* Check "FAT" string */ + return (BYTE)0; + } + if ((LD_DWORD(&fs->win[BS_FilSysType32]) & 0xFFFFFFU) == 0x544146U) { /* Check "FAT" string */ + return (BYTE)0; + } - return 1; + return (BYTE)1; } @@ -2168,8 +2425,9 @@ FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */ BYTE wmode /* !=0: Check write protection for write access */ ) { + static WORD Fsid; /* File system mount ID */ BYTE fmt; - int vol; + s32 vol; DSTATUS stat; DWORD bsect, fasize, tsect, sysect, nclst, szbfat; WORD nrsv; @@ -2177,22 +2435,25 @@ FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */ /* Get logical drive number from the path name */ - *rfs = 0; + (*rfs) = 0; vol = get_ldnumber(path); - if (vol < 0) return FR_INVALID_DRIVE; + if (vol < 0) {return FR_INVALID_DRIVE;} /* Check if the file system object is valid or not */ fs = FatFs[vol]; /* Get pointer to the file system object */ - if (!fs) return FR_NOT_ENABLED; /* Is the file system object available? */ + if ((!fs) != 0U) { + return FR_NOT_ENABLED; /* Is the file system object available? */ + } ENTER_FF(fs); /* Lock the volume */ *rfs = fs; /* Return pointer to the file system object */ - if (fs->fs_type) { /* If the volume has been mounted */ + if (fs->fs_type != 0U) { /* If the volume has been mounted */ stat = disk_status(fs->drv); - if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized */ - if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check write protection if needed */ + if ((!(stat & STA_NOINIT)) != 0U) { /* and the physical drive is kept initialized */ + if (!_FS_READONLY && (wmode != (BYTE)0U) && ((stat & STA_PROTECT) != (BYTE)0U)) {/* Check write protection if needed */ return FR_WRITE_PROTECTED; + } return FR_OK; /* The file system object is valid */ } } @@ -2200,108 +2461,143 @@ FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */ /* The file system object is not valid. */ /* Following code attempts to mount the volume. (analyze BPB and initialize the fs object) */ - fs->fs_type = 0; /* Clear the file system object */ + fs->fs_type = 0U; /* Clear the file system object */ fs->drv = LD2PD(vol); /* Bind the logical drive and a physical drive */ stat = disk_initialize(fs->drv); /* Initialize the physical drive */ - if (stat & STA_NOINIT) /* Check if the initialization succeeded */ + if ((stat & STA_NOINIT) != (BYTE)0U) { /* Check if the initialization succeeded */ return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */ - if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check disk write protection if needed */ + } + if (!_FS_READONLY && (wmode != (BYTE)0U)&& ((stat & STA_PROTECT) != (BYTE)0U)) { /* Check disk write protection if needed */ return FR_WRITE_PROTECTED; + } #if _MAX_SS != _MIN_SS /* Get sector size (multiple sector size cfg only) */ if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK - || SS(fs) < _MIN_SS || SS(fs) > _MAX_SS) return FR_DISK_ERR; + || SS(fs) < _MIN_SS || SS(fs) > _MAX_SS) { + return FR_DISK_ERR; + } #endif /* Find an FAT partition on the drive. Supports only generic partitioning, FDISK and SFD. */ - bsect = 0; + bsect = 0U; fmt = check_fs(fs, bsect); /* Load sector 0 and check if it is an FAT boot sector as SFD */ - if (fmt == 1 || (!fmt && (LD2PT(vol)))) { /* Not an FAT boot sector or forced partition number */ + if ((fmt == 1U) || (((!fmt) != (BYTE)0U) && ((LD2PT(vol)) != 0U))) { /* Not an FAT boot sector or forced partition number */ UINT i; DWORD br[4]; - for (i = 0; i < 4; i++) { /* Get partition offset */ - BYTE *pt = fs->win+MBR_Table + i * SZ_PTE; - br[i] = pt[4] ? LD_DWORD(&pt[8]) : 0; + for (i = 0U; i < 4U; i++) { /* Get partition offset */ + BYTE *pt = fs->win+MBR_Table + ((WORD)i * (WORD)SZ_PTE); + br[i] = ((*(pt+4)) != (BYTE)0U) ? LD_DWORD((pt+8U)) : 0U; } i = LD2PT(vol); /* Partition number: 0:auto, 1-4:forced */ - if (i) i--; + if (i != 0U) { + i--; + } do { /* Find an FAT volume */ bsect = br[i]; - fmt = bsect ? check_fs(fs, bsect) : 2; /* Check the partition */ - } while (!LD2PT(vol) && fmt && ++i < 4); + fmt = (bsect!=(DWORD)0U) ? check_fs(fs, bsect) : 2U; /* Check the partition */ + i += (UINT)1; + } while ((!LD2PT(vol)) && (fmt != (BYTE)0U)&& (i < 4U)); + } + if (fmt == 3U) { + return FR_DISK_ERR; /* An error occured in the disk I/O layer */ + } + if (fmt != 0U) { + return FR_NO_FILESYSTEM; /* No FAT volume is found */ } - if (fmt == 3) return FR_DISK_ERR; /* An error occured in the disk I/O layer */ - if (fmt) return FR_NO_FILESYSTEM; /* No FAT volume is found */ /* An FAT volume is found. Following code initializes the file system object */ - if (LD_WORD(fs->win+BPB_BytsPerSec) != SS(fs)) /* (BPB_BytsPerSec must be equal to the physical sector size) */ + if (LD_WORD(fs->win+BPB_BytsPerSec) != (WORD)SS(fs)) { /* (BPB_BytsPerSec must be equal to the physical sector size) */ return FR_NO_FILESYSTEM; + } - fasize = LD_WORD(fs->win+BPB_FATSz16); /* Number of sectors per FAT */ - if (!fasize) fasize = LD_DWORD(fs->win+BPB_FATSz32); + fasize = ((DWORD)LD_WORD(fs->win+BPB_FATSz16)); /* Number of sectors per FAT */ + if ((!fasize) != 0U) { + fasize = (DWORD)LD_DWORD(fs->win+BPB_FATSz32); + } fs->fsize = fasize; fs->n_fats = fs->win[BPB_NumFATs]; /* Number of FAT copies */ - if (fs->n_fats != 1 && fs->n_fats != 2) /* (Must be 1 or 2) */ + if ((fs->n_fats != 1U) && (fs->n_fats != 2U)) { /* (Must be 1 or 2) */ return FR_NO_FILESYSTEM; - fasize *= fs->n_fats; /* Number of sectors for FAT area */ + } + fasize *= (DWORD)fs->n_fats; /* Number of sectors for FAT area */ fs->csize = fs->win[BPB_SecPerClus]; /* Number of sectors per cluster */ - if (!fs->csize || (fs->csize & (fs->csize - 1))) /* (Must be power of 2) */ + if (((!fs->csize) != 0U) || ((fs->csize & (fs->csize - 1U)) != 0U)) { /* (Must be power of 2) */ return FR_NO_FILESYSTEM; + } fs->n_rootdir = LD_WORD(fs->win+BPB_RootEntCnt); /* Number of root directory entries */ - if (fs->n_rootdir % (SS(fs) / SZ_DIR)) /* (Must be sector aligned) */ + if ((fs->n_rootdir % (SS(fs) / SZ_DIR)) != 0U) { /* (Must be sector aligned) */ return FR_NO_FILESYSTEM; + } - tsect = LD_WORD(fs->win+BPB_TotSec16); /* Number of sectors on the volume */ - if (!tsect) tsect = LD_DWORD(fs->win+BPB_TotSec32); + tsect = ((DWORD)LD_WORD(fs->win+BPB_TotSec16)); /* Number of sectors on the volume */ + if ((!tsect) != 0U) { + tsect = (DWORD)LD_DWORD(fs->win+BPB_TotSec32); + } nrsv = LD_WORD(fs->win+BPB_RsvdSecCnt); /* Number of reserved sectors */ - if (!nrsv) return FR_NO_FILESYSTEM; /* (Must not be 0) */ + if ((!nrsv) != 0U) { + return FR_NO_FILESYSTEM; /* (Must not be 0) */ + } /* Determine the FAT sub type */ - sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / SZ_DIR); /* RSV+FAT+DIR */ - if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ - nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ - if (!nclst) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + sysect = (DWORD)nrsv + fasize + (fs->n_rootdir / (SS(fs) / SZ_DIR)); /* RSV+FAT+DIR */ + if (tsect < sysect) { + return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + } + nclst = (tsect - sysect) / ((DWORD)fs->csize); /* Number of clusters */ + if ((!nclst) != 0U) { + return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + } fmt = FS_FAT12; - if (nclst >= MIN_FAT16) fmt = FS_FAT16; - if (nclst >= MIN_FAT32) fmt = FS_FAT32; + if (nclst >= MIN_FAT16) { + fmt = FS_FAT16; + } + if (nclst >= MIN_FAT32) { + fmt = FS_FAT32; + } /* Boundaries and Limits */ - fs->n_fatent = nclst + 2; /* Number of FAT entries */ + fs->n_fatent = nclst + 2U; /* Number of FAT entries */ fs->volbase = bsect; /* Volume start sector */ fs->fatbase = bsect + nrsv; /* FAT start sector */ fs->database = bsect + sysect; /* Data start sector */ if (fmt == FS_FAT32) { - if (fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ + if (fs->n_rootdir != 0U) { + return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ + } fs->dirbase = LD_DWORD(fs->win+BPB_RootClus); /* Root directory start cluster */ - szbfat = fs->n_fatent * 4; /* (Needed FAT size) */ + szbfat = fs->n_fatent * 4U; /* (Needed FAT size) */ } else { - if (!fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ + if ((!fs->n_rootdir) != 0U) { + return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ + } fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ - szbfat = (fmt == FS_FAT16) ? /* (Needed FAT size) */ - fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1); + szbfat = (((DWORD)fmt) == FS_FAT16) ? /* (Needed FAT size) */ + (fs->n_fatent * ((DWORD)2U)) : (((fs->n_fatent * (DWORD)3U) / (DWORD)2U) + (fs->n_fatent & (DWORD)1U)); } - if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) /* (BPB_FATSz must not be less than needed) */ + if (fs->fsize < ((szbfat + (SS(fs) - 1)) / SS(fs))) { /* (BPB_FATSz must not be less than needed) */ return FR_NO_FILESYSTEM; + } #if !_FS_READONLY /* Initialize cluster allocation information */ - fs->last_clust = fs->free_clust = 0xFFFFFFFF; + fs->last_clust = 0xFFFFFFFFU; + fs->free_clust = 0xFFFFFFFFU; /* Get fsinfo if available */ - fs->fsi_flag = 0x80; -#if (_FS_NOFSINFO & 3) != 3 - if (fmt == FS_FAT32 /* Enable FSINFO only if FAT32 and BPB_FSInfo is 1 */ - && LD_WORD(fs->win+BPB_FSInfo) == 1 - && move_window(fs, bsect + 1) == FR_OK) + fs->fsi_flag = 0x80U; +#if (_FS_NOFSINFO & 3) != 3U + if ((fmt == FS_FAT32) /* Enable FSINFO only if FAT32 and BPB_FSInfo is 1 */ + && (LD_WORD(fs->win+BPB_FSInfo) == 1U) + && (move_window(fs, bsect + 1U) == FR_OK)) { - fs->fsi_flag = 0; - if (LD_WORD(fs->win+BS_55AA) == 0xAA55 /* Load FSINFO data if available */ - && LD_DWORD(fs->win+FSI_LeadSig) == 0x41615252 - && LD_DWORD(fs->win+FSI_StrucSig) == 0x61417272) + fs->fsi_flag = 0U; + if ((LD_WORD(fs->win+BS_55AA) == 0xAA55U) /* Load FSINFO data if available */ + && (LD_DWORD(fs->win+FSI_LeadSig) == 0x41615252U) + && (LD_DWORD(fs->win+FSI_StrucSig) == 0x61417272U)) { #if (_FS_NOFSINFO & 1) == 0 fs->free_clust = LD_DWORD(fs->win+FSI_Free_Count); @@ -2314,7 +2610,8 @@ FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */ #endif #endif fs->fs_type = fmt; /* FAT sub-type */ - fs->id = ++Fsid; /* File system mount ID */ + Fsid += (WORD)1; + fs->id = Fsid; /* File system mount ID */ #if _FS_RPATH fs->cdir = 0; /* Set current directory to root */ #endif @@ -2337,18 +2634,23 @@ FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */ void* obj /* Pointer to the object FIL/DIR to check validity */ ) { - FIL *fil = (FIL*)obj; /* Assuming offset of .fs and .id in the FIL/DIR structure is identical */ + FIL *fil = (FIL *)(void *)obj; /* Assuming offset of .fs and .id in the FIL/DIR structure is identical */ + FRESULT res; + if (((!fil) != 0U) || ((!fil->fs) != 0U) || ((!fil->fs->fs_type) != 0U) || (fil->fs->id != fil->id)) { + res = FR_INVALID_OBJECT; + } + else { + ENTER_FF(fil->fs); /* Lock file system */ - if (!fil || !fil->fs || !fil->fs->fs_type || fil->fs->id != fil->id) - return FR_INVALID_OBJECT; - - ENTER_FF(fil->fs); /* Lock file system */ - - if (disk_status(fil->fs->drv) & STA_NOINIT) - return FR_NOT_READY; - - return FR_OK; + if ((disk_status(fil->fs->drv) & STA_NOINIT) != (BYTE)0U) { + res = FR_NOT_READY; + } + else { + res = FR_OK; + } + } + return res; } @@ -2373,36 +2675,42 @@ FRESULT f_mount ( ) { FATFS *cfs; - int vol; + s32 vol; FRESULT res; const TCHAR *rp = path; vol = get_ldnumber(&rp); - if (vol < 0) return FR_INVALID_DRIVE; + if (vol < 0) {return FR_INVALID_DRIVE;} cfs = FatFs[vol]; /* Pointer to fs object */ - if (cfs) { + if (cfs != 0U) { #if _FS_LOCK clear_lock(cfs); #endif #if _FS_REENTRANT /* Discard sync object of the current volume */ - if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR; + if ((!ff_del_syncobj(cfs->sobj)) != 0U) { + return FR_INT_ERR; + } #endif - cfs->fs_type = 0; /* Clear old fs object */ + cfs->fs_type = 0U; /* Clear old fs object */ } - if (fs) { - fs->fs_type = 0; /* Clear new fs object */ + if (fs != 0U) { + fs->fs_type = 0U; /* Clear new fs object */ #if _FS_REENTRANT /* Create sync object for the new volume */ - if (!ff_cre_syncobj((BYTE)vol, &fs->sobj)) return FR_INT_ERR; + if ((!ff_cre_syncobj((BYTE)vol, &fs->sobj)) != 0U) { + return FR_INT_ERR; + } #endif } FatFs[vol] = fs; /* Register new fs object */ - if (!fs || opt != 1) return FR_OK; /* Do not mount now, it will be mounted later */ + if (((!fs) != 0U) || (opt != 1U)) { + return FR_OK; /* Do not mount now, it will be mounted later */ + } - res = find_volume(&fs, &path, 0); /* Force mounted the volume */ + res = find_volume(&fs, &path, 0U); /* Force mounted the volume */ LEAVE_FF(fs, res); } @@ -2420,13 +2728,15 @@ FRESULT f_open ( ) { FRESULT res; - DIR dj; + DIR dj = {0}; BYTE *dir; DEF_NAMEBUF; - if (!fp) return FR_INVALID_OBJECT; - fp->fs = 0; /* Clear file object */ + if ((!fp) != 0U) { + return FR_INVALID_OBJECT; + } + fp->fs = NULL; /* Clear file object */ /* Get logical drive number */ #if !_FS_READONLY @@ -2434,7 +2744,7 @@ FRESULT f_open ( res = find_volume(&dj.fs, &path, (BYTE)(mode & ~FA_READ)); #else mode &= FA_READ; - res = find_volume(&dj.fs, &path, 0); + res = find_volume(&dj.fs, &path, 0U); #endif if (res == FR_OK) { INIT_BUF(dj); @@ -2442,44 +2752,47 @@ FRESULT f_open ( dir = dj.dir; #if !_FS_READONLY /* R/W configuration */ if (res == FR_OK) { - if (!dir) /* Default directory itself */ + if ((!dir) != 0U) {/* Default directory itself */ res = FR_INVALID_NAME; + } #if _FS_LOCK else res = chk_lock(&dj, (mode & ~FA_READ) ? 1 : 0); #endif } /* Create or Open a file */ - if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) { + if ((mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) != (BYTE)0U) { DWORD dw, cl; if (res != FR_OK) { /* No file, create new */ - if (res == FR_NO_FILE) /* There is no file to open, create a new entry */ + if (res == FR_NO_FILE) { /* There is no file to open, create a new entry */ #if _FS_LOCK res = enq_lock() ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; #else res = dir_register(&dj); #endif + } mode |= FA_CREATE_ALWAYS; /* File is created */ dir = dj.dir; /* New entry */ } else { /* Any object is already existing */ - if (dir[DIR_Attr] & (AM_RDO | AM_DIR)) { /* Cannot overwrite it (R/O or DIR) */ + if ((*(dir+DIR_Attr) & (AM_RDO | AM_DIR)) != 0U) { /* Cannot overwrite it (R/O or DIR) */ res = FR_DENIED; } else { - if (mode & FA_CREATE_NEW) /* Cannot create as new file */ + if ((mode & FA_CREATE_NEW) != (BYTE)0U) { /* Cannot create as new file */ res = FR_EXIST; + } } } - if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */ + if ((res == FR_OK) && ((mode & FA_CREATE_ALWAYS) != (BYTE)0U)) { /* Truncate it if overwrite mode */ dw = get_fattime(); /* Created time */ ST_DWORD(dir+DIR_CrtTime, dw); - dir[DIR_Attr] = 0; /* Reset attribute */ + (*(dir+DIR_Attr)) = 0U; /* Reset attribute */ ST_DWORD(dir+DIR_FileSize, 0); /* size = 0 */ cl = ld_clust(dj.fs, dir); /* Get start cluster */ - st_clust(dir, 0); /* cluster = 0 */ - dj.fs->wflag = 1; - if (cl) { /* Remove the cluster chain if exist */ + st_clust(dir, 0U); /* cluster = 0 */ + dj.fs->wflag = 1U; + if (cl != (DWORD)0U) { /* Remove the cluster chain if exist */ dw = dj.fs->winsect; res = remove_chain(dj.fs, cl); if (res == FR_OK) { @@ -2491,33 +2804,38 @@ FRESULT f_open ( } else { /* Open an existing file */ if (res == FR_OK) { /* Follow succeeded */ - if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */ + if ((*(dir+DIR_Attr) & AM_DIR) != 0U) { /* It is a directory */ res = FR_NO_FILE; } else { - if ((mode & FA_WRITE) && (dir[DIR_Attr] & AM_RDO)) /* R/O violation */ + if (((mode & FA_WRITE) != 0U) && (((*(dir+DIR_Attr)) & AM_RDO) != 0U)) {/* R/O violation */ res = FR_DENIED; + } } } } if (res == FR_OK) { - if (mode & FA_CREATE_ALWAYS) /* Set file change flag if created or overwritten */ + if ((mode & FA_CREATE_ALWAYS) != 0U) { /* Set file change flag if created or overwritten */ mode |= FA__WRITTEN; + } fp->dir_sect = dj.fs->winsect; /* Pointer to the directory entry */ fp->dir_ptr = dir; #if _FS_LOCK fp->lockid = inc_lock(&dj, (mode & ~FA_READ) ? 1 : 0); - if (!fp->lockid) res = FR_INT_ERR; + if ((!fp->lockid) != 0U) { + res = FR_INT_ERR; + } #endif } #else /* R/O configuration */ if (res == FR_OK) { /* Follow succeeded */ dir = dj.dir; - if (!dir) { /* Current directory itself */ + if ((!dir) != 0U) { /* Current directory itself */ res = FR_INVALID_NAME; } else { - if (dir[DIR_Attr] & AM_DIR) /* It is a directory */ + if (((*(dir+DIR_Attr)) & AM_DIR) != 0U) {/* It is a directory */ res = FR_NO_FILE; + } } } #endif @@ -2525,11 +2843,11 @@ FRESULT f_open ( if (res == FR_OK) { fp->flag = mode; /* File access mode */ - fp->err = 0; /* Clear error flag */ + fp->err = 0U; /* Clear error flag */ fp->sclust = ld_clust(dj.fs, dir); /* File start cluster */ fp->fsize = LD_DWORD(dir+DIR_FileSize); /* File size */ - fp->fptr = 0; /* File pointer */ - fp->dsect = 0; + fp->fptr = 0U; /* File pointer */ + fp->dsect = 0U; #if _USE_FASTSEEK fp->cltbl = 0; /* Normal seek mode */ #endif @@ -2558,84 +2876,107 @@ FRESULT f_read ( FRESULT res; DWORD clst, sect, remain; UINT rcnt, cc; - BYTE csect, *rbuff = (BYTE*)buff; + BYTE csect, *rbuff = (BYTE*)(void *)buff; - *br = 0; /* Clear read byte counter */ + *br = 0U; /* Clear read byte counter */ res = validate(fp); /* Check validity */ - if (res != FR_OK) LEAVE_FF(fp->fs, res); - if (fp->err) /* Check error */ + if (res != FR_OK) { + LEAVE_FF(fp->fs, res); + } + if (fp->err != (BYTE)0U) { /* Check error */ LEAVE_FF(fp->fs, (FRESULT)fp->err); - if (!(fp->flag & FA_READ)) /* Check access mode */ + } + if ((!(fp->flag & FA_READ)) != 0U) { /* Check access mode */ LEAVE_FF(fp->fs, FR_DENIED); + } remain = fp->fsize - fp->fptr; - if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ + if (btr > (UINT)remain) { + btr = (UINT)remain; /* Truncate btr by remaining bytes */ + } + while(btr != (UINT)0U) { /* Repeat until all data read */ - for ( ; btr; /* Repeat until all data read */ - rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { - if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ - csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ - if (!csect) { /* On the cluster boundary? */ - if (fp->fptr == 0) { /* On the top of the file? */ + if ((fp->fptr % SS(fp->fs)) == 0U) { /* On the sector boundary? */ + csect = (BYTE)(((BYTE)((DWORD)fp->fptr / (DWORD)SS(fp->fs))) & (BYTE)(fp->fs->csize - (BYTE)1U)); /* Sector offset in the cluster */ + if ((!csect) != 0U) { /* On the cluster boundary? */ + if (fp->fptr == 0U) { /* On the top of the file? */ clst = fp->sclust; /* Follow from the origin */ } else { /* Middle or end of the file */ #if _USE_FASTSEEK - if (fp->cltbl) + if (fp->cltbl) { clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ + } else #endif clst = get_fat(fp->fs, fp->clust); /* Follow cluster chain on the FAT */ } - if (clst < 2) ABORT(fp->fs, FR_INT_ERR); - if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + if (clst < 2U) { + ABORT(fp->fs, FR_INT_ERR); + } + if (clst == 0xFFFFFFFFU) { + ABORT(fp->fs, FR_DISK_ERR); + } fp->clust = clst; /* Update current cluster */ } sect = clust2sect(fp->fs, fp->clust); /* Get current sector */ - if (!sect) ABORT(fp->fs, FR_INT_ERR); + if ((!sect) != 0U) { + ABORT(fp->fs, FR_INT_ERR); + } sect += csect; cc = btr / SS(fp->fs); /* When remaining bytes >= sector size, */ - if (cc) { /* Read maximum contiguous sectors directly */ - if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ - cc = fp->fs->csize - csect; - if (disk_read(fp->fs->drv, rbuff, sect, cc)) + if (cc != 0U) { /* Read maximum contiguous sectors directly */ + if ((csect + cc) > fp->fs->csize) { /* Clip at cluster boundary */ + cc = (UINT)(fp->fs->csize - csect); + } + if (disk_read(fp->fs->drv, rbuff, sect, (BYTE)cc) != RES_OK) { ABORT(fp->fs, FR_DISK_ERR); + } #if !_FS_READONLY && _FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it contains a dirty sector */ #if _FS_TINY - if (fp->fs->wflag && fp->fs->winsect - sect < cc) + if ((fp->fs->wflag != 0U) && (((fp->fs->winsect - sect) < cc) != 0U)) { mem_cpy(rbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), fp->fs->win, SS(fp->fs)); + } #else - if ((fp->flag & FA__DIRTY) && fp->dsect - sect < cc) + if (((fp->flag & FA__DIRTY) != (BYTE)0U) && ((fp->dsect - sect) < cc)) { mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf, SS(fp->fs)); + } #endif #endif rcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ + rbuff += rcnt; fp->fptr += rcnt; *br += rcnt;btr -= rcnt; continue; } #if !_FS_TINY if (fp->dsect != sect) { /* Load data sector if not in cache */ #if !_FS_READONLY - if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) + if ((fp->flag & FA__DIRTY) != (BYTE)0U) { /* Write-back dirty sector cache */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1U) != RES_OK) { ABORT(fp->fs, FR_DISK_ERR); + } fp->flag &= ~FA__DIRTY; } #endif - if (disk_read(fp->fs->drv, fp->buf, sect, 1)) /* Fill sector cache */ + if (disk_read(fp->fs->drv, fp->buf, sect, 1U) != RES_OK) { /* Fill sector cache */ ABORT(fp->fs, FR_DISK_ERR); + } } #endif fp->dsect = sect; } - rcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer */ - if (rcnt > btr) rcnt = btr; + rcnt = (UINT)SS(fp->fs) - (UINT)(fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer */ + if (rcnt > btr) { + rcnt = btr; + } #if _FS_TINY - if (move_window(fp->fs, fp->dsect)) /* Move sector window */ + if (move_window(fp->fs, fp->dsect) != 0U) { /* Move sector window */ ABORT(fp->fs, FR_DISK_ERR); + } mem_cpy(rbuff, &fp->fs->win[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ #else - mem_cpy(rbuff, &fp->buf[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ + mem_cpy(rbuff, (void *)&fp->buf[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ #endif + rbuff += rcnt; fp->fptr += rcnt; *br += rcnt;btr -= rcnt; } LEAVE_FF(fp->fs, FR_OK); @@ -2659,29 +3000,36 @@ FRESULT f_write ( FRESULT res; DWORD clst, sect; UINT wcnt, cc; - const BYTE *wbuff = (const BYTE*)buff; + const BYTE *wbuff = buff; BYTE csect; + UINT LocBtw = btw; - - *bw = 0; /* Clear write byte counter */ + *bw = 0U; /* Clear write byte counter */ res = validate(fp); /* Check validity */ - if (res != FR_OK) LEAVE_FF(fp->fs, res); - if (fp->err) /* Check error */ + if (res != FR_OK) { + LEAVE_FF(fp->fs, res); + } + if (fp->err != (BYTE)0U) { /* Check error */ LEAVE_FF(fp->fs, (FRESULT)fp->err); - if (!(fp->flag & FA_WRITE)) /* Check access mode */ + } + if ((!(fp->flag & FA_WRITE)) != 0U) { /* Check access mode */ LEAVE_FF(fp->fs, FR_DENIED); - if (fp->fptr + btw < fp->fptr) btw = 0; /* File size cannot reach 4GB */ + } + if ((fp->fptr + LocBtw) < fp->fptr) { + LocBtw = 0U; /* File size cannot reach 4GB */ + } - for ( ; btw; /* Repeat until all data written */ - wbuff += wcnt, fp->fptr += wcnt, *bw += wcnt, btw -= wcnt) { - if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ - csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ - if (!csect) { /* On the cluster boundary? */ - if (fp->fptr == 0) { /* On the top of the file? */ + while(LocBtw != (UINT)0U) { /* Repeat until all data written */ + + if ((fp->fptr % SS(fp->fs)) == 0U) { /* On the sector boundary? */ + csect = (BYTE)((fp->fptr / ((DWORD)SS(fp->fs))) & (DWORD)(fp->fs->csize - 1U)); /* Sector offset in the cluster */ + if ((!csect) != 0U) { /* On the cluster boundary? */ + if (fp->fptr == 0U) { /* On the top of the file? */ clst = fp->sclust; /* Follow from the origin */ - if (clst == 0) /* When no cluster is allocated, */ - clst = create_chain(fp->fs, 0); /* Create a new cluster chain */ + if (clst == 0U) { /* When no cluster is allocated, */ + clst = create_chain(fp->fs, 0U); /* Create a new cluster chain */ + } } else { /* Middle or end of the file */ #if _USE_FASTSEEK if (fp->cltbl) @@ -2690,75 +3038,99 @@ FRESULT f_write ( #endif clst = create_chain(fp->fs, fp->clust); /* Follow or stretch cluster chain on the FAT */ } - if (clst == 0) break; /* Could not allocate a new cluster (disk full) */ - if (clst == 1) ABORT(fp->fs, FR_INT_ERR); - if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + if (clst == 0U) { + break; /* Could not allocate a new cluster (disk full) */ + } + if (clst == 1U) { + ABORT(fp->fs, FR_INT_ERR); + } + if (clst == 0xFFFFFFFFU) { + ABORT(fp->fs, FR_DISK_ERR); + } fp->clust = clst; /* Update current cluster */ - if (fp->sclust == 0) fp->sclust = clst; /* Set start cluster if the first write */ + if (fp->sclust == 0U) { + fp->sclust = clst; /* Set start cluster if the first write */ + } } #if _FS_TINY - if (fp->fs->winsect == fp->dsect && sync_window(fp->fs)) /* Write-back sector cache */ + if (fp->fs->winsect == fp->dsect && (sync_window(fp->fs) != 0U)) { /* Write-back sector cache */ ABORT(fp->fs, FR_DISK_ERR); + } #else - if (fp->flag & FA__DIRTY) { /* Write-back sector cache */ - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) + if ((fp->flag & FA__DIRTY) != (BYTE)0U) { /* Write-back sector cache */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1U) != RES_OK) { ABORT(fp->fs, FR_DISK_ERR); + } fp->flag &= ~FA__DIRTY; } #endif sect = clust2sect(fp->fs, fp->clust); /* Get current sector */ - if (!sect) ABORT(fp->fs, FR_INT_ERR); + if ((!sect) != 0U) { + ABORT(fp->fs, FR_INT_ERR); + } sect += csect; - cc = btw / SS(fp->fs); /* When remaining bytes >= sector size, */ - if (cc) { /* Write maximum contiguous sectors directly */ - if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ - cc = fp->fs->csize - csect; - if (disk_write(fp->fs->drv, wbuff, sect, cc)) + cc = LocBtw / SS(fp->fs); /* When remaining bytes >= sector size, */ + if (cc != 0U) { /* Write maximum contiguous sectors directly */ + if ((csect + cc) > fp->fs->csize) { /* Clip at cluster boundary */ + cc = (UINT)(fp->fs->csize - csect); + } + if (disk_write(fp->fs->drv, wbuff, sect, (BYTE)cc) != RES_OK) { ABORT(fp->fs, FR_DISK_ERR); + } #if _FS_MINIMIZE <= 2 #if _FS_TINY - if (fp->fs->winsect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */ + if ((fp->fs->winsect - sect) < cc) { /* Refill sector cache if it gets invalidated by the direct write */ mem_cpy(fp->fs->win, wbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), SS(fp->fs)); - fp->fs->wflag = 0; + fp->fs->wflag = 0U; } #else - if (fp->dsect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */ + if ((fp->dsect - sect) < cc) { /* Refill sector cache if it gets invalidated by the direct write */ mem_cpy(fp->buf, wbuff + ((fp->dsect - sect) * SS(fp->fs)), SS(fp->fs)); fp->flag &= ~FA__DIRTY; } #endif #endif wcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ + wbuff += wcnt; fp->fptr += (DWORD)wcnt; *bw += wcnt; LocBtw -= wcnt; continue; } #if _FS_TINY if (fp->fptr >= fp->fsize) { /* Avoid silly cache filling at growing edge */ - if (sync_window(fp->fs)) ABORT(fp->fs, FR_DISK_ERR); + if (sync_window(fp->fs) != 0U) { + ABORT(fp->fs, FR_DISK_ERR); + } fp->fs->winsect = sect; } #else if (fp->dsect != sect) { /* Fill sector cache with file data */ - if (fp->fptr < fp->fsize && - disk_read(fp->fs->drv, fp->buf, sect, 1)) + if (((fp->fptr < fp->fsize) != 0U) && + (disk_read(fp->fs->drv, fp->buf, sect, 1U) != RES_OK)) { ABORT(fp->fs, FR_DISK_ERR); + } } #endif fp->dsect = sect; } - wcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs));/* Put partial sector into file I/O buffer */ - if (wcnt > btw) wcnt = btw; + wcnt = (((UINT)SS(fp->fs)) - ((UINT)fp->fptr % SS(fp->fs)));/* Put partial sector into file I/O buffer */ + if (wcnt > LocBtw) { + wcnt = LocBtw; + } #if _FS_TINY - if (move_window(fp->fs, fp->dsect)) /* Move sector window */ + if (move_window(fp->fs, fp->dsect) != 0U) { /* Move sector window */ ABORT(fp->fs, FR_DISK_ERR); - mem_cpy(&fp->fs->win[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ - fp->fs->wflag = 1; + } + mem_cpy((void *)&fp->fs->win[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ + fp->fs->wflag = 1U; #else - mem_cpy(&fp->buf[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ + mem_cpy((void *)&fp->buf[fp->fptr % SS(fp->fs)], wbuff, wcnt); /* Fit partial sector */ fp->flag |= FA__DIRTY; #endif + wbuff += wcnt; fp->fptr += (DWORD)wcnt; *bw += wcnt; LocBtw -= wcnt; } - if (fp->fptr > fp->fsize) fp->fsize = fp->fptr; /* Update file size if needed */ + if (fp->fptr > fp->fsize) { + fp->fsize = fp->fptr; /* Update file size if needed */ + } fp->flag |= FA__WRITTEN; /* Set file change flag */ LEAVE_FF(fp->fs, FR_OK); @@ -2777,32 +3149,33 @@ FRESULT f_sync ( { FRESULT res; DWORD tm; - BYTE *dir; + BYTE *directory; res = validate(fp); /* Check validity of the object */ if (res == FR_OK) { - if (fp->flag & FA__WRITTEN) { /* Has the file been written? */ + if ((fp->flag & FA__WRITTEN) != 0U) { /* Has the file been written? */ /* Write-back dirty buffer */ #if !_FS_TINY - if (fp->flag & FA__DIRTY) { - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) + if ((fp->flag & FA__DIRTY) != (BYTE)0U) { + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1U) != RES_OK) { LEAVE_FF(fp->fs, FR_DISK_ERR); + } fp->flag &= ~FA__DIRTY; } #endif /* Update the directory entry */ res = move_window(fp->fs, fp->dir_sect); if (res == FR_OK) { - dir = fp->dir_ptr; - dir[DIR_Attr] |= AM_ARC; /* Set archive bit */ - ST_DWORD(dir+DIR_FileSize, fp->fsize); /* Update file size */ - st_clust(dir, fp->sclust); /* Update start cluster */ + directory = fp->dir_ptr; + *(directory+DIR_Attr) |= AM_ARC; /* Set archive bit */ + ST_DWORD(directory+DIR_FileSize, fp->fsize); /* Update file size */ + st_clust(directory, fp->sclust); /* Update start cluster */ tm = get_fattime(); /* Update updated time */ - ST_DWORD(dir+DIR_WrtTime, tm); - ST_WORD(dir+DIR_LstAccDate, 0); + ST_DWORD(directory+DIR_WrtTime, tm); + ST_WORD(directory+DIR_LstAccDate, 0); fp->flag &= ~FA__WRITTEN; - fp->fs->wflag = 1; + fp->fs->wflag = 1U; res = sync_fs(fp->fs); } } @@ -2841,7 +3214,7 @@ FRESULT f_close ( res = dec_lock(fp->lockid); /* Decrement file open counter */ if (res == FR_OK) #endif - fp->fs = 0; /* Invalidate file object */ + fp->fs = NULL; /* Invalidate file object */ #if _FS_REENTRANT unlock_fs(fs, FR_OK); /* Unlock volume */ #endif @@ -2867,7 +3240,9 @@ FRESULT f_chdrive ( vol = get_ldnumber(&path); - if (vol < 0) return FR_INVALID_DRIVE; + if (vol < 0) { + return FR_INVALID_DRIVE; + } CurrVol = (BYTE)vol; @@ -2895,13 +3270,17 @@ FRESULT f_chdir ( if (!dj.dir) { dj.fs->cdir = dj.sclust; /* Start directory itself */ } else { - if (dj.dir[DIR_Attr] & AM_DIR) /* Reached to the directory */ + if (dj.dir[DIR_Attr] & AM_DIR) { /* Reached to the directory */ dj.fs->cdir = ld_clust(dj.fs, dj.dir); - else + } + else { res = FR_NO_PATH; /* Reached but a file */ + } } } - if (res == FR_NO_FILE) res = FR_NO_PATH; + if (res == FR_NO_FILE) { + res = FR_NO_PATH; + } } LEAVE_FF(dj.fs, res); @@ -2932,20 +3311,34 @@ FRESULT f_getcwd ( dj.sclust = dj.fs->cdir; /* Start to follow upper directory from current directory */ while ((ccl = dj.sclust) != 0) { /* Repeat while current directory is a sub-directory */ res = dir_sdi(&dj, 1); /* Get parent directory */ - if (res != FR_OK) break; + if (res != FR_OK) { + break; + } res = dir_read(&dj, 0); - if (res != FR_OK) break; + if (res != FR_OK) { + break; + } dj.sclust = ld_clust(dj.fs, dj.dir); /* Goto parent directory */ res = dir_sdi(&dj, 0); - if (res != FR_OK) break; + if (res != FR_OK) { + break; + } do { /* Find the entry links to the child directory */ res = dir_read(&dj, 0); - if (res != FR_OK) break; - if (ccl == ld_clust(dj.fs, dj.dir)) break; /* Found the entry */ + if (res != FR_OK) { + break; + } + if (ccl == ld_clust(dj.fs, dj.dir)) { + break; /* Found the entry */ + } res = dir_next(&dj, 0); } while (res == FR_OK); - if (res == FR_NO_FILE) res = FR_INT_ERR;/* It cannot be 'not found'. */ - if (res != FR_OK) break; + if (res == FR_NO_FILE) { + res = FR_INT_ERR;/* It cannot be 'not found'. */ + } + if (res != FR_OK) { + break; + } #if _USE_LFN fno.lfname = buff; fno.lfsize = i; @@ -2953,7 +3346,9 @@ FRESULT f_getcwd ( get_fileinfo(&dj, &fno); /* Get the directory name and push it to the buffer */ tp = fno.fname; #if _USE_LFN - if (*buff) tp = buff; + if (*buff) { + tp = buff; + } #endif for (n = 0; tp[n]; n++) ; if (i < n + 3) { @@ -2998,12 +3393,15 @@ FRESULT f_lseek ( ) { FRESULT res; - + DWORD LocOfs = ofs; res = validate(fp); /* Check validity of the object */ - if (res != FR_OK) LEAVE_FF(fp->fs, res); - if (fp->err) /* Check error */ + if (res != FR_OK) { + LEAVE_FF(fp->fs, res); + } + if (fp->err != (BYTE)0U) { /* Check error */ LEAVE_FF(fp->fs, (FRESULT)fp->err); + } #if _USE_FASTSEEK if (fp->cltbl) { /* Fast seek */ @@ -3020,8 +3418,12 @@ FRESULT f_lseek ( do { pcl = cl; ncl++; cl = get_fat(fp->fs, cl); - if (cl <= 1) ABORT(fp->fs, FR_INT_ERR); - if (cl == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + if (cl <= 1) { + ABORT(fp->fs, FR_INT_ERR); + } + if (cl == 0xFFFFFFFF) { + ABORT(fp->fs, FR_DISK_ERR); + } } while (cl == pcl + 1); if (ulen <= tlen) { /* Store the length and top of the fragment */ *tbl++ = ncl; *tbl++ = tcl; @@ -3029,31 +3431,38 @@ FRESULT f_lseek ( } while (cl < fp->fs->n_fatent); /* Repeat until end of chain */ } *fp->cltbl = ulen; /* Number of items used */ - if (ulen <= tlen) + if (ulen <= tlen) { *tbl = 0; /* Terminate table */ - else + } + else { res = FR_NOT_ENOUGH_CORE; /* Given table size is smaller than required */ + } } else { /* Fast seek */ - if (ofs > fp->fsize) /* Clip offset at the file size */ - ofs = fp->fsize; - fp->fptr = ofs; /* Set file pointer */ - if (ofs) { + if (LocOfs > fp->fsize) { /* Clip offset at the file size */ + LocOfs = fp->fsize; + } + fp->fptr = LocOfs; /* Set file pointer */ + if (LocOfs) { fp->clust = clmt_clust(fp, ofs - 1); dsc = clust2sect(fp->fs, fp->clust); - if (!dsc) ABORT(fp->fs, FR_INT_ERR); - dsc += (ofs - 1) / SS(fp->fs) & (fp->fs->csize - 1); - if (fp->fptr % SS(fp->fs) && dsc != fp->dsect) { /* Refill sector cache if needed */ + if ((!dsc) != 0U) { + ABORT(fp->fs, FR_INT_ERR); + } + dsc += (LocOfs - 1) / SS(fp->fs) & (fp->fs->csize - 1); + if (((fp->fptr % SS(fp->fs)) != 0U)&& ((dsc != fp->dsect) != 0U)) { /* Refill sector cache if needed */ #if !_FS_TINY #if !_FS_READONLY if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK) { ABORT(fp->fs, FR_DISK_ERR); + } fp->flag &= ~FA__DIRTY; } #endif - if (disk_read(fp->fs->drv, fp->buf, dsc, 1)) /* Load current sector */ + if (disk_read(fp->fs->drv, fp->buf, dsc, 1) != RES_OK) { /* Load current sector */ ABORT(fp->fs, FR_DISK_ERR); + } #endif fp->dsect = dsc; } @@ -3066,69 +3475,84 @@ FRESULT f_lseek ( { DWORD clst, bcs, nsect, ifptr; - if (ofs > fp->fsize /* In read-only mode, clip offset with the file size */ + if (((LocOfs > fp->fsize) != 0U) /* In read-only mode, clip offset with the file size */ #if !_FS_READONLY - && !(fp->flag & FA_WRITE) + && ((!(fp->flag & FA_WRITE)) != 0U) #endif - ) ofs = fp->fsize; + ) { + LocOfs = fp->fsize; + } ifptr = fp->fptr; - fp->fptr = nsect = 0; - if (ofs) { + fp->fptr = 0U; nsect = 0U; + if (LocOfs != (DWORD)0U) { bcs = (DWORD)fp->fs->csize * SS(fp->fs); /* Cluster size (byte) */ - if (ifptr > 0 && - (ofs - 1) / bcs >= (ifptr - 1) / bcs) { /* When seek to same or following cluster, */ - fp->fptr = (ifptr - 1) & ~(bcs - 1); /* start from the current cluster */ - ofs -= fp->fptr; + if ((ifptr > 0U) && + ((((LocOfs - 1) / bcs) >= ((ifptr - 1) / bcs)) != 0U)) { /* When seek to same or following cluster, */ + fp->fptr = (ifptr - 1) & ~(bcs - (DWORD)1); /* start from the current cluster */ + LocOfs -= fp->fptr; clst = fp->clust; } else { /* When seek to back cluster, */ clst = fp->sclust; /* start from the first cluster */ #if !_FS_READONLY - if (clst == 0) { /* If no cluster chain, create a new chain */ - clst = create_chain(fp->fs, 0); - if (clst == 1) ABORT(fp->fs, FR_INT_ERR); - if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + if (clst == 0U) { /* If no cluster chain, create a new chain */ + clst = create_chain(fp->fs, 0U); + if (clst == 1U) { + ABORT(fp->fs, FR_INT_ERR); + } + if (clst == 0xFFFFFFFFU) { + ABORT(fp->fs, FR_DISK_ERR); + } fp->sclust = clst; } #endif fp->clust = clst; } - if (clst != 0) { - while (ofs > bcs) { /* Cluster following loop */ + if (clst != 0U) { + while (LocOfs > bcs) { /* Cluster following loop */ #if !_FS_READONLY - if (fp->flag & FA_WRITE) { /* Check if in write mode or not */ + if ((fp->flag & FA_WRITE) != (BYTE)0U) { /* Check if in write mode or not */ clst = create_chain(fp->fs, clst); /* Force stretch if in write mode */ - if (clst == 0) { /* When disk gets full, clip file size */ - ofs = bcs; break; + if (clst == 0U) { /* When disk gets full, clip file size */ + LocOfs = bcs; break; } - } else + } else { #endif clst = get_fat(fp->fs, clst); /* Follow cluster chain if not in write mode */ - if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); - if (clst <= 1 || clst >= fp->fs->n_fatent) ABORT(fp->fs, FR_INT_ERR); + } + if (clst == 0xFFFFFFFFU) { + ABORT(fp->fs, FR_DISK_ERR); + } + if ((clst <= 1U) || ((clst >= fp->fs->n_fatent) != 0U)) { + ABORT(fp->fs, FR_INT_ERR); + } fp->clust = clst; fp->fptr += bcs; - ofs -= bcs; + LocOfs -= bcs; } - fp->fptr += ofs; - if (ofs % SS(fp->fs)) { + fp->fptr += LocOfs; + if ((LocOfs % SS(fp->fs)) != (UINT)0U) { nsect = clust2sect(fp->fs, clst); /* Current sector */ - if (!nsect) ABORT(fp->fs, FR_INT_ERR); - nsect += ofs / SS(fp->fs); + if ((!nsect) != 0U) { + ABORT(fp->fs, FR_INT_ERR); + } + nsect += LocOfs / SS(fp->fs); } } } - if (fp->fptr % SS(fp->fs) && nsect != fp->dsect) { /* Fill sector cache if needed */ + if (((fp->fptr % SS(fp->fs)) != 0U) && ((nsect != fp->dsect) != 0U)) { /* Fill sector cache if needed */ #if !_FS_TINY #if !_FS_READONLY - if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) + if ((fp->flag & FA__DIRTY) != (BYTE)0U) { /* Write-back dirty sector cache */ + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1U) != RES_OK) { ABORT(fp->fs, FR_DISK_ERR); + } fp->flag &= ~FA__DIRTY; } #endif - if (disk_read(fp->fs->drv, fp->buf, nsect, 1)) /* Fill sector cache */ + if (disk_read(fp->fs->drv, fp->buf, nsect, 1U) != RES_OK) { /* Fill sector cache */ ABORT(fp->fs, FR_DISK_ERR); + } #endif fp->dsect = nsect; } @@ -3160,25 +3584,29 @@ FRESULT f_opendir ( DEF_NAMEBUF; - if (!dp) return FR_INVALID_OBJECT; - + if ((!dp) != 0U) { + res = FR_INVALID_OBJECT; + } + else { /* Get logical drive number */ - res = find_volume(&fs, &path, 0); + res = find_volume(&fs, &path, 0U); if (res == FR_OK) { dp->fs = fs; INIT_BUF(*dp); res = follow_path(dp, path); /* Follow the path to the directory */ FREE_BUF(); if (res == FR_OK) { /* Follow completed */ - if (dp->dir) { /* It is not the origin directory itself */ - if (dp->dir[DIR_Attr] & AM_DIR) /* The object is a sub directory */ + if (dp->dir != NULL) { /* It is not the origin directory itself */ + if ((dp->dir[DIR_Attr] & AM_DIR) != (BYTE)0U) {/* The object is a sub directory */ dp->sclust = ld_clust(fs, dp->dir); - else /* The object is a file */ + } + else { /* The object is a file */ res = FR_NO_PATH; + } } if (res == FR_OK) { dp->id = fs->id; - res = dir_sdi(dp, 0); /* Rewind directory */ + res = dir_sdi(dp, 0U); /* Rewind directory */ #if _FS_LOCK if (res == FR_OK) { if (dp->sclust) { @@ -3192,10 +3620,15 @@ FRESULT f_opendir ( #endif } } - if (res == FR_NO_FILE) res = FR_NO_PATH; + if (res == FR_NO_FILE) { + res = FR_NO_PATH; + } + } + if (res != FR_OK) { + dp->fs = NULL; /* Invalidate the directory object if function faild */ } - if (res != FR_OK) dp->fs = 0; /* Invalidate the directory object if function faild */ + } LEAVE_FF(fs, res); } @@ -3219,11 +3652,12 @@ FRESULT f_closedir ( FATFS *fs = dp->fs; #endif #if _FS_LOCK - if (dp->lockid) /* Decrement sub-directory open counter */ + if (dp->lockid) { /* Decrement sub-directory open counter */ res = dec_lock(dp->lockid); + } if (res == FR_OK) #endif - dp->fs = 0; /* Invalidate directory object */ + dp->fs = NULL; /* Invalidate directory object */ #if _FS_REENTRANT unlock_fs(fs, FR_OK); /* Unlock volume */ #endif @@ -3249,20 +3683,20 @@ FRESULT f_readdir ( res = validate(dp); /* Check validity of the object */ if (res == FR_OK) { - if (!fno) { - res = dir_sdi(dp, 0); /* Rewind the directory object */ + if ((!fno) != 0U) { + res = dir_sdi(dp, 0U); /* Rewind the directory object */ } else { INIT_BUF(*dp); res = dir_read(dp, 0); /* Read an item */ if (res == FR_NO_FILE) { /* Reached end of directory */ - dp->sect = 0; + dp->sect = 0U; res = FR_OK; } if (res == FR_OK) { /* A valid entry is found */ get_fileinfo(dp, fno); /* Get the object information */ res = dir_next(dp, 0); /* Increment index for next */ if (res == FR_NO_FILE) { - dp->sect = 0; + dp->sect = 0U; res = FR_OK; } } @@ -3286,18 +3720,20 @@ FRESULT f_stat ( ) { FRESULT res; - DIR dj; + DIR dj = {0}; DEF_NAMEBUF; /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 0); + res = find_volume(&dj.fs, &path, 0U); if (res == FR_OK) { INIT_BUF(dj); res = follow_path(&dj, path); /* Follow the file path */ if (res == FR_OK) { /* Follow completed */ - if (dj.dir) { /* Found an object */ - if (fno) get_fileinfo(&dj, fno); + if (dj.dir != NULL) { /* Found an object */ + if (fno != NULL) { + get_fileinfo(&dj, fno); + } } else { /* It is root directory */ res = FR_INVALID_NAME; } @@ -3318,7 +3754,7 @@ FRESULT f_stat ( FRESULT f_getfree ( const TCHAR* path, /* Path name of the logical drive number */ DWORD* nclst, /* Pointer to a variable to return number of free clusters */ - FATFS** fatfs /* Pointer to return pointer to corresponding file system object */ + FATFS** fatfsys /* Pointer to return pointer to corresponding file system object */ ) { FRESULT res; @@ -3329,46 +3765,55 @@ FRESULT f_getfree ( /* Get logical drive number */ - res = find_volume(fatfs, &path, 0); - fs = *fatfs; + res = find_volume(fatfsys, &path, 0U); + fs = *fatfsys; if (res == FR_OK) { /* If free_clust is valid, return it without full cluster scan */ - if (fs->free_clust <= fs->n_fatent - 2) { + if (fs->free_clust <= (fs->n_fatent - 2)) { *nclst = fs->free_clust; } else { /* Get number of free clusters */ fat = fs->fs_type; - n = 0; + n = 0U; if (fat == FS_FAT12) { - clst = 2; + clst = (DWORD)2; do { stat = get_fat(fs, clst); - if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } - if (stat == 1) { res = FR_INT_ERR; break; } - if (stat == 0) n++; - } while (++clst < fs->n_fatent); + if (stat == (DWORD)0xFFFFFFFFU) { res = FR_DISK_ERR; break; } + if (stat == 1U) { res = FR_INT_ERR; break; } + if (stat == 0U) { n++; } + clst += (DWORD)1; + } while (clst < fs->n_fatent); } else { clst = fs->n_fatent; sect = fs->fatbase; - i = 0; p = 0; + i = 0U; p = 0U; do { - if (!i) { - res = move_window(fs, sect++); - if (res != FR_OK) break; + if (i == (UINT)0U) { + res = move_window(fs, sect); + sect += (DWORD)1; + if (res != FR_OK) { + break; + } p = fs->win; i = SS(fs); } if (fat == FS_FAT16) { - if (LD_WORD(p) == 0) n++; - p += 2; i -= 2; + if (LD_WORD(p) == 0U) { + n++; + } + p += 2; i -= (UINT)2; } else { - if ((LD_DWORD(p) & 0x0FFFFFFF) == 0) n++; - p += 4; i -= 4; + if ((LD_DWORD(p) & 0x0FFFFFFFU) == 0U) { + n++; + } + p += 4; i -= (UINT)4; } - } while (--clst); + clst -= (DWORD)1; + } while (clst != (DWORD)0U); } fs->free_clust = n; - fs->fsi_flag |= 1; + fs->fsi_flag |= 1U; *nclst = n; } } @@ -3392,40 +3837,51 @@ FRESULT f_truncate ( res = validate(fp); /* Check validity of the object */ if (res == FR_OK) { - if (fp->err) { /* Check error */ + if (fp->err != (BYTE) 0U) { /* Check error */ res = (FRESULT)fp->err; } else { - if (!(fp->flag & FA_WRITE)) /* Check access mode */ + if ((!(fp->flag & FA_WRITE)) != 0U) { /* Check access mode */ res = FR_DENIED; + } } } if (res == FR_OK) { if (fp->fsize > fp->fptr) { fp->fsize = fp->fptr; /* Set file size to current R/W point */ fp->flag |= FA__WRITTEN; - if (fp->fptr == 0) { /* When set file size to zero, remove entire cluster chain */ + if (fp->fptr == 0U) { /* When set file size to zero, remove entire cluster chain */ res = remove_chain(fp->fs, fp->sclust); - fp->sclust = 0; + fp->sclust = 0U; } else { /* When truncate a part of the file, remove remaining clusters */ ncl = get_fat(fp->fs, fp->clust); res = FR_OK; - if (ncl == 0xFFFFFFFF) res = FR_DISK_ERR; - if (ncl == 1) res = FR_INT_ERR; - if (res == FR_OK && ncl < fp->fs->n_fatent) { - res = put_fat(fp->fs, fp->clust, 0x0FFFFFFF); - if (res == FR_OK) res = remove_chain(fp->fs, ncl); + if (ncl == (DWORD)0xFFFFFFFFU) { + res = FR_DISK_ERR; + } + if (ncl == 1U) { + res = FR_INT_ERR; + } + if ((res == FR_OK) && ((ncl < fp->fs->n_fatent) != 0U)) { + res = put_fat(fp->fs, fp->clust, 0x0FFFFFFFU); + if (res == FR_OK) { + res = remove_chain(fp->fs, ncl); + } } } #if !_FS_TINY - if (res == FR_OK && (fp->flag & FA__DIRTY)) { - if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1)) + if ((res == FR_OK) && ((fp->flag & FA__DIRTY) != (BYTE)0U)) { + if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1U) != RES_OK) { res = FR_DISK_ERR; - else + } + else { fp->flag &= ~FA__DIRTY; + } } #endif } - if (res != FR_OK) fp->err = (FRESULT)res; + if (res != FR_OK) { + fp->err = (FRESULT)res; + } } LEAVE_FF(fp->fs, res); @@ -3443,55 +3899,66 @@ FRESULT f_unlink ( ) { FRESULT res; - DIR dj, sdj; + DIR dj = {0}, sdj = {0}; BYTE *dir; DWORD dclst; DEF_NAMEBUF; /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 1); + res = find_volume(&dj.fs, &path, 1U); if (res == FR_OK) { INIT_BUF(dj); res = follow_path(&dj, path); /* Follow the file path */ - if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) + if (_FS_RPATH && (res == FR_OK) && ((dj.fn[NS] & NS_DOT) != (BYTE)0U)) { res = FR_INVALID_NAME; /* Cannot remove dot entry */ + } #if _FS_LOCK - if (res == FR_OK) res = chk_lock(&dj, 2); /* Cannot remove open file */ + if (res == FR_OK) { + res = chk_lock(&dj, 2); /* Cannot remove open file */ + } #endif if (res == FR_OK) { /* The object is accessible */ dir = dj.dir; - if (!dir) { + if ((!dir) != 0U) { res = FR_INVALID_NAME; /* Cannot remove the start directory */ } else { - if (dir[DIR_Attr] & AM_RDO) + if (((*(dir+DIR_Attr)) & AM_RDO) != (BYTE)0U) { res = FR_DENIED; /* Cannot remove R/O object */ + } } dclst = ld_clust(dj.fs, dir); - if (res == FR_OK && (dir[DIR_Attr] & AM_DIR)) { /* Is it a sub-dir? */ - if (dclst < 2) { + if ((res == FR_OK) && (((*(dir+DIR_Attr)) & AM_DIR) != (BYTE)0U)) { /* Is it a sub-dir? */ + if (dclst < 2U) { res = FR_INT_ERR; } else { mem_cpy(&sdj, &dj, sizeof (DIR)); /* Check if the sub-directory is empty or not */ sdj.sclust = dclst; - res = dir_sdi(&sdj, 2); /* Exclude dot entries */ + res = dir_sdi(&sdj, 2U); /* Exclude dot entries */ if (res == FR_OK) { res = dir_read(&sdj, 0); /* Read an item */ if (res == FR_OK /* Not empty directory */ #if _FS_RPATH || dclst == dj.fs->cdir /* Current directory */ #endif - ) res = FR_DENIED; - if (res == FR_NO_FILE) res = FR_OK; /* Empty */ + ) { + res = FR_DENIED; + } + if (res == FR_NO_FILE) { + res = FR_OK; /* Empty */ + } } } } if (res == FR_OK) { res = dir_remove(&dj); /* Remove the directory entry */ if (res == FR_OK) { - if (dclst) /* Remove the cluster chain if exist */ + if (dclst != (DWORD)0U) { /* Remove the cluster chain if exist */ res = remove_chain(dj.fs, dclst); - if (res == FR_OK) res = sync_fs(dj.fs); + } + if (res == FR_OK) { + res = sync_fs(dj.fs); + } } } } @@ -3513,59 +3980,76 @@ FRESULT f_mkdir ( ) { FRESULT res; - DIR dj; + DIR dj = {0}; BYTE *dir, n; DWORD dsc, dcl, pcl, tm = get_fattime(); DEF_NAMEBUF; /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 1); + res = find_volume(&dj.fs, &path, 1U); if (res == FR_OK) { INIT_BUF(dj); res = follow_path(&dj, path); /* Follow the file path */ - if (res == FR_OK) res = FR_EXIST; /* Any object with same name is already existing */ - if (_FS_RPATH && res == FR_NO_FILE && (dj.fn[NS] & NS_DOT)) + if (res == FR_OK) { + res = FR_EXIST; /* Any object with same name is already existing */ + } + if (_FS_RPATH && (res == FR_NO_FILE) && ((dj.fn[NS] & NS_DOT) != (BYTE)0U)) { res = FR_INVALID_NAME; + } if (res == FR_NO_FILE) { /* Can create a new directory */ - dcl = create_chain(dj.fs, 0); /* Allocate a cluster for the new directory table */ + dcl = create_chain(dj.fs, 0U); /* Allocate a cluster for the new directory table */ res = FR_OK; - if (dcl == 0) res = FR_DENIED; /* No space to allocate a new cluster */ - if (dcl == 1) res = FR_INT_ERR; - if (dcl == 0xFFFFFFFF) res = FR_DISK_ERR; - if (res == FR_OK) /* Flush FAT */ + if (dcl == 0U) { + res = FR_DENIED; /* No space to allocate a new cluster */ + } + if (dcl == 1U) { + res = FR_INT_ERR; + } + if (dcl == 0xFFFFFFFFU) { + res = FR_DISK_ERR; + } + if (res == FR_OK) { /* Flush FAT */ res = sync_window(dj.fs); + } if (res == FR_OK) { /* Initialize the new directory table */ dsc = clust2sect(dj.fs, dcl); dir = dj.fs->win; mem_set(dir, 0, SS(dj.fs)); - mem_set(dir+DIR_Name, ' ', 11); /* Create "." entry */ - dir[DIR_Name] = '.'; - dir[DIR_Attr] = AM_DIR; + mem_set(dir, (s32)' ', 11U); /* Create "." entry */ + (*(dir+DIR_Name)) = ((BYTE)'.'); + (*(dir+DIR_Attr)) = AM_DIR; ST_DWORD(dir+DIR_WrtTime, tm); st_clust(dir, dcl); mem_cpy(dir+SZ_DIR, dir, SZ_DIR); /* Create ".." entry */ - dir[SZ_DIR+1] = '.'; pcl = dj.sclust; - if (dj.fs->fs_type == FS_FAT32 && pcl == dj.fs->dirbase) - pcl = 0; + (*(dir+SZ_DIR+1U)) = ((BYTE)'.'); pcl = dj.sclust; + if ((dj.fs->fs_type == FS_FAT32) && (pcl == dj.fs->dirbase)) { + pcl = 0U; + } st_clust(dir+SZ_DIR, pcl); - for (n = dj.fs->csize; n; n--) { /* Write dot entries and clear following sectors */ - dj.fs->winsect = dsc++; - dj.fs->wflag = 1; + n = dj.fs->csize; + for (; n; n--) { /* Write dot entries and clear following sectors */ + dj.fs->winsect = dsc; + dsc += (DWORD)1; + dj.fs->wflag = 1U; res = sync_window(dj.fs); - if (res != FR_OK) break; + if (res != FR_OK) { + break; + } mem_set(dir, 0, SS(dj.fs)); } } - if (res == FR_OK) res = dir_register(&dj); /* Register the object to the directoy */ + if (res == FR_OK) { + res = dir_register(&dj); /* Register the object to the directoy */ + } if (res != FR_OK) { - remove_chain(dj.fs, dcl); /* Could not register, remove cluster chain */ + (void)remove_chain(dj.fs, dcl); /* Could not register, remove cluster chain */ } else { dir = dj.dir; - dir[DIR_Attr] = AM_DIR; /* Attribute */ + (*(dir+DIR_Attr)) = AM_DIR; /* Attribute */ ST_DWORD(dir+DIR_WrtTime, tm); /* Created time */ st_clust(dir, dcl); /* Table start cluster */ - dj.fs->wflag = 1; + dj.fs->wflag = 1U; res = sync_fs(dj.fs); } } @@ -3589,27 +4073,28 @@ FRESULT f_chmod ( ) { FRESULT res; - DIR dj; + DIR dj = {0}; BYTE *dir; DEF_NAMEBUF; /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 1); + res = find_volume(&dj.fs, &path, 1U); if (res == FR_OK) { INIT_BUF(dj); res = follow_path(&dj, path); /* Follow the file path */ FREE_BUF(); - if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) + if (_FS_RPATH && (res == FR_OK) && ((dj.fn[NS] & NS_DOT) != (BYTE)0U)) { res = FR_INVALID_NAME; + } if (res == FR_OK) { dir = dj.dir; - if (!dir) { /* Is it a root directory? */ + if ((!dir) != 0U) { /* Is it a root directory? */ res = FR_INVALID_NAME; } else { /* File or sub directory */ mask &= AM_RDO|AM_HID|AM_SYS|AM_ARC; /* Valid attribute mask */ - dir[DIR_Attr] = (value & mask) | (dir[DIR_Attr] & (BYTE)~mask); /* Apply attribute change */ - dj.fs->wflag = 1; + (*(dir+DIR_Attr)) = (value & mask) | ((*(dir+DIR_Attr)) & (BYTE)~mask); /* Apply attribute change */ + dj.fs->wflag = 1U; res = sync_fs(dj.fs); } } @@ -3631,27 +4116,28 @@ FRESULT f_utime ( ) { FRESULT res; - DIR dj; + DIR dj = {0}; BYTE *dir; DEF_NAMEBUF; /* Get logical drive number */ - res = find_volume(&dj.fs, &path, 1); + res = find_volume(&dj.fs, &path, 1U); if (res == FR_OK) { INIT_BUF(dj); res = follow_path(&dj, path); /* Follow the file path */ FREE_BUF(); - if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT)) + if (_FS_RPATH && (res == FR_OK) && ((dj.fn[NS] & NS_DOT) != (BYTE)0U)) { res = FR_INVALID_NAME; + } if (res == FR_OK) { dir = dj.dir; - if (!dir) { /* Root directory */ + if ((!dir) != 0U) { /* Root directory */ res = FR_INVALID_NAME; } else { /* File or sub-directory */ ST_WORD(dir+DIR_WrtTime, fno->ftime); ST_WORD(dir+DIR_WrtDate, fno->fdate); - dj.fs->wflag = 1; + dj.fs->wflag = 1U; res = sync_fs(dj.fs); } } @@ -3673,60 +4159,69 @@ FRESULT f_rename ( ) { FRESULT res; - DIR djo, djn; - BYTE buf[21], *dir; + DIR djo = {0}, djn = {0}; + BYTE buf[21] = {0}; + BYTE *dir; DWORD dw; DEF_NAMEBUF; /* Get logical drive number of the source object */ - res = find_volume(&djo.fs, &path_old, 1); + res = find_volume(&djo.fs, &path_old, 1U); if (res == FR_OK) { djn.fs = djo.fs; INIT_BUF(djo); res = follow_path(&djo, path_old); /* Check old object */ - if (_FS_RPATH && res == FR_OK && (djo.fn[NS] & NS_DOT)) + if (_FS_RPATH && (res == FR_OK) && ((djo.fn[NS] & NS_DOT) != (BYTE)0U)) { res = FR_INVALID_NAME; + } #if _FS_LOCK - if (res == FR_OK) res = chk_lock(&djo, 2); + if (res == FR_OK) { + res = chk_lock(&djo, 2); + } #endif if (res == FR_OK) { /* Old object is found */ - if (!djo.dir) { /* Is root dir? */ + if (djo.dir == NULL) { /* Is root dir? */ res = FR_NO_FILE; } else { - mem_cpy(buf, djo.dir+DIR_Attr, 21); /* Save the object information except name */ + mem_cpy(buf, djo.dir+DIR_Attr, 21U); /* Save the object information except name */ mem_cpy(&djn, &djo, sizeof (DIR)); /* Duplicate the directory object */ - if (get_ldnumber(&path_new) >= 0) /* Snip drive number off and ignore it */ + if (get_ldnumber(&path_new) >= 0) { /* Snip drive number off and ignore it */ res = follow_path(&djn, path_new); /* and check if new object is exist */ - else + } + else { res = FR_INVALID_DRIVE; - if (res == FR_OK) res = FR_EXIST; /* The new object name is already existing */ + } + if (res == FR_OK) { + res = FR_EXIST; /* The new object name is already existing */ + } if (res == FR_NO_FILE) { /* Is it a valid path and no name collision? */ /* Start critical section that any interruption can cause a cross-link */ res = dir_register(&djn); /* Register the new entry */ if (res == FR_OK) { dir = djn.dir; /* Copy object information except name */ - mem_cpy(dir+13, buf+2, 19); - dir[DIR_Attr] = buf[0] | AM_ARC; - djo.fs->wflag = 1; - if (djo.sclust != djn.sclust && (dir[DIR_Attr] & AM_DIR)) { /* Update .. entry in the directory if needed */ + mem_cpy(dir+13, buf+2, 19U); + (*(dir+DIR_Attr)) = buf[0] | AM_ARC; + djo.fs->wflag = 1U; + if ((djo.sclust != djn.sclust) && (((*(dir+DIR_Attr)) & AM_DIR) != (BYTE)0U)) { /* Update .. entry in the directory if needed */ dw = clust2sect(djo.fs, ld_clust(djo.fs, dir)); - if (!dw) { + if ((!dw) != 0U) { res = FR_INT_ERR; } else { res = move_window(djo.fs, dw); dir = djo.fs->win+SZ_DIR; /* .. entry */ - if (res == FR_OK && dir[1] == '.') { - dw = (djo.fs->fs_type == FS_FAT32 && djn.sclust == djo.fs->dirbase) ? 0 : djn.sclust; + if ((res == FR_OK) && ((*(dir+1)) == ((BYTE)'.'))) { + dw = ((djo.fs->fs_type == FS_FAT32) && (djn.sclust == djo.fs->dirbase)) ? ((DWORD)0) : djn.sclust; st_clust(dir, dw); - djo.fs->wflag = 1; + djo.fs->wflag = 1U; } } } if (res == FR_OK) { res = dir_remove(&djo); /* Remove old entry */ - if (res == FR_OK) + if (res == FR_OK) { res = sync_fs(djo.fs); + } } } /* End critical section */ @@ -3777,8 +4272,9 @@ FRESULT f_getlabel ( i = j = 0; do { w = (i < 11) ? dj.dir[i++] : ' '; - if (IsDBCS1(w) && i < 11 && IsDBCS2(dj.dir[i])) + if (IsDBCS1(w) && (i < 11) && IsDBCS2(dj.dir[i])) { w = w << 8 | dj.dir[i++]; + } label[j++] = ff_convert(w, 1); /* OEM -> Unicode */ } while (j < 11); #else @@ -3787,7 +4283,9 @@ FRESULT f_getlabel ( j = 11; do { label[j] = 0; - if (!j) break; + if ((!j) != 0U) { + break; + } } while (label[--j] == ' '); } if (res == FR_NO_FILE) { /* No label, return nul string */ @@ -3830,7 +4328,9 @@ FRESULT f_setlabel ( /* Get logical drive number */ res = find_volume(&dj.fs, &label, 1); - if (res) LEAVE_FF(dj.fs, res); + if (res) { + LEAVE_FF(dj.fs, res); + } /* Create a volume label in directory form */ vn[0] = 0; @@ -3843,22 +4343,32 @@ FRESULT f_setlabel ( w = ff_convert(ff_wtoupper(label[i++]), 0); #else w = (BYTE)label[i++]; - if (IsDBCS1(w)) - w = (j < 10 && i < sl && IsDBCS2(label[i])) ? w << 8 | (BYTE)label[i++] : 0; + if (IsDBCS1(w)) { + w = ((j < 10) && (i < sl) && IsDBCS2(label[i])) ? w << 8 | (BYTE)label[i++] : 0; + } #if _USE_LFN w = ff_convert(ff_wtoupper(ff_convert(w, 1)), 0); #else - if (IsLower(w)) w -= 0x20; /* To upper ASCII characters */ + if (IsLower(w)) { + w -= 0x20; /* To upper ASCII characters */ + } #ifdef _EXCVT - if (w >= 0x80) w = ExCvt[w - 0x80]; /* To upper extended characters (SBCS cfg) */ + if (w >= 0x80) { + w = ExCvt[w - 0x80]; /* To upper extended characters (SBCS cfg) */ + } #else - if (!_DF1S && w >= 0x80) w = 0; /* Reject extended characters (ASCII cfg) */ + if (((!DF1S) != 0U) && ((w >= 0x80) != 0U)) { + w = 0; /* Reject extended characters (ASCII cfg) */ + } #endif #endif #endif - if (!w || chk_chr("\"*+,.:;<=>\?[]|\x7F", w) || j >= (UINT)((w >= 0x100) ? 10 : 11)) /* Reject invalid characters for volume label */ + if ((!w) || chk_chr("\"*+,.:;<=>\?[]|\x7F", w) || j >= (UINT)((w >= 0x100) ? 10 : 11)) {/* Reject invalid characters for volume label */ LEAVE_FF(dj.fs, FR_INVALID_NAME); - if (w >= 0x100) vn[j++] = (BYTE)(w >> 8); + } + if (w >= 0x100) { + vn[j++] = (BYTE)(w >> 8); + } vn[j++] = (BYTE)w; } while (i < sl); while (j < 11) vn[j++] = ' '; @@ -3927,14 +4437,20 @@ FRESULT f_forward ( *bf = 0; /* Clear transfer byte counter */ res = validate(fp); /* Check validity of the object */ - if (res != FR_OK) LEAVE_FF(fp->fs, res); - if (fp->err) /* Check error */ + if (res != FR_OK) { + LEAVE_FF(fp->fs, res); + } + if (fp->err) { /* Check error */ LEAVE_FF(fp->fs, (FRESULT)fp->err); - if (!(fp->flag & FA_READ)) /* Check access mode */ + } + if ((!(fp->flag & FA_READ)) != 0U) { /* Check access mode */ LEAVE_FF(fp->fs, FR_DENIED); + } remain = fp->fsize - fp->fptr; - if (btf > remain) btf = (UINT)remain; /* Truncate btf by remaining bytes */ + if (btf > remain) { + btf = (UINT)remain; /* Truncate btf by remaining bytes */ + } for ( ; btf && (*func)(0, 0); /* Repeat until all data transferred or stream becomes busy */ fp->fptr += rcnt, *bf += rcnt, btf -= rcnt) { @@ -3943,21 +4459,32 @@ FRESULT f_forward ( if (!csect) { /* On the cluster boundary? */ clst = (fp->fptr == 0) ? /* On the top of the file? */ fp->sclust : get_fat(fp->fs, fp->clust); - if (clst <= 1) ABORT(fp->fs, FR_INT_ERR); - if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); + if (clst <= 1) { + ABORT(fp->fs, FR_INT_ERR); + } + if (clst == 0xFFFFFFFF) { + ABORT(fp->fs, FR_DISK_ERR); + } fp->clust = clst; /* Update current cluster */ } } sect = clust2sect(fp->fs, fp->clust); /* Get current data sector */ - if (!sect) ABORT(fp->fs, FR_INT_ERR); + if ((!sect) != 0U) { + ABORT(fp->fs, FR_INT_ERR); + } sect += csect; - if (move_window(fp->fs, sect)) /* Move sector window */ + if (move_window(fp->fs, sect)) { /* Move sector window */ ABORT(fp->fs, FR_DISK_ERR); + } fp->dsect = sect; rcnt = SS(fp->fs) - (WORD)(fp->fptr % SS(fp->fs)); /* Forward data from sector window */ - if (rcnt > btf) rcnt = btf; + if (rcnt > btf) { + rcnt = btf; + } rcnt = (*func)(&fp->fs->win[(WORD)fp->fptr % SS(fp->fs)], rcnt); - if (!rcnt) ABORT(fp->fs, FR_INT_ERR); + if ((!rcnt) != 0U) { + ABORT(fp->fs, FR_INT_ERR); + } } LEAVE_FF(fp->fs, FR_OK); @@ -3994,53 +4521,81 @@ FRESULT f_mkfs ( /* Check mounted drive and clear work area */ vol = get_ldnumber(&path); - if (vol < 0) return FR_INVALID_DRIVE; - if (sfd > 1) return FR_INVALID_PARAMETER; - if (au & (au - 1)) return FR_INVALID_PARAMETER; + if (vol < 0) { + return FR_INVALID_DRIVE; + } + if (sfd > 1) { + return FR_INVALID_PARAMETER; + } + if (au & (au - 1)) { + return FR_INVALID_PARAMETER; + } fs = FatFs[vol]; - if (!fs) return FR_NOT_ENABLED; + if ((!fs) != 0U) { + return FR_NOT_ENABLED; + } fs->fs_type = 0; pdrv = LD2PD(vol); /* Physical drive */ part = LD2PT(vol); /* Partition (0:auto detect, 1-4:get from partition table)*/ /* Get disk statics */ stat = disk_initialize(pdrv); - if (stat & STA_NOINIT) return FR_NOT_READY; - if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; + if (stat & STA_NOINIT) { + return FR_NOT_READY; + } + if (stat & STA_PROTECT) { + return FR_WRITE_PROTECTED; + } #if _MAX_SS != _MIN_SS /* Get disk sector size */ - if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) > _MAX_SS || SS(fs) < _MIN_SS) + if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || (SS(fs) > _MAX_SS) || (SS(fs) < _MIN_SS)) { return FR_DISK_ERR; + } #endif if (_MULTI_PARTITION && part) { /* Get partition information from partition table in the MBR */ - if (disk_read(pdrv, fs->win, 0, 1)) return FR_DISK_ERR; - if (LD_WORD(fs->win+BS_55AA) != 0xAA55) return FR_MKFS_ABORTED; + if (disk_read(pdrv, fs->win, 0, 1) != RES_OK) { + return FR_DISK_ERR; + } + if (LD_WORD(fs->win+BS_55AA) != 0xAA55) { + return FR_MKFS_ABORTED; + } tbl = &fs->win[MBR_Table + (part - 1) * SZ_PTE]; - if (!tbl[4]) return FR_MKFS_ABORTED; /* No partition? */ + if ((!tbl[4]) != 0U) { + return FR_MKFS_ABORTED; /* No partition? */ + } b_vol = LD_DWORD(tbl+8); /* Volume start sector */ n_vol = LD_DWORD(tbl+12); /* Volume size */ } else { /* Create a partition in this function */ - if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &n_vol) != RES_OK || n_vol < 128) + if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &n_vol) != RES_OK || (n_vol < 128)) { return FR_DISK_ERR; + } b_vol = (sfd) ? 0 : 63; /* Volume start sector */ n_vol -= b_vol; /* Volume size */ } - if (!au) { /* AU auto selection */ + if ((!au) != 0U) { /* AU auto selection */ vs = n_vol / (2000 / (SS(fs) / 512)); for (i = 0; vs < vst[i]; i++) ; au = cst[i]; } au /= SS(fs); /* Number of sectors per cluster */ - if (au == 0) au = 1; - if (au > 128) au = 128; + if (au == 0) { + au = 1; + } + if (au > 128) { + au = 128; + } /* Pre-compute number of clusters and FAT sub-type */ n_clst = n_vol / au; fmt = FS_FAT12; - if (n_clst >= MIN_FAT16) fmt = FS_FAT16; - if (n_clst >= MIN_FAT32) fmt = FS_FAT32; + if (n_clst >= MIN_FAT16) { + fmt = FS_FAT16; + } + if (n_clst >= MIN_FAT32) { + fmt = FS_FAT32; + } /* Determine offset and size of FAT structure */ if (fmt == FS_FAT32) { @@ -4056,10 +4611,14 @@ FRESULT f_mkfs ( b_fat = b_vol + n_rsv; /* FAT area start sector */ b_dir = b_fat + n_fat * N_FATS; /* Directory area start sector */ b_data = b_dir + n_dir; /* Data area start sector */ - if (n_vol < b_data + au - b_vol) return FR_MKFS_ABORTED; /* Too small volume */ + if (n_vol < b_data + au - b_vol) { + return FR_MKFS_ABORTED; /* Too small volume */ + } /* Align data start sector to erase block boundary (for flash memory media) */ - if (disk_ioctl(pdrv, GET_BLOCK_SIZE, &n) != RES_OK || !n || n > 32768) n = 1; + if (disk_ioctl(pdrv, GET_BLOCK_SIZE, &n) != RES_OK || (!n) || (n > 32768)) { + n = 1; + } n = (b_data + n - 1) & ~(n - 1); /* Next nearest erase block from current data start */ n = (n - b_data) / N_FATS; if (fmt == FS_FAT32) { /* FAT32: Move FAT offset */ @@ -4072,8 +4631,9 @@ FRESULT f_mkfs ( /* Determine number of clusters and final check of validity of the FAT sub-type */ n_clst = (n_vol - n_rsv - n_fat * N_FATS - n_dir) / au; if ( (fmt == FS_FAT16 && n_clst < MIN_FAT16) - || (fmt == FS_FAT32 && n_clst < MIN_FAT32)) + || (fmt == FS_FAT32 && n_clst < MIN_FAT32)) { return FR_MKFS_ABORTED; + } /* Determine system ID in the partition table */ if (fmt == FS_FAT32) { @@ -4090,8 +4650,9 @@ FRESULT f_mkfs ( /* Update system ID in the partition table */ tbl = &fs->win[MBR_Table + (part - 1) * SZ_PTE]; tbl[4] = sys; - if (disk_write(pdrv, fs->win, 0, 1)) /* Write it to teh MBR */ + if (disk_write(pdrv, fs->win, 0, 1) != 0U) { /* Write it to teh MBR */ return FR_DISK_ERR; + } md = 0xF8; } else { if (sfd) { /* No partition table (SFD) */ @@ -4110,8 +4671,9 @@ FRESULT f_mkfs ( ST_DWORD(tbl+8, 63); /* Partition start in LBA */ ST_DWORD(tbl+12, n_vol); /* Partition size in LBA */ ST_WORD(fs->win+BS_55AA, 0xAA55); /* MBR signature */ - if (disk_write(pdrv, fs->win, 0, 1)) /* Write it to the MBR */ + if (disk_write(pdrv, fs->win, 0, 1) != RES_OK) { /* Write it to the MBR */ return FR_DISK_ERR; + } md = 0xF8; } } @@ -4154,10 +4716,12 @@ FRESULT f_mkfs ( mem_cpy(tbl+BS_VolLab, "NO NAME " "FAT ", 19); /* Volume label, FAT signature */ } ST_WORD(tbl+BS_55AA, 0xAA55); /* Signature (Offset is fixed here regardless of sector size) */ - if (disk_write(pdrv, tbl, b_vol, 1)) /* Write it to the VBR sector */ + if (disk_write(pdrv, tbl, b_vol, 1) != RES_OK) { /* Write it to the VBR sector */ return FR_DISK_ERR; - if (fmt == FS_FAT32) /* Write backup VBR if needed (VBR+6) */ + } + if (fmt == FS_FAT32) { /* Write backup VBR if needed (VBR+6) */ disk_write(pdrv, tbl, b_vol + 6, 1); + } /* Initialize FAT area */ wsect = b_fat; @@ -4173,20 +4737,23 @@ FRESULT f_mkfs ( ST_DWORD(tbl+4, 0xFFFFFFFF); ST_DWORD(tbl+8, 0x0FFFFFFF); /* Reserve cluster #2 for root directory */ } - if (disk_write(pdrv, tbl, wsect++, 1)) + if (disk_write(pdrv, tbl, wsect++, 1) != RES_OK) { return FR_DISK_ERR; + } mem_set(tbl, 0, SS(fs)); /* Fill following FAT entries with zero */ for (n = 1; n < n_fat; n++) { /* This loop may take a time on FAT32 volume due to many single sector writes */ - if (disk_write(pdrv, tbl, wsect++, 1)) + if (disk_write(pdrv, tbl, wsect++, 1) != RES_OK) { return FR_DISK_ERR; + } } } /* Initialize root directory */ i = (fmt == FS_FAT32) ? au : (UINT)n_dir; do { - if (disk_write(pdrv, tbl, wsect++, 1)) + if (disk_write(pdrv, tbl, wsect++, 1) != RES_OK) { return FR_DISK_ERR; + } } while (--i); #if _USE_ERASE /* Erase data area if needed */ @@ -4209,7 +4776,7 @@ FRESULT f_mkfs ( disk_write(pdrv, tbl, b_vol + 7, 1); /* Write backup (VBR+7) */ } - return (disk_ioctl(pdrv, CTRL_SYNC, 0) == RES_OK) ? FR_OK : FR_DISK_ERR; + return (disk_ioctl(pdrv, CTRL_SYNC, (void *)0) == RES_OK) ? FR_OK : FR_DISK_ERR; } @@ -4232,13 +4799,21 @@ FRESULT f_fdisk ( stat = disk_initialize(pdrv); - if (stat & STA_NOINIT) return FR_NOT_READY; - if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; - if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_disk)) return FR_DISK_ERR; + if (stat & STA_NOINIT) { + return FR_NOT_READY; + } + if (stat & STA_PROTECT) { + return FR_WRITE_PROTECTED; + } + if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_disk)) { + return FR_DISK_ERR; + } /* Determine CHS in the table regardless of the drive geometry */ for (n = 16; n < 256 && sz_disk / n / 63 > 1024; n *= 2) ; - if (n == 256) n--; + if (n == 256) { + n--; + } e_hd = n - 1; sz_cyl = 63 * n; tot_cyl = sz_disk / sz_cyl; @@ -4258,7 +4833,9 @@ FRESULT f_fdisk ( s_hd = 0; } e_cyl = b_cyl + p_cyl - 1; - if (e_cyl >= tot_cyl) return FR_INVALID_PARAMETER; + if (e_cyl >= tot_cyl) { + return FR_INVALID_PARAMETER; + } /* Set partition table */ p[1] = s_hd; /* Start head */ @@ -4294,11 +4871,11 @@ FRESULT f_fdisk ( TCHAR* f_gets ( TCHAR* buff, /* Pointer to the string buffer to read */ - int len, /* Size of string buffer (characters) */ + s32 len, /* Size of string buffer (characters) */ FIL* fp /* Pointer to the file object */ ) { - int n = 0; + s32 n = 0; TCHAR c, *p = buff; BYTE s[2]; UINT rc; @@ -4308,21 +4885,33 @@ TCHAR* f_gets ( #if _USE_LFN && _LFN_UNICODE #if _STRF_ENCODE == 3 /* Read a character in UTF-8 */ f_read(fp, s, 1, &rc); - if (rc != 1) break; + if (rc != 1) { + break; + } c = s[0]; if (c >= 0x80) { - if (c < 0xC0) continue; /* Skip stray trailer */ + if (c < 0xC0) { + continue; /* Skip stray trailer */ + } if (c < 0xE0) { /* Two-byte sequence */ f_read(fp, s, 1, &rc); - if (rc != 1) break; - c = (c & 0x1F) << 6 | (s[0] & 0x3F); - if (c < 0x80) c = '?'; + if (rc != 1) { + break; + } + c = ((c & 0x1F) << 6 )| (s[0] & 0x3F); + if (c < 0x80) { + c = '?'; + } } else { if (c < 0xF0) { /* Three-byte sequence */ f_read(fp, s, 2, &rc); - if (rc != 2) break; - c = c << 12 | (s[0] & 0x3F) << 6 | (s[1] & 0x3F); - if (c < 0x800) c = '?'; + if (rc != 2) { + break; + } + c = (c << 12) | ((s[0] & 0x3F) << 6) | (s[1] & 0x3F); + if (c < 0x800) { + c = '?'; + } } else { /* Reject four-byte sequence */ c = '?'; } @@ -4330,15 +4919,21 @@ TCHAR* f_gets ( } #elif _STRF_ENCODE == 2 /* Read a character in UTF-16BE */ f_read(fp, s, 2, &rc); - if (rc != 2) break; + if (rc != 2) { + break; + } c = s[1] + (s[0] << 8); #elif _STRF_ENCODE == 1 /* Read a character in UTF-16LE */ f_read(fp, s, 2, &rc); - if (rc != 2) break; + if (rc != 2) { + break; + } c = s[0] + (s[1] << 8); #else /* Read a character in ANSI/OEM */ f_read(fp, s, 1, &rc); - if (rc != 1) break; + if (rc != 1) { + break; + } c = s[0]; if (IsDBCS1(c)) { f_read(fp, s, 1, &rc); @@ -4346,17 +4941,25 @@ TCHAR* f_gets ( c = (c << 8) + s[0]; } c = ff_convert(c, 1); /* OEM -> Unicode */ - if (!c) c = '?'; + if ((!c) != 0U) { + c = '?'; + } #endif #else /* Read a character without conversion */ f_read(fp, s, 1, &rc); - if (rc != 1) break; + if (rc != 1) { + break; + } c = s[0]; #endif - if (_USE_STRFUNC == 2 && c == '\r') continue; /* Strip '\r' */ + if ((_USE_STRFUNC == 2) && (c == '\r')){ + continue; /* Strip '\r' */ + } *p++ = c; n++; - if (c == '\n') break; /* Break on EOL */ + if (c == '\n') { + break; /* Break on EOL */ + } } *p = 0; return n ? buff : 0; /* When no data read (eof or error), return with error. */ @@ -4372,7 +4975,7 @@ TCHAR* f_gets ( typedef struct { FIL* fp; - int idx, nchr; + s32 idx, nchr; BYTE buf[64]; } putbuff; @@ -4384,14 +4987,17 @@ void putc_bfd ( ) { UINT bw; - int i; + s32 i; - if (_USE_STRFUNC == 2 && c == '\n') /* LF -> CRLF conversion */ + if ((_USE_STRFUNC == 2) && (c == '\n')) { /* LF -> CRLF conversion */ putc_bfd(pb, '\r'); + } i = pb->idx; /* Buffer write index (-1:error) */ - if (i < 0) return; + if (i < 0) { + return; + } #if _USE_LFN && _LFN_UNICODE #if _STRF_ENCODE == 3 /* Write a character in UTF-8 */ @@ -4414,9 +5020,12 @@ void putc_bfd ( pb->buf[i++] = (BYTE)(c >> 8); #else /* Write a character in ANSI/OEM */ c = ff_convert(c, 0); /* Unicode -> OEM */ - if (!c) c = '?'; - if (c >= 0x100) + if ((!c) != 0U) { + c = '?'; + } + if (c >= 0x100) { pb->buf[i++] = (BYTE)(c >> 8); + } pb->buf[i++] = (BYTE)c; #endif #else /* Write a character without conversion */ @@ -4449,7 +5058,9 @@ int f_putc ( if ( pb.idx >= 0 /* Flush buffered characters to the file */ && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK - && (UINT)pb.idx == nw) return pb.nchr; + && (UINT)pb.idx == nw) { + return pb.nchr; + } return EOF; } @@ -4472,12 +5083,15 @@ int f_puts ( pb.fp = fp; /* Initialize output buffer */ pb.nchr = pb.idx = 0; - while (*str) /* Put the string */ + while (*str) { /* Put the string */ putc_bfd(&pb, *str++); + } if ( pb.idx >= 0 /* Flush buffered characters to the file */ && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK - && (UINT)pb.idx == nw) return pb.nchr; + && (UINT)pb.idx == nw) { + return pb.nchr; + } return EOF; } @@ -4509,9 +5123,12 @@ int f_printf ( for (;;) { c = *fmt++; - if (c == 0) break; /* End of string */ + if (c == 0) { + break; /* End of string */ + } if (c != '%') { /* Non escape character */ putc_bfd(&pb, c); + } continue; } w = f = 0; @@ -4527,12 +5144,16 @@ int f_printf ( w = w * 10 + c - '0'; c = *fmt++; } - if (c == 'l' || c == 'L') { /* Prefix: Size is long int */ + if ((c == 'l') || (c == 'L')) { /* Prefix: Size is long int */ f |= 4; c = *fmt++; } - if (!c) break; + if ((!c) != 0U) { + break; + } d = c; - if (IsLower(d)) d -= 0x20; + if (IsLower(d)) { + d -= 0x20; + } switch (d) { /* Type is... */ case 'S' : /* String */ p = va_arg(arp, TCHAR*); @@ -4540,8 +5161,12 @@ int f_printf ( if (!(f & 2)) { while (j++ < w) putc_bfd(&pb, ' '); } - while (*p) putc_bfd(&pb, *p++); - while (j++ < w) putc_bfd(&pb, ' '); + while (*p) { + putc_bfd(&pb, *p++); + } + while (j++ < w) { + putc_bfd(&pb, ' '); + } continue; case 'C' : /* Character */ putc_bfd(&pb, (TCHAR)va_arg(arp, int)); continue; @@ -4567,21 +5192,31 @@ int f_printf ( i = 0; do { d = (TCHAR)(v % r); v /= r; - if (d > 9) d += (c == 'x') ? 0x27 : 0x07; + if (d > 9) { + d += (c == 'x') ? 0x27 : 0x07; + } s[i++] = d + '0'; } while (v && i < sizeof s / sizeof s[0]); - if (f & 8) s[i++] = '-'; + if (f & 8) { + s[i++] = '-'; + } j = i; d = (f & 1) ? '0' : ' '; - while (!(f & 2) && j++ < w) putc_bfd(&pb, d); + while (((!(f & 2)) != 0U) && ((j++ < w) != 0U)) { + putc_bfd(&pb, d); + } do putc_bfd(&pb, s[--i]); while (i); - while (j++ < w) putc_bfd(&pb, d); + while (j++ < w) { + putc_bfd(&pb, d); + } } va_end(arp); if ( pb.idx >= 0 /* Flush buffered characters to the file */ && f_write(pb.fp, pb.buf, (UINT)pb.idx, &nw) == FR_OK - && (UINT)pb.idx == nw) return pb.nchr; + && (UINT)pb.idx == nw) { + return pb.nchr; + } return EOF; } diff --git a/lib/sw_services/xilffs/src/include/diskio.h b/lib/sw_services/xilffs/src/include/diskio.h index 4d72b910..22ce24a0 100755 --- a/lib/sw_services/xilffs/src/include/diskio.h +++ b/lib/sw_services/xilffs/src/include/diskio.h @@ -2,18 +2,18 @@ / Low level disk interface modlue include file (C)ChaN, 2013 / /-----------------------------------------------------------------------*/ -#ifndef _DISKIO_DEFINED -#define _DISKIO_DEFINED +#ifndef DISKIO_DEFINED +#define DISKIO_DEFINED #ifdef __cplusplus extern "C" { #endif -#define _USE_WRITE 1 /* 1: Enable disk_write function */ -#define _USE_IOCTL 1 /* 1: Enable disk_ioctl fucntion */ +#define USE_WRITE 1 /* 1: Enable disk_write function */ +#define USE_IOCTL 1 /* 1: Enable disk_ioctl fucntion */ #include "integer.h" - +#include "xil_types.h" /* Status of Disk Functions */ typedef BYTE DSTATUS; @@ -31,7 +31,6 @@ typedef enum { /*---------------------------------------*/ /* Prototypes for disk control functions */ - DSTATUS disk_initialize (BYTE pdrv); DSTATUS disk_status (BYTE pdrv); DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count); @@ -41,37 +40,37 @@ DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff); /* Disk Status Bits (DSTATUS) */ -#define STA_NOINIT 0x01 /* Drive not initialized */ -#define STA_NODISK 0x02 /* No medium in the drive */ -#define STA_PROTECT 0x04 /* Write protected */ +#define STA_NOINIT 0x01U /* Drive not initialized */ +#define STA_NODISK 0x02U /* No medium in the drive */ +#define STA_PROTECT 0x04U /* Write protected */ /* Command code for disk_ioctrl fucntion */ /* Generic command (used by FatFs) */ -#define CTRL_SYNC 0 /* Flush disk cache (for write functions) */ -#define GET_SECTOR_COUNT 1 /* Get media size (for only f_mkfs()) */ -#define GET_SECTOR_SIZE 2 /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */ -#define GET_BLOCK_SIZE 3 /* Get erase block size (for only f_mkfs()) */ -#define CTRL_ERASE_SECTOR 4 /* Force erased a block of sectors (for only _USE_ERASE) */ +#define CTRL_SYNC 0U /* Flush disk cache (for write functions) */ +#define GET_SECTOR_COUNT 1U /* Get media size (for only f_mkfs()) */ +#define GET_SECTOR_SIZE 2U /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */ +#define GET_BLOCK_SIZE 3U /* Get erase block size (for only f_mkfs()) */ +#define CTRL_ERASE_SECTOR 4U /* Force erased a block of sectors (for only _USE_ERASE) */ /* Generic command (not used by FatFs) */ -#define CTRL_POWER 5 /* Get/Set power status */ -#define CTRL_LOCK 6 /* Lock/Unlock media removal */ -#define CTRL_EJECT 7 /* Eject media */ -#define CTRL_FORMAT 8 /* Create physical format on the media */ +#define CTRL_POWER 5U /* Get/Set power status */ +#define CTRL_LOCK 6U /* Lock/Unlock media removal */ +#define CTRL_EJECT 7U /* Eject media */ +#define CTRL_FORMAT 8U /* Create physical format on the media */ /* MMC/SDC specific ioctl command */ -#define MMC_GET_TYPE 10 /* Get card type */ -#define MMC_GET_CSD 11 /* Get CSD */ -#define MMC_GET_CID 12 /* Get CID */ -#define MMC_GET_OCR 13 /* Get OCR */ -#define MMC_GET_SDSTAT 14 /* Get SD status */ +#define MMC_GET_TYPE 10U /* Get card type */ +#define MMC_GET_CSD 11U /* Get CSD */ +#define MMC_GET_CID 12U /* Get CID */ +#define MMC_GET_OCR 13U /* Get OCR */ +#define MMC_GET_SDSTAT 14U /* Get SD status */ /* ATA/CF specific ioctl command */ -#define ATA_GET_REV 20 /* Get F/W revision */ -#define ATA_GET_MODEL 21 /* Get model name */ -#define ATA_GET_SN 22 /* Get serial number */ +#define ATA_GET_REV 20U /* Get F/W revision */ +#define ATA_GET_MODEL 21U /* Get model name */ +#define ATA_GET_SN 22U /* Get serial number */ #ifdef __cplusplus } diff --git a/lib/sw_services/xilffs/src/include/ff.h b/lib/sw_services/xilffs/src/include/ff.h index a93d9a2d..d611ba9c 100755 --- a/lib/sw_services/xilffs/src/include/ff.h +++ b/lib/sw_services/xilffs/src/include/ff.h @@ -14,17 +14,18 @@ / /----------------------------------------------------------------------------*/ -#ifndef _FATFS -#define _FATFS 8051 /* Revision ID */ +#ifndef FAT_FS +#define FAT_FS 8051 /* Revision ID */ #ifdef __cplusplus extern "C" { #endif +#include "xil_types.h" #include "integer.h" /* Basic integer types */ #include "ffconf.h" /* FatFs configuration options */ -#if _FATFS != _FFCONF +#if FAT_FS != _FFCONF #error Wrong configuration file (ffconf.h). #endif @@ -42,8 +43,8 @@ extern PARTITION VolToPart[]; /* Volume - Partition resolution table */ #define LD2PT(vol) (VolToPart[vol].pt) /* Get partition index */ #else /* Single partition configuration */ -#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is bound to the same physical drive number */ -#define LD2PT(vol) 0 /* Find first valid partition or in SFD */ +#define LD2PD(vol) (BYTE)((vol)) /* Each logical drive is bound to the same physical drive number */ +#define LD2PT(vol) 0U /* Find first valid partition or in SFD */ #endif @@ -57,15 +58,15 @@ extern PARTITION VolToPart[]; /* Volume - Partition resolution table */ #endif #ifndef _INC_TCHAR typedef WCHAR TCHAR; -#define _T(x) L ## x -#define _TEXT(x) L ## x +#define T(x) L ## x +#define TEXT(x) L ## x #endif #else /* ANSI/OEM string */ #ifndef _INC_TCHAR typedef char TCHAR; -#define _T(x) x -#define _TEXT(x) x +#define T(x) (x) +#define TEXT(x) (x) #endif #endif @@ -103,7 +104,13 @@ typedef struct { DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */ DWORD database; /* Data start sector */ DWORD winsect; /* Current sector appearing in the win[] */ - BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg) */ +#ifdef __ICCARM__ +#pragma data_alignment = 32 + BYTE win[_MAX_SS]; +#pragma data_alignment = 4 +#else + BYTE win[_MAX_SS] __attribute__ ((aligned(32))); /* Disk access window for Directory, FAT (and Data on tiny cfg) */ +#endif } FATFS; @@ -131,7 +138,13 @@ typedef struct { UINT lockid; /* File lock ID origin from 1 (index of file semaphore table Files[]) */ #endif #if !_FS_TINY - BYTE buf[_MAX_SS]; /* File private data read/write window */ +#ifdef __ICCARM__ +#pragma data_alignment = 32 + BYTE buf[_MAX_SS]; /* File data read/write buffer */ +#pragma data_alignment = 4 +#else + BYTE buf[_MAX_SS] __attribute__ ((aligned(32))); /* File data read/write buffer */ +#endif #endif } FIL; @@ -178,7 +191,7 @@ typedef struct { /* File function return code (FRESULT) */ typedef enum { - FR_OK = 0, /* (0) Succeeded */ + FR_OK = 0U, /* (0) Succeeded */ FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */ FR_INT_ERR, /* (2) Assertion failed */ FR_NOT_READY, /* (3) The physical drive cannot work */ @@ -209,37 +222,67 @@ FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode); /* Open or create a f FRESULT f_close (FIL* fp); /* Close an open file object */ FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br); /* Read data from a file */ FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw); /* Write data to a file */ +#if _USE_FORWARD FRESULT f_forward (FIL* fp, UINT(*func)(const BYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream */ +#endif FRESULT f_lseek (FIL* fp, DWORD ofs); /* Move file pointer of a file object */ -FRESULT f_truncate (FIL* fp); /* Truncate file */ FRESULT f_sync (FIL* fp); /* Flush cached data of a writing file */ +#if _FS_MINIMIZE <= 2 +#if _FS_MINIMIZE <= 1 FRESULT f_opendir (DIR* dp, const TCHAR* path); /* Open a directory */ FRESULT f_closedir (DIR* dp); /* Close an open directory */ FRESULT f_readdir (DIR* dp, FILINFO* fno); /* Read a directory item */ -FRESULT f_mkdir (const TCHAR* path); /* Create a sub directory */ -FRESULT f_unlink (const TCHAR* path); /* Delete an existing file or directory */ -FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new); /* Rename/Move a file or directory */ +#if _FS_MINIMIZE == 0 FRESULT f_stat (const TCHAR* path, FILINFO* fno); /* Get file status */ +#if !_FS_READONLY +FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfsys); +FRESULT f_truncate (FIL* fp); /* Truncate file */ +FRESULT f_unlink (const TCHAR* path); /* Delete an existing file or directory */ +FRESULT f_mkdir (const TCHAR* path); /* Create a sub directory */ +FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new); /* Rename/Move a file or directory */ FRESULT f_chmod (const TCHAR* path, BYTE value, BYTE mask); /* Change attribute of the file/dir */ FRESULT f_utime (const TCHAR* path, const FILINFO* fno); /* Change times-tamp of the file/dir */ -FRESULT f_chdir (const TCHAR* path); /* Change current directory */ +#endif +#endif +#endif +#endif +DWORD clust2sect (FATFS* fs, DWORD clst); +DWORD get_fat ( FATFS* fs, DWORD clst); +FRESULT put_fat (FATFS* fs, DWORD clst, DWORD val); +#if _FS_RPATH >= 1 +#if _VOLUMES >= 2 FRESULT f_chdrive (const TCHAR* path); /* Change current drive */ +#endif +FRESULT f_chdir (const TCHAR* path); /* Change current directory */ +#if _FS_RPATH >= 2 FRESULT f_getcwd (TCHAR* buff, UINT len); /* Get current directory */ -FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfs); /* Get number of free clusters on the drive */ +#endif +#endif +#if _USE_LABEL FRESULT f_getlabel (const TCHAR* path, TCHAR* label, DWORD* vsn); /* Get volume label */ +#if !_FS_READONLY FRESULT f_setlabel (const TCHAR* label); /* Set volume label */ +#endif +#endif FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */ +#if _USE_MKFS && !_FS_READONLY FRESULT f_mkfs (const TCHAR* path, BYTE sfd, UINT au); /* Create a file system on the volume */ +#if _MULTI_PARTITION FRESULT f_fdisk (BYTE pdrv, const DWORD szt[], void* work); /* Divide a physical drive into some partitions */ +#endif +#endif +#if _USE_STRFUNC +TCHAR* f_gets (TCHAR* buff, int len, FIL* fp); /* Get a string from the file */ +#if !_FS_READONLY int f_putc (TCHAR c, FIL* fp); /* Put a character to the file */ int f_puts (const TCHAR* str, FIL* cp); /* Put a string to the file */ int f_printf (FIL* fp, const TCHAR* str, ...); /* Put a formatted string to the file */ -TCHAR* f_gets (TCHAR* buff, int len, FIL* fp); /* Get a string from the file */ - +#endif +#endif #define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0) #define f_error(fp) ((fp)->err) #define f_tell(fp) ((fp)->fptr) -#define f_size(fp) ((fp)->fsize) +#define file_size(fp) ((fp)->fsize) #ifndef EOF #define EOF (-1) @@ -283,40 +326,40 @@ int ff_del_syncobj (_SYNC_t sobj); /* Delete a sync object */ /* File access control and file status flags (FIL.flag) */ -#define FA_READ 0x01 -#define FA_OPEN_EXISTING 0x00 +#define FA_READ 0x01U +#define FA_OPEN_EXISTING 0x00U #if !_FS_READONLY -#define FA_WRITE 0x02 -#define FA_CREATE_NEW 0x04 -#define FA_CREATE_ALWAYS 0x08 -#define FA_OPEN_ALWAYS 0x10 -#define FA__WRITTEN 0x20 -#define FA__DIRTY 0x40 +#define FA_WRITE 0x02U +#define FA_CREATE_NEW 0x04U +#define FA_CREATE_ALWAYS 0x08U +#define FA_OPEN_ALWAYS 0x10U +#define FA__WRITTEN 0x20U +#define FA__DIRTY 0x40U #endif /* FAT sub type (FATFS.fs_type) */ -#define FS_FAT12 1 -#define FS_FAT16 2 -#define FS_FAT32 3 +#define FS_FAT12 1U +#define FS_FAT16 2U +#define FS_FAT32 3U /* File attribute bits for directory entry */ -#define AM_RDO 0x01 /* Read only */ -#define AM_HID 0x02 /* Hidden */ -#define AM_SYS 0x04 /* System */ -#define AM_VOL 0x08 /* Volume label */ -#define AM_LFN 0x0F /* LFN entry */ -#define AM_DIR 0x10 /* Directory */ -#define AM_ARC 0x20 /* Archive */ -#define AM_MASK 0x3F /* Mask of defined bits */ +#define AM_RDO 0x01U /* Read only */ +#define AM_HID 0x02U /* Hidden */ +#define AM_SYS 0x04U /* System */ +#define AM_VOL 0x08U /* Volume label */ +#define AM_LFN 0x0FU /* LFN entry */ +#define AM_DIR 0x10U /* Directory */ +#define AM_ARC 0x20U /* Archive */ +#define AM_MASK 0x3FU /* Mask of defined bits */ /* Fast seek feature */ -#define CREATE_LINKMAP 0xFFFFFFFF +#define CREATE_LINKMAP 0xFFFFFFFFU @@ -324,19 +367,19 @@ int ff_del_syncobj (_SYNC_t sobj); /* Delete a sync object */ /* Multi-byte word access macros */ #if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */ -#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr)) +#define LD_WORD(ptr) (*(WORD*)(BYTE*)(ptr)) #define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr)) -#define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val) -#define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) +#define ST_WORD(ptr,val) (*(WORD*)(BYTE*)(ptr))=(WORD)(val) +#define ST_DWORD(ptr,val) (*(DWORD*)(BYTE*)(ptr))=(DWORD)(val) #else /* Use byte-by-byte access to the FAT structure */ -#define LD_WORD(ptr) (WORD)(((WORD)*((BYTE*)(ptr)+1)<<8)|(WORD)*(BYTE*)(ptr)) -#define LD_DWORD(ptr) (DWORD)(((DWORD)*((BYTE*)(ptr)+3)<<24)|((DWORD)*((BYTE*)(ptr)+2)<<16)|((WORD)*((BYTE*)(ptr)+1)<<8)|*(BYTE*)(ptr)) -#define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8) -#define ST_DWORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8); *((BYTE*)(ptr)+2)=(BYTE)((DWORD)(val)>>16); *((BYTE*)(ptr)+3)=(BYTE)((DWORD)(val)>>24) +#define LD_WORD(ptr) (((WORD)*((BYTE*)(ptr)+1U)<<8)|(WORD)*(BYTE*)(ptr)) +#define LD_DWORD(ptr) (DWORD)(((DWORD)*((BYTE*)(ptr)+3U)<<24)|((DWORD)*((BYTE*)(ptr)+2U)<<16)|((WORD)*((BYTE*)(ptr)+1U)<<8)|*(BYTE*)(ptr)) +#define ST_WORD(ptr,val) (*((WORD*)((void *)(ptr))))=((WORD)(val)); (*((WORD *)((ptr)+1U)))=(((WORD)(val))>>8) +#define ST_DWORD(ptr,val) (*((DWORD*)((void *)(ptr))))=((DWORD)(val)); (*((DWORD*)(void *)((ptr)+1U)))=((DWORD)((DWORD)(val)>>8)); (*((DWORD*)(void *)((ptr)+2U)))=((DWORD)((DWORD)(val)>>16)); (*((DWORD*)(void *)((ptr)+3U)))=((DWORD)((DWORD)(val)>>24)) #endif #ifdef __cplusplus } #endif -#endif /* _FATFS */ +#endif /* FAT_FS */ diff --git a/lib/sw_services/xilffs/src/include/ffconf.h b/lib/sw_services/xilffs/src/include/ffconf.h index 4ebb8c65..1c59faca 100755 --- a/lib/sw_services/xilffs/src/include/ffconf.h +++ b/lib/sw_services/xilffs/src/include/ffconf.h @@ -119,7 +119,7 @@ / FatFs supports only BMP. */ -#define _FS_RPATH 0 /* 0 to 2 */ +#define _FS_RPATH 0U /* 0 to 2 */ /* The _FS_RPATH option configures relative path feature. / / 0: Disable relative path feature and remove related functions. @@ -133,7 +133,7 @@ / Drive/Volume Configurations /---------------------------------------------------------------------------*/ -#define _VOLUMES 1 +#define _VOLUMES 1U /* Number of volumes (logical drives) to be used. */ @@ -152,8 +152,8 @@ */ -#define _MIN_SS 512 -#define _MAX_SS 512 +#define _MIN_SS 512U +#define _MAX_SS 512U /* These options configure the range of sector size to be supported. (512, 1024, 2048 or / 4096) Always set both 512 for most systems, all memory card and harddisk. But a larger / value may be required for on-board flash memory and some type of optical media.