]> cloudbase.mooo.com Git - z180-stamp.git/blame - fatfs/documents/res/app5.c
Import fatfs R0.15
[z180-stamp.git] / fatfs / documents / res / app5.c
CommitLineData
5630b930
L
1/*----------------------------------------------------------------------/\r
2/ Test if the file is contiguous /\r
3/----------------------------------------------------------------------*/\r
4\r
5FRESULT test_contiguous_file (\r
6 FIL* fp, /* [IN] Open file object to be checked */\r
7 int* cont /* [OUT] 1:Contiguous, 0:Fragmented or zero-length */\r
8)\r
9{\r
10 DWORD clst, clsz, step;\r
11 FSIZE_t fsz;\r
12 FRESULT fr;\r
13\r
14\r
15 *cont = 0;\r
16 fr = f_rewind(fp); /* Validates and prepares the file */\r
17 if (fr != FR_OK) return fr;\r
18\r
19#if FF_MAX_SS == FF_MIN_SS\r
20 clsz = (DWORD)fp->obj.fs->csize * FF_MAX_SS; /* Cluster size */\r
21#else\r
22 clsz = (DWORD)fp->obj.fs->csize * fp->obj.fs->ssize;\r
23#endif\r
24 fsz = f_size(fp);\r
25 if (fsz > 0) {\r
26 clst = fp->obj.sclust - 1; /* A cluster leading the first cluster for first test */\r
27 while (fsz) {\r
28 step = (fsz >= clsz) ? clsz : (DWORD)fsz;\r
29 fr = f_lseek(fp, f_tell(fp) + step); /* Advances file pointer a cluster */\r
30 if (fr != FR_OK) return fr;\r
31 if (clst + 1 != fp->clust) break; /* Is not the cluster next to previous one? */\r
32 clst = fp->clust; fsz -= step; /* Get current cluster for next test */\r
33 }\r
34 if (fsz == 0) *cont = 1; /* All done without fail? */\r
35 }\r
36\r
37 return FR_OK;\r
38}\r