📄 tff_8c-source.html
字号:
<a name="l00227"></a>00227 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00228"></a>00228 <a name="l00229"></a>00229 <span class="preprocessor">#if !_FS_READONLY</span><a name="l00230"></a>00230 <span class="preprocessor"></span><span class="keyword">static</span><a name="l00231"></a>00231 BOOL remove_chain ( <span class="comment">/* TRUE: successful, FALSE: failed */</span><a name="l00232"></a>00232 CLUST clust <span class="comment">/* Cluster# to remove chain from */</span><a name="l00233"></a>00233 )<a name="l00234"></a>00234 {<a name="l00235"></a>00235 CLUST nxt;<a name="l00236"></a>00236 <a class="code" href="struct__FATFS.html">FATFS</a> *fs = FatFs;<a name="l00237"></a>00237 <a name="l00238"></a>00238 <a name="l00239"></a>00239 <span class="keywordflow">while</span> (clust >= 2 && clust < fs->max_clust) {<a name="l00240"></a>00240 nxt = get_cluster(clust);<a name="l00241"></a>00241 <span class="keywordflow">if</span> (nxt == 1) <span class="keywordflow">return</span> <a class="code" href="common_8h.html#a93f0eb578d23995850d61f7d61c55c1">FALSE</a>;<a name="l00242"></a>00242 <span class="keywordflow">if</span> (!put_cluster(clust, 0)) <span class="keywordflow">return</span> <a class="code" href="common_8h.html#a93f0eb578d23995850d61f7d61c55c1">FALSE</a>;<a name="l00243"></a>00243 <span class="keywordflow">if</span> (fs-><a class="code" href="struct__FATFS.html#a8360b3d9614f1bdf103e321239d71ff">free_clust</a> != (CLUST)0xFFFFFFFF) {<a name="l00244"></a>00244 fs-><a class="code" href="struct__FATFS.html#a8360b3d9614f1bdf103e321239d71ff">free_clust</a>++;<a name="l00245"></a>00245 <span class="preprocessor">#if _USE_FSINFO</span><a name="l00246"></a>00246 <span class="preprocessor"></span> fs->fsi_flag = 1;<a name="l00247"></a>00247 <span class="preprocessor">#endif</span><a name="l00248"></a>00248 <span class="preprocessor"></span> }<a name="l00249"></a>00249 clust = nxt;<a name="l00250"></a>00250 }<a name="l00251"></a>00251 <span class="keywordflow">return</span> <a class="code" href="common_8h.html#a8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;<a name="l00252"></a>00252 }<a name="l00253"></a>00253 <span class="preprocessor">#endif</span><a name="l00254"></a>00254 <span class="preprocessor"></span><a name="l00255"></a>00255 <a name="l00256"></a>00256 <a name="l00257"></a>00257 <a name="l00258"></a>00258 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00259"></a>00259 <span class="comment">/* Stretch or create a cluster chain */</span><a name="l00260"></a>00260 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00261"></a>00261 <a name="l00262"></a>00262 <span class="preprocessor">#if !_FS_READONLY</span><a name="l00263"></a>00263 <span class="preprocessor"></span><span class="keyword">static</span><a name="l00264"></a>00264 CLUST create_chain ( <span class="comment">/* 0: no free cluster, 1: error, >=2: new cluster number */</span><a name="l00265"></a>00265 CLUST clust <span class="comment">/* Cluster# to stretch, 0 means create new */</span><a name="l00266"></a>00266 )<a name="l00267"></a>00267 {<a name="l00268"></a>00268 CLUST cstat, ncl, scl, mcl;<a name="l00269"></a>00269 <a class="code" href="struct__FATFS.html">FATFS</a> *fs = FatFs;<a name="l00270"></a>00270 <a name="l00271"></a>00271 <a name="l00272"></a>00272 mcl = fs-><a class="code" href="struct__FATFS.html#7f5a5466252185cec7c0903feaf6d702">max_clust</a>;<a name="l00273"></a>00273 <span class="keywordflow">if</span> (clust == 0) { <span class="comment">/* Create new chain */</span><a name="l00274"></a>00274 scl = fs-><a class="code" href="struct__FATFS.html#fefa77a3df67f4de4d858293935781c0">last_clust</a>; <span class="comment">/* Get last allocated cluster */</span><a name="l00275"></a>00275 <span class="keywordflow">if</span> (scl < 2 || scl >= mcl) scl = 1;<a name="l00276"></a>00276 }<a name="l00277"></a>00277 <span class="keywordflow">else</span> { <span class="comment">/* Stretch existing chain */</span><a name="l00278"></a>00278 cstat = get_cluster(clust); <span class="comment">/* Check the cluster status */</span><a name="l00279"></a>00279 <span class="keywordflow">if</span> (cstat < 2) <span class="keywordflow">return</span> 1; <span class="comment">/* It is an invalid cluster */</span><a name="l00280"></a>00280 <span class="keywordflow">if</span> (cstat < mcl) <span class="keywordflow">return</span> cstat; <span class="comment">/* It is already followed by next cluster */</span><a name="l00281"></a>00281 scl = clust;<a name="l00282"></a>00282 }<a name="l00283"></a>00283 <a name="l00284"></a>00284 ncl = scl; <span class="comment">/* Start cluster */</span><a name="l00285"></a>00285 <span class="keywordflow">for</span> (;;) {<a name="l00286"></a>00286 ncl++; <span class="comment">/* Next cluster */</span><a name="l00287"></a>00287 <span class="keywordflow">if</span> (ncl >= mcl) { <span class="comment">/* Wrap around */</span><a name="l00288"></a>00288 ncl = 2;<a name="l00289"></a>00289 <span class="keywordflow">if</span> (ncl > scl) <span class="keywordflow">return</span> 0; <span class="comment">/* No free custer */</span><a name="l00290"></a>00290 }<a name="l00291"></a>00291 cstat = get_cluster(ncl); <span class="comment">/* Get the cluster status */</span><a name="l00292"></a>00292 <span class="keywordflow">if</span> (cstat == 0) <span class="keywordflow">break</span>; <span class="comment">/* Found a free cluster */</span><a name="l00293"></a>00293 <span class="keywordflow">if</span> (cstat == 1) <span class="keywordflow">return</span> 1; <span class="comment">/* Any error occured */</span><a name="l00294"></a>00294 <span class="keywordflow">if</span> (ncl == scl) <span class="keywordflow">return</span> 0; <span class="comment">/* No free custer */</span><a name="l00295"></a>00295 }<a name="l00296"></a>00296 <a name="l00297"></a>00297 <span class="keywordflow">if</span> (!put_cluster(ncl, (CLUST)0x0FFFFFFF)) <span class="keywordflow">return</span> 1; <span class="comment">/* Mark the new cluster "in use" */</span><a name="l00298"></a>00298 <span class="keywordflow">if</span> (clust && !put_cluster(clust, ncl)) <span class="keywordflow">return</span> 1; <span class="comment">/* Link it to previous one if needed */</span><a name="l00299"></a>00299 <a name="l00300"></a>00300 fs-><a class="code" href="struct__FATFS.html#fefa77a3df67f4de4d858293935781c0">last_clust</a> = ncl; <span class="comment">/* Update fsinfo */</span><a name="l00301"></a>00301 <span class="keywordflow">if</span> (fs-><a class="code" href="struct__FATFS.html#a8360b3d9614f1bdf103e321239d71ff">free_clust</a> != (CLUST)0xFFFFFFFF) {<a name="l00302"></a>00302 fs-><a class="code" href="struct__FATFS.html#a8360b3d9614f1bdf103e321239d71ff">free_clust</a>--;<a name="l00303"></a>00303 <span class="preprocessor">#if _USE_FSINFO</span><a name="l00304"></a>00304 <span class="preprocessor"></span> fs->fsi_flag = 1;<a name="l00305"></a>00305 <span class="preprocessor">#endif</span><a name="l00306"></a>00306 <span class="preprocessor"></span> }<a name="l00307"></a>00307 <a name="l00308"></a>00308 <span class="keywordflow">return</span> ncl; <span class="comment">/* Return new cluster number */</span><a name="l00309"></a>00309 }<a name="l00310"></a>00310 <span class="preprocessor">#endif </span><span class="comment">/* !_FS_READONLY */</span><a name="l00311"></a>00311 <a name="l00312"></a>00312 <a name="l00313"></a>00313 <a name="l00314"></a>00314 <a name="l00315"></a>00315 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00316"></a>00316 <span class="comment">/* Get sector# from cluster# */</span><a name="l00317"></a>00317 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00318"></a>00318 <a name="l00319"></a>00319 <span class="keyword">static</span><a name="l00320"></a>00320 DWORD clust2sect ( <span class="comment">/* !=0: sector number, 0: failed - invalid cluster# */</span><a name="l00321"></a>00321 CLUST clust <span class="comment">/* Cluster# to be converted */</span><a name="l00322"></a>00322 )<a name="l00323"></a>00323 {<a name="l00324"></a>00324 <a class="code" href="struct__FATFS.html">FATFS</a> *fs = FatFs;<a name="l00325"></a>00325 <a name="l00326"></a>00326 <a name="l00327"></a>00327 clust -= 2;<a name="l00328"></a>00328 <span class="keywordflow">if</span> (clust >= (fs-><a class="code" href="struct__FATFS.html#7f5a5466252185cec7c0903feaf6d702">max_clust</a> - 2)) <span class="keywordflow">return</span> 0; <span class="comment">/* Invalid cluster# */</span><a name="l00329"></a>00329 <span class="keywordflow">return</span> (DWORD)clust * fs-><a class="code" href="struct__FATFS.html#cf77b8f2c894bc68302efe617ed9e09e">sects_clust</a> + fs-><a class="code" href="struct__FATFS.html#f5866e883dc225244f15abd7894fafc8">database</a>;<a name="l00330"></a>00330 }<a name="l00331"></a>00331 <a name="l00332"></a>00332 <a name="l00333"></a>00333 <a name="l00334"></a>00334 <a name="l00335"></a>00335 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00336"></a>00336 <span class="comment">/* Move directory pointer to next */</span><a name="l00337"></a>00337 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00338"></a>00338 <a name="l00339"></a>00339 <span class="keyword">static</span><a name="l00340"></a>00340 BOOL next_dir_entry ( <span class="comment">/* TRUE: successful, FALSE: could not move next */</span><a name="l00341"></a>00341 <a class="code" href="struct__DIR.html">DIR</a> *dirobj <span class="comment">/* Pointer to directory object */</span><a name="l00342"></a>00342 )<a name="l00343"></a>00343 {<a name="l00344"></a>00344 CLUST clust;<a name="l00345"></a>00345 WORD idx;<a name="l00346"></a>00346 <a class="code" href="struct__FATFS.html">FATFS</a> *fs = FatFs;<a name="l00347"></a>00347 <a name="l00348"></a>00348
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -