diff --git a/source/ff.c b/source/ff.c index 387898431a037ce53f28e72a89b9e788ce49d675..46536d226f23f24a7d2103e401095160a14e965a 100644 --- a/source/ff.c +++ b/source/ff.c @@ -5095,13 +5095,10 @@ FRESULT f_getlabel ( /* Set Volume Label */ /*-----------------------------------------------------------------------*/ -FRESULT f_setlabel ( - const TCHAR* label /* Volume label to set with heading logical drive number */ -) +FRESULT set_volumn_label(FATFS *fs, const TCHAR *label) { FRESULT res; DIR dj; - FATFS *fs; BYTE dirvn[22]; UINT di; WCHAR wc; @@ -5109,13 +5106,7 @@ FRESULT f_setlabel ( #if FF_USE_LFN DWORD dc; #endif - - /* Get logical drive */ - res = find_volume(&label, &fs, FA_WRITE); - if (res != FR_OK) LEAVE_FF(fs, res); - - - /* On the FAT/FAT32 volume */ + /* On the FAT/FAT32 volume */ mem_set(dirvn, ' ', 11); di = 0; while ((UINT)*label >= ' ') { /* Create volume label */ @@ -5171,6 +5162,22 @@ FRESULT f_setlabel ( } } + return res; +} + +FRESULT f_setlabel ( + const TCHAR* label /* Volume label to set with heading logical drive number */ +) +{ + FRESULT res; + FATFS *fs; + + /* Get logical drive */ + res = find_volume(&label, &fs, FA_WRITE); + if (res != FR_OK) LEAVE_FF(fs, res); + + res = set_volumn_label(fs, label); + LEAVE_FF(fs, res); } diff --git a/source/ff.h b/source/ff.h index c3bbc8fd4a8dc2cc8cf686778a9268b7f164990a..ab1b802b94966e1f6877ca2aad86a3f626996eb6 100644 --- a/source/ff.h +++ b/source/ff.h @@ -484,6 +484,7 @@ FRESULT remove_chain (FFOBJID* obj, DWORD clst, DWORD pclst); void mem_set (void* dst, int val, UINT cnt); void mem_cpy (void* dst, const void* src, UINT cnt); int fatfs_get_vol (FATFS *fat); +FRESULT set_volumn_label(FATFS *fs, const TCHAR *label); #define f_eof(fp) ((int)((fp)->fptr == (fp)->obj.objsize)) #define f_error(fp) ((fp)->err)