- Added support for creating exFAT volume with some changes of f_mkfs(). - Added a file open method FA_OPEN_APPEND. An f_lseek() following f_open() is no longer needed. - f_forward() is available regardless of _FS_TINY. - Fixed f_mkfs() creates wrong volume. - Fixed compilation fails at some configurations, _USE_FASTSEEK and _USE_FORWARD. - Fixed wrong memory read in create_name().
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*------------------------------------------------------------/
 | |
| / Remove all contents of a directory
 | |
| / This function works regardless of _FS_RPATH.
 | |
| /------------------------------------------------------------*/
 | |
| 
 | |
| 
 | |
| FRESULT empty_directory (
 | |
|     char* path      /* Working buffer filled with start directory */
 | |
| )
 | |
| {
 | |
|     UINT i, j;
 | |
|     FRESULT fr;
 | |
|     DIR dir;
 | |
|     FILINFO fno;
 | |
| 
 | |
| #if _USE_LFN
 | |
|     fno.lfname = 0; /* Disable LFN output */
 | |
| #endif
 | |
|     fr = f_opendir(&dir, path);
 | |
|     if (fr == FR_OK) {
 | |
|         for (i = 0; path[i]; i++) ;
 | |
|         path[i++] = '/';
 | |
|         for (;;) {
 | |
|             fr = f_readdir(&dir, &fno);
 | |
|             if (fr != FR_OK || !fno.fname[0]) break;
 | |
|             if (_FS_RPATH && fno.fname[0] == '.') continue;
 | |
|             j = 0;
 | |
|             do
 | |
|                 path[i+j] = fno.fname[j];
 | |
|             while (fno.fname[j++]);
 | |
|             if (fno.fattrib & AM_DIR) {
 | |
|                 fr = empty_directory(path);
 | |
|                 if (fr != FR_OK) break;
 | |
|             }
 | |
|             fr = f_unlink(path);
 | |
|             if (fr != FR_OK) break;
 | |
|         }
 | |
|         path[--i] = '\0';
 | |
|         closedir(&dir);
 | |
|     }
 | |
| 
 | |
|     return fr;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| int main (void)
 | |
| {
 | |
|     FRESULT fr;
 | |
|     FATFS fs;
 | |
|     char buff[64];    /* Working buffer */
 | |
| 
 | |
| 
 | |
| 
 | |
|     f_mount(&fs, "", 0);
 | |
| 
 | |
|     strcpy(buff, "/");  /* Directory to be emptied */
 | |
|     fr = empty_directory(buff);
 | |
| 
 | |
|     if (fr) {
 | |
|         printf("Function failed. (%u)\n", fr);
 | |
|         return fr;
 | |
|     } else {
 | |
|         printf("All contents in the %s are successfully removed.\n", buff);
 | |
|         return 0;
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 |