- Changed user provided synchronization functions in order to completely eliminate the platform dependency from FatFs code. - FF_SYNC_t is removed from the configuration options. - Fixed a potential error in f_mount when FF_FS_REENTRANT. - Fixed file lock control FF_FS_LOCK is not mutal excluded when FF_FS_REENTRANT && FF_VOLUMES > 1 is true. - Fixed f_mkfs() creates broken exFAT volume when the size of volume is >= 2^32 sectors. - Fixed string functions cannot write the unicode characters not in BMP when FF_LFN_UNICODE == 2 (UTF-8). - Fixed a compatibility issue in identification of GPT header.
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*----------------------------------------------------------------------/
 | |
| / Test if the file is contiguous                                        /
 | |
| /----------------------------------------------------------------------*/
 | |
| 
 | |
| FRESULT test_contiguous_file (
 | |
|     FIL* fp,    /* [IN]  Open file object to be checked */
 | |
|     int* cont   /* [OUT] 1:Contiguous, 0:Fragmented or zero-length */
 | |
| )
 | |
| {
 | |
|     DWORD clst, clsz, step;
 | |
|     FSIZE_t fsz;
 | |
|     FRESULT fr;
 | |
| 
 | |
| 
 | |
|     *cont = 0;
 | |
|     fr = f_rewind(fp);              /* Validates and prepares the file */
 | |
|     if (fr != FR_OK) return fr;
 | |
| 
 | |
| #if FF_MAX_SS == FF_MIN_SS
 | |
|     clsz = (DWORD)fp->obj.fs->csize * FF_MAX_SS;    /* Cluster size */
 | |
| #else
 | |
|     clsz = (DWORD)fp->obj.fs->csize * fp->obj.fs->ssize;
 | |
| #endif
 | |
|     fsz = f_size(fp);
 | |
|     if (fsz > 0) {
 | |
|         clst = fp->obj.sclust - 1;  /* A cluster leading the first cluster for first test */
 | |
|         while (fsz) {
 | |
|             step = (fsz >= clsz) ? clsz : (DWORD)fsz;
 | |
|             fr = f_lseek(fp, f_tell(fp) + step);    /* Advances file pointer a cluster */
 | |
|             if (fr != FR_OK) return fr;
 | |
|             if (clst + 1 != fp->clust) break;       /* Is not the cluster next to previous one? */
 | |
|             clst = fp->clust; fsz -= step;          /* Get current cluster for next test */
 | |
|         }
 | |
|         if (fsz == 0) *cont = 1;    /* All done without fail? */
 | |
|     }
 | |
| 
 | |
|     return FR_OK;
 | |
| }
 |