diff --git a/src/config.h b/src/config.h index 14f5d60..b9593c7 100644 --- a/src/config.h +++ b/src/config.h @@ -68,6 +68,9 @@ #define QSORT_MAXELEM 2048 #define CLTBL_SIZE 100 + +#define DIR_FILE_MAX 16380 + #define SSP_REGS LPC_SSP0 #define SSP_PCLKREG PCLKSEL1 // 1: PCLKSEL0 diff --git a/src/filetypes.c b/src/filetypes.c index de0d1bb..cda8e9c 100644 --- a/src/filetypes.c +++ b/src/filetypes.c @@ -76,6 +76,7 @@ uint32_t scan_dir(char* path, FILINFO* fno_param, char mkdb, uint32_t this_dir_t char *size_units[3] = {" ", "k", "M"}; uint32_t entry_fsize; uint8_t entry_unit_idx; + uint16_t entrycnt; dir_tgt = this_dir_tgt; if(depth==0) { @@ -130,7 +131,8 @@ uint32_t scan_dir(char* path, FILINFO* fno_param, char mkdb, uint32_t this_dir_t dir_tgt += 4; } len = strlen((char*)path); - for (;;) { + /* scan at most DIR_FILE_MAX entries per directory */ + for(entrycnt=0; entrycnt < DIR_FILE_MAX; entrycnt++) { // toggle_read_led(); res = f_readdir(&dir, &fno); if (res != FR_OK || fno.fname[0] == 0) {