]> git.sur5r.net Git - freertos/blob - FreeRTOS-Plus/Source/FreeRTOS-Plus-FAT-SL/fat_sl/test/test.c
b25e05c19bfa154ab2e41b85b99d3044c3ae04a1
[freertos] / FreeRTOS-Plus / Source / FreeRTOS-Plus-FAT-SL / fat_sl / test / test.c
1 #ifndef _TEST_C_\r
2 #define _TEST_C_\r
3 \r
4 \r
5 /*\r
6  * FreeRTOS+FAT FS V1.0.0 (C) 2013 HCC Embedded\r
7  *\r
8  * The FreeRTOS+FAT SL license terms are different to the FreeRTOS license \r
9  * terms.\r
10  * \r
11  * FreeRTOS+FAT SL uses a dual license model that allows the software to be used \r
12  * under a standard GPL open source license, or a commercial license.  The \r
13  * standard GPL license (unlike the modified GPL license under which FreeRTOS \r
14  * itself is distributed) requires that all software statically linked with \r
15  * FreeRTOS+FAT SL is also distributed under the same GPL V2 license terms.  \r
16  * Details of both license options follow:\r
17  * \r
18  * - Open source licensing -\r
19  * FreeRTOS+FAT SL is a free download and may be used, modified, evaluated and\r
20  * distributed without charge provided the user adheres to version two of the \r
21  * GNU General Public License (GPL) and does not remove the copyright notice or \r
22  * this text.  The GPL V2 text is available on the gnu.org web site, and on the\r
23  * following URL: http://www.FreeRTOS.org/gpl-2.0.txt.\r
24  * \r
25  * - Commercial licensing -\r
26  * Businesses and individuals who for commercial or other reasons cannot comply\r
27  * with the terms of the GPL V2 license must obtain a commercial license before \r
28  * incorporating FreeRTOS+FAT SL into proprietary software for distribution in \r
29  * any form.  Commercial licenses can be purchased from \r
30  * http://shop.freertos.org/fat_sl and do not require any source files to be \r
31  * changed.\r
32  *\r
33  * FreeRTOS+FAT SL is distributed in the hope that it will be useful.  You\r
34  * cannot use FreeRTOS+FAT SL unless you agree that you use the software 'as\r
35  * is'.  FreeRTOS+FAT SL is provided WITHOUT ANY WARRANTY; without even the\r
36  * implied warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A\r
37  * PARTICULAR PURPOSE. Real Time Engineers Ltd. and HCC Embedded disclaims all\r
38  * conditions and terms, be they implied, expressed, or statutory.\r
39  *\r
40  * http://www.FreeRTOS.org\r
41  * http://www.FreeRTOS.org/FreeRTOS-Plus\r
42  *\r
43  */\r
44 \r
45 #include "test.h"\r
46 #include "../../api/fat_sl.h"\r
47 #include "../../psp/target/fat_sl/psp_test.h"\r
48 \r
49 #include "../../version/ver_fat_sl.h"\r
50 #if VER_FAT_SL_MAJOR != 3 || VER_FAT_SL_MINOR != 2\r
51  #error Incompatible FAT_SL version number!\r
52 #endif\r
53 \r
54 static char  cwd[F_MAXPATH];\r
55 \r
56 static F_FIND  find;\r
57 \r
58 static void _f_deleteall ( void )\r
59 {\r
60   F_FIND         f2;\r
61   unsigned char  sd = 0, rc, fl = 0;\r
62 \r
63   f2 = find;\r
64   do\r
65   {\r
66     rc = f_findfirst( "*.*", &find );\r
67     while ( rc == 0 && find.filename[0] == '.' )\r
68     {\r
69       rc = f_findnext( &find );\r
70     }\r
71 \r
72     if ( rc == 0 )\r
73     {\r
74       if ( find.attr & F_ATTR_DIR )\r
75       {\r
76         ++sd;\r
77         fl = 1;\r
78         f2 = find;\r
79         (void)f_chdir( find.filename );\r
80         continue;\r
81       }\r
82       else\r
83       {\r
84         (void)f_delete( find.filename );\r
85         rc = f_findnext( &find );\r
86       }\r
87     }\r
88 \r
89     if ( rc && sd && fl )\r
90     {\r
91       (void)f_chdir( ".." );\r
92       --sd;\r
93       fl = 0;\r
94       find = f2;\r
95       (void)f_rmdir( find.filename );\r
96       rc = f_findnext( &find );\r
97     }\r
98 \r
99     if ( rc && sd && !fl )\r
100     {\r
101       (void)f_chdir( "/" );\r
102       sd = 0;\r
103       rc = 0;\r
104     }\r
105   }\r
106   while ( rc == 0 );\r
107 } /* _f_deleteall */\r
108 \r
109 char  stmp[20];\r
110 static char * f_nameconv ( char * s )\r
111 {\r
112   char * ss = stmp;\r
113 \r
114   for ( ; ; )\r
115   {\r
116     char  ch = *s++;\r
117     if ( ( ch >= 'a' ) && ( ch <= 'z' ) )\r
118     {\r
119       ch += 'A' - 'a';\r
120     }\r
121 \r
122     *ss++ = ch;\r
123     if ( !ch )\r
124     {\r
125       break;\r
126     }\r
127   }\r
128 \r
129   return stmp;\r
130 } /* f_nameconv */\r
131 \r
132 static unsigned char f_formatting ( void )\r
133 {\r
134   unsigned char  ret;\r
135 \r
136   _f_dump( "f_formatting" );\r
137 \r
138 /*checking formatting*/\r
139   ret = f_format( F_FAT_TYPE );\r
140   if ( ret )\r
141   {\r
142     return _f_result( 0, ret );\r
143   }\r
144 \r
145   ret = _f_poweron();\r
146   if ( ret )\r
147   {\r
148     return _f_result( 1, ret );\r
149   }\r
150 \r
151   ret = f_findfirst( "*.*", &find );\r
152   if ( ret != F_ERR_NOTFOUND )\r
153   {\r
154     return _f_result( 2, ret );\r
155   }\r
156 \r
157   _f_dump( "passed..." );\r
158   return 0;\r
159 } /* f_formatting */\r
160 \r
161 static unsigned char _f_checkcwd ( char * orig )\r
162 {\r
163   unsigned char  ret;\r
164 \r
165   ret = f_getcwd( cwd, F_MAXPATH );\r
166   if ( ret )\r
167   {\r
168     return ret;\r
169   }\r
170 \r
171   if ( strcmp( orig, cwd ) )\r
172   {\r
173     return (unsigned char)-1;\r
174   }\r
175 \r
176   return 0;\r
177 }\r
178 \r
179 static unsigned char f_dirtest ( void )\r
180 {\r
181   unsigned char  ret;\r
182 \r
183   _f_dump( "f_dirtest" );\r
184 \r
185   _f_deleteall();\r
186 \r
187 /*creates a ab abc abcd*/\r
188   ret = f_mkdir( "a" );\r
189   if ( ret )\r
190   {\r
191     return _f_result( 1, ret );\r
192   }\r
193 \r
194   ret = f_mkdir( "ab" );\r
195   if ( ret )\r
196   {\r
197     return _f_result( 2, ret );\r
198   }\r
199 \r
200   ret = f_mkdir( "abc" );\r
201   if ( ret )\r
202   {\r
203     return _f_result( 3, ret );\r
204   }\r
205 \r
206   ret = f_mkdir( "abca" );\r
207   if ( ret )\r
208   {\r
209     return _f_result( 4, ret );\r
210   }\r
211 \r
212 /*creates directories in /a  -  a ab abc abcd*/\r
213   ret = f_mkdir( "a/a" );\r
214   if ( ret )\r
215   {\r
216     return _f_result( 5, ret );\r
217   }\r
218 \r
219   ret = f_mkdir( "a/ab" );\r
220   if ( ret )\r
221   {\r
222     return _f_result( 6, ret );\r
223   }\r
224 \r
225   ret = f_mkdir( "a/abc" );\r
226   if ( ret )\r
227   {\r
228     return _f_result( 7, ret );\r
229   }\r
230 \r
231   ret = f_mkdir( "a/abcd" );\r
232   if ( ret )\r
233   {\r
234     return _f_result( 8, ret );\r
235   }\r
236 \r
237 /*change into a/abcd and check cwd*/\r
238   ret = f_chdir( "a/abcd" );\r
239   if ( ret )\r
240   {\r
241     return _f_result( 9, ret );\r
242   }\r
243 \r
244   ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );\r
245   if ( ret )\r
246   {\r
247     return _f_result( 10, ret );\r
248   }\r
249 \r
250 /*make directory t change into t and check cwd="a/abcd/t"*/\r
251   ret = f_mkdir( "t" );\r
252   if ( ret )\r
253   {\r
254     return _f_result( 11, ret );\r
255   }\r
256 \r
257   ret = f_chdir( "t" );\r
258   if ( ret )\r
259   {\r
260     return _f_result( 12, ret );\r
261   }\r
262 \r
263   ret = _f_checkcwd( f_nameconv( "/a/abcd/t" ) );\r
264   if ( ret )\r
265   {\r
266     return _f_result( 13, ret );\r
267   }\r
268 \r
269   ret = f_chdir( "." );\r
270   if ( ret )\r
271   {\r
272     return _f_result( 14, ret );\r
273   }\r
274 \r
275   ret = _f_checkcwd( f_nameconv( "/a/abcd/t" ) );\r
276   if ( ret )\r
277   {\r
278     return _f_result( 15, ret );\r
279   }\r
280 \r
281   ret = f_chdir( "../." );\r
282   if ( ret )\r
283   {\r
284     return _f_result( 16, ret );\r
285   }\r
286 \r
287   ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );\r
288   if ( ret )\r
289   {\r
290     return _f_result( 17, ret );\r
291   }\r
292 \r
293 /*removing t dir*/\r
294   ret = f_rmdir( "t" );\r
295   if ( ret )\r
296   {\r
297     return _f_result( 18, ret );\r
298   }\r
299 \r
300   ret = f_chdir( "t" );\r
301   if ( ret != F_ERR_NOTFOUND )\r
302   {\r
303     return _f_result( 19, ret );\r
304   }\r
305 \r
306 /*removing /a dir*/\r
307   ret = f_rmdir( "/ab" );\r
308   if ( ret )\r
309   {\r
310     return _f_result( 20, ret );\r
311   }\r
312 \r
313   ret = f_chdir( "/ab" );\r
314   if ( ret != F_ERR_NOTFOUND )\r
315   {\r
316     return _f_result( 21, ret );\r
317   }\r
318 \r
319 /*removing /a dir*/\r
320   ret = f_rmdir( "../../a" );\r
321   if ( ret != F_ERR_NOTEMPTY )\r
322   {\r
323     return _f_result( 22, ret );\r
324   }\r
325 \r
326 /*removing /abca dir*/\r
327   ret = f_rmdir( "a:/abca" );\r
328   if ( ret )\r
329   {\r
330     return _f_result( 24, ret );\r
331   }\r
332 \r
333 /*changing invalid dirs*/\r
334   ret = f_chdir( "" );\r
335   if ( ret != F_ERR_INVALIDNAME )\r
336   {\r
337     return _f_result( 25, ret );\r
338   }\r
339 \r
340   ret = f_chdir( " " );\r
341   if ( ret )\r
342   {\r
343     return _f_result( 26, ret );\r
344   }\r
345 \r
346   ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );\r
347   if ( ret )\r
348   {\r
349     return _f_result( 27, ret );\r
350   }\r
351 \r
352   ret = f_chdir( "?" );\r
353   if ( ret != F_ERR_INVALIDNAME )\r
354   {\r
355     return _f_result( 28, ret );\r
356   }\r
357 \r
358   ret = f_chdir( "*.*" );\r
359   if ( ret != F_ERR_INVALIDNAME )\r
360   {\r
361     return _f_result( 29, ret );\r
362   }\r
363 \r
364   ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );\r
365   if ( ret )\r
366   {\r
367     return _f_result( 30, ret );\r
368   }\r
369 \r
370 /*changing into /abc and removes subfolder from /a/ */\r
371   ret = f_chdir( "/abc" );\r
372   if ( ret )\r
373   {\r
374     return _f_result( 31, ret );\r
375   }\r
376 \r
377   ret = f_rmdir( "/a/a" );\r
378   if ( ret )\r
379   {\r
380     return _f_result( 32, ret );\r
381   }\r
382 \r
383   ret = f_rmdir( "A:../a/ab" );\r
384   if ( ret )\r
385   {\r
386     return _f_result( 33, ret );\r
387   }\r
388 \r
389   ret = f_rmdir( "A:/a/abc" );\r
390   if ( ret )\r
391   {\r
392     return _f_result( 34, ret );\r
393   }\r
394 \r
395   ret = f_rmdir( ".././abc/.././a/../a/abcd" );\r
396   if ( ret )\r
397   {\r
398     return _f_result( 35, ret );\r
399   }\r
400 \r
401 /*some invalid rmdir*/\r
402   ret = f_rmdir( "." );\r
403   if ( ret != F_ERR_NOTFOUND )\r
404   {\r
405     return _f_result( 36, ret );\r
406   }\r
407 \r
408   ret = f_rmdir( ".." );\r
409   if ( ret != F_ERR_NOTFOUND )\r
410   {\r
411     return _f_result( 37, ret );\r
412   }\r
413 \r
414 /*create again abc remove abc*/\r
415   ret = f_mkdir( ".././abc" );\r
416   if ( ret != F_ERR_DUPLICATED )\r
417   {\r
418     return _f_result( 38, ret );\r
419   }\r
420 \r
421   ret = f_rmdir( "../abc" );\r
422   if ( ret )\r
423   {\r
424     return _f_result( 39, ret );\r
425   }\r
426 \r
427   ret = f_mkdir( ".././abc" );\r
428   if ( ret != F_ERR_INVALIDDIR )\r
429   {\r
430     return _f_result( 40, ret );                         /*cwd is not exist*/\r
431   }\r
432 \r
433   ret = f_chdir( "/" );\r
434   if ( ret )\r
435   {\r
436     return _f_result( 41, ret );\r
437   }\r
438 \r
439 /*try . and .. in the root*/\r
440   ret = f_chdir( "." );\r
441   if ( ret )\r
442   {\r
443     return _f_result( 42, ret );\r
444   }\r
445 \r
446   ret = f_chdir( "./././." );\r
447   if ( ret )\r
448   {\r
449     return _f_result( 43, ret );\r
450   }\r
451 \r
452   ret = f_chdir( ".." );\r
453   if ( ret != F_ERR_NOTFOUND )\r
454   {\r
455     return _f_result( 44, ret );\r
456   }\r
457 \r
458   ret = _f_checkcwd( "/" ); /*root!*/\r
459   if ( ret )\r
460   {\r
461     return _f_result( 45, ret );\r
462   }\r
463 \r
464 /*test . and .. in a and remove a*/\r
465   ret = f_chdir( "a" );\r
466   if ( ret )\r
467   {\r
468     return _f_result( 46, ret );\r
469   }\r
470 \r
471   ret = f_chdir( ".." );\r
472   if ( ret )\r
473   {\r
474     return _f_result( 47, ret );\r
475   }\r
476 \r
477   ret = f_chdir( "a" );\r
478   if ( ret )\r
479   {\r
480     return _f_result( 48, ret );\r
481   }\r
482 \r
483   ret = f_chdir( "." );\r
484   if ( ret )\r
485   {\r
486     return _f_result( 49, ret );\r
487   }\r
488 \r
489   ret = f_chdir( "a" );\r
490   if ( ret != F_ERR_NOTFOUND )\r
491   {\r
492     return _f_result( 50, ret );\r
493   }\r
494 \r
495   ret = f_chdir( "./.." );\r
496   if ( ret )\r
497   {\r
498     return _f_result( 51, ret );\r
499   }\r
500 \r
501   ret = f_rmdir( "a" );\r
502   if ( ret )\r
503   {\r
504     return _f_result( 52, ret );\r
505   }\r
506 \r
507 /*check if all are removed*/\r
508   ret = f_findfirst( "*.*", &find );\r
509   if ( ret != F_ERR_NOTFOUND )\r
510   {\r
511     return _f_result( 53, ret );\r
512   }\r
513 \r
514   _f_dump( "passed..." );\r
515   return 0;\r
516 } /* f_dirtest */\r
517 \r
518 \r
519 static unsigned char f_findingtest ( void )\r
520 {\r
521   unsigned char  ret;\r
522 \r
523   _f_dump( "f_findingtest" );\r
524 \r
525   _f_deleteall();\r
526 \r
527 /*check empty*/\r
528   ret = f_findfirst( "*.*", &find );\r
529   if ( ret != F_ERR_NOTFOUND )\r
530   {\r
531     return _f_result( 0, ret );\r
532   }\r
533 \r
534 /*create Hello.dir*/\r
535   ret = f_mkdir( "Hello.dir" );\r
536   if ( ret )\r
537   {\r
538     return _f_result( 1, ret );\r
539   }\r
540 \r
541 /*check if it is exist, and only exist*/\r
542   ret = f_findfirst( "*.*", &find );\r
543   if ( ret )\r
544   {\r
545     return _f_result( 2, ret );\r
546   }\r
547 \r
548   if ( strcmp( find.filename, f_nameconv( "Hello.dir" ) ) )\r
549   {\r
550     return _f_result( 3, 0 );\r
551   }\r
552 \r
553   if ( find.attr != F_ATTR_DIR )\r
554   {\r
555     return _f_result( 4, 0 );\r
556   }\r
557 \r
558   ret = f_findnext( &find );\r
559   if ( ret != F_ERR_NOTFOUND )\r
560   {\r
561     return _f_result( 5, ret );\r
562   }\r
563 \r
564 /*check some not founds*/\r
565   ret = f_findfirst( "q*.*", &find );\r
566   if ( ret != F_ERR_NOTFOUND )\r
567   {\r
568     return _f_result( 6, ret );\r
569   }\r
570 \r
571   ret = f_findfirst( "Hello.", &find );\r
572   if ( ret != F_ERR_NOTFOUND )\r
573   {\r
574     return _f_result( 7, ret );\r
575   }\r
576 \r
577   ret = f_findfirst( "a/*.*", &find );\r
578   if ( ret != F_ERR_INVALIDDIR )\r
579   {\r
580     return _f_result( 8, ret );\r
581   }\r
582 \r
583   ret = f_findfirst( ".", &find );\r
584   if ( ret != F_ERR_NOTFOUND )\r
585   {\r
586     return _f_result( 9, ret );\r
587   }\r
588 \r
589   ret = f_findfirst( "..", &find );\r
590   if ( ret != F_ERR_NOTFOUND )\r
591   {\r
592     return _f_result( 10, ret );\r
593   }\r
594 \r
595   ret = f_findfirst( "?e.*", &find );\r
596   if ( ret != F_ERR_NOTFOUND )\r
597   {\r
598     return _f_result( 11, ret );\r
599   }\r
600 \r
601   ret = f_findfirst( "*.", &find );\r
602   if ( ret != F_ERR_NOTFOUND )\r
603   {\r
604     return _f_result( 12, ret );\r
605   }\r
606 \r
607   ret = f_findfirst( "*.?", &find );\r
608   if ( ret != F_ERR_NOTFOUND )\r
609   {\r
610     return _f_result( 13, ret );\r
611   }\r
612 \r
613   ret = f_findfirst( "*.??", &find );\r
614   if ( ret != F_ERR_NOTFOUND )\r
615   {\r
616     return _f_result( 14, ret );\r
617   }\r
618 \r
619 \r
620 /*check some founds*/\r
621   ret = f_findfirst( "*.dir", &find );\r
622   if ( ret )\r
623   {\r
624     return _f_result( 15, ret );\r
625   }\r
626 \r
627   ret = f_findfirst( "*.d?r", &find );\r
628   if ( ret )\r
629   {\r
630     return _f_result( 16, ret );\r
631   }\r
632 \r
633   ret = f_findfirst( "*.d??", &find );\r
634   if ( ret )\r
635   {\r
636     return _f_result( 17, ret );\r
637   }\r
638 \r
639   ret = f_findfirst( "*.???", &find );\r
640   if ( ret )\r
641   {\r
642     return _f_result( 18, ret );\r
643   }\r
644 \r
645   ret = f_findfirst( "?ello.???", &find );\r
646   if ( ret )\r
647   {\r
648     return _f_result( 19, ret );\r
649   }\r
650 \r
651   ret = f_findfirst( "he??o.dir", &find );\r
652   if ( ret )\r
653   {\r
654     return _f_result( 20, ret );\r
655   }\r
656 \r
657   ret = f_findfirst( "he?*.dir", &find );\r
658   if ( ret )\r
659   {\r
660     return _f_result( 21, ret );\r
661   }\r
662 \r
663   ret = f_findfirst( "HELLO.DIR", &find ); /*no capitals sensitivity in find!!*/\r
664   if ( ret )\r
665   {\r
666     return _f_result( 22, ret );\r
667   }\r
668 \r
669 /*change into hello.dir*/\r
670   ret = f_chdir( "hello.dir" );\r
671   if ( ret )\r
672   {\r
673     return _f_result( 23, ret );\r
674   }\r
675 \r
676   ret = f_findfirst( "*.*", &find );\r
677   if ( ret )\r
678   {\r
679     return _f_result( 24, ret );\r
680   }\r
681 \r
682   ret = f_findfirst( "..", &find );\r
683   if ( ret )\r
684   {\r
685     return _f_result( 25, ret );\r
686   }\r
687 \r
688   ret = f_findfirst( "??", &find );\r
689   if ( ret )\r
690   {\r
691     return _f_result( 26, ret );\r
692   }\r
693 \r
694   ret = f_findfirst( ".", &find );\r
695   if ( ret )\r
696   {\r
697     return _f_result( 27, ret );\r
698   }\r
699 \r
700   ret = f_findfirst( "k*.*", &find );\r
701   if ( ret != F_ERR_NOTFOUND )\r
702   {\r
703     return _f_result( 28, ret );\r
704   }\r
705 \r
706   ret = f_findfirst( "*.", &find );\r
707   if ( ret )\r
708   {\r
709     return _f_result( 29, ret );\r
710   }\r
711 \r
712   if ( strcmp( find.filename, "." ) )\r
713   {\r
714     return _f_result( 29, 0 );\r
715   }\r
716 \r
717   ret = f_findnext( &find );\r
718   if ( ret )\r
719   {\r
720     return _f_result( 29, ret );\r
721   }\r
722 \r
723   if ( strcmp( find.filename, ".." ) )\r
724   {\r
725     return _f_result( 29, 0 );\r
726   }\r
727 \r
728   ret = f_findnext( &find );\r
729   if ( ret != F_ERR_NOTFOUND )\r
730   {\r
731     return _f_result( 29, ret );\r
732   }\r
733 \r
734 \r
735   ret = f_findfirst( "*.a", &find );\r
736   if ( ret != F_ERR_NOTFOUND )\r
737   {\r
738     return _f_result( 30, ret );\r
739   }\r
740 \r
741 /*creating testdir and find it*/\r
742   ret = f_mkdir( "testdir" );\r
743   if ( ret )\r
744   {\r
745     return _f_result( 31, ret );\r
746   }\r
747 \r
748   ret = f_findfirst( "*.", &find );\r
749   if ( ret )\r
750   {\r
751     return _f_result( 32, ret );\r
752   }\r
753 \r
754   if ( strcmp( find.filename, "." ) )\r
755   {\r
756     return _f_result( 32, 0 );\r
757   }\r
758 \r
759   ret = f_findnext( &find );\r
760   if ( ret )\r
761   {\r
762     return _f_result( 32, ret );\r
763   }\r
764 \r
765   if ( strcmp( find.filename, ".." ) )\r
766   {\r
767     return _f_result( 32, 0 );\r
768   }\r
769 \r
770   ret = f_findnext( &find );\r
771   if ( ret )\r
772   {\r
773     return _f_result( 32, ret );\r
774   }\r
775 \r
776 \r
777   if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )\r
778   {\r
779     return _f_result( 33, 0 );\r
780   }\r
781 \r
782   ret = f_findfirst( "*.*", &find );\r
783   if ( ret )\r
784   {\r
785     return _f_result( 34, ret );\r
786   }\r
787 \r
788   if ( strcmp( find.filename, "." ) )\r
789   {\r
790     return _f_result( 35, 0 );\r
791   }\r
792 \r
793   ret = f_findnext( &find );\r
794   if ( ret )\r
795   {\r
796     return _f_result( 35, ret );\r
797   }\r
798 \r
799   if ( strcmp( find.filename, ".." ) )\r
800   {\r
801     return _f_result( 35, 0 );\r
802   }\r
803 \r
804   ret = f_findnext( &find );\r
805   if ( ret )\r
806   {\r
807     return _f_result( 36, ret );\r
808   }\r
809 \r
810   if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )\r
811   {\r
812     return _f_result( 37, 0 );\r
813   }\r
814 \r
815   ret = f_findnext( &find );\r
816   if ( ret != F_ERR_NOTFOUND )\r
817   {\r
818     return _f_result( 38, ret );\r
819   }\r
820 \r
821 /*search exact file*/\r
822   ret = f_findfirst( "testDir", &find ); /*no capitals!*/\r
823   if ( ret )\r
824   {\r
825     return _f_result( 39, ret );\r
826   }\r
827 \r
828   if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )\r
829   {\r
830     return _f_result( 40, 0 );\r
831   }\r
832 \r
833   ret = f_findnext( &find );\r
834   if ( ret != F_ERR_NOTFOUND )\r
835   {\r
836     return _f_result( 41, ret );\r
837   }\r
838 \r
839 \r
840 /*go back to root and remove dirs*/\r
841   ret = f_chdir( "\\" );\r
842   if ( ret )\r
843   {\r
844     return _f_result( 42, ret );\r
845   }\r
846 \r
847   ret = f_rmdir( "Hello.dir/testdir" );\r
848   if ( ret )\r
849   {\r
850     return _f_result( 43, ret );\r
851   }\r
852 \r
853   ret = f_rmdir( "Hello.dir" );\r
854   if ( ret )\r
855   {\r
856     return _f_result( 44, ret );\r
857   }\r
858 \r
859 /*check if all are removed*/\r
860   ret = f_findfirst( "*.*", &find );\r
861   if ( ret != F_ERR_NOTFOUND )\r
862   {\r
863     return _f_result( 45, ret );\r
864   }\r
865 \r
866   _f_dump( "passed..." );\r
867   return 0;\r
868 } /* f_findingtest */\r
869 \r
870 static unsigned char f_powerfail ( void )\r
871 {\r
872   unsigned char  ret;\r
873 \r
874   _f_dump( "f_powerfail" );\r
875 \r
876 /*checking if its power fail system (RAMDRIVE is not powerfail!)*/\r
877   ret = f_mkdir( "testdir" );\r
878   if ( ret )\r
879   {\r
880     return _f_result( 0, ret );\r
881   }\r
882 \r
883   ret = _f_poweron();\r
884   if ( ret )\r
885   {\r
886     return _f_result( 1, ret );\r
887   }\r
888 \r
889   ret = f_findfirst( "testdir", &find );\r
890   if ( ret )\r
891   {\r
892     return _f_result( 2, ret );\r
893   }\r
894 \r
895 /*checking formatting*/\r
896   ret = f_format( F_FAT_TYPE );\r
897   if ( ret )\r
898   {\r
899     return _f_result( 3, ret );\r
900   }\r
901 \r
902   ret = _f_poweron();\r
903   if ( ret )\r
904   {\r
905     return _f_result( 4, ret );\r
906   }\r
907 \r
908   ret = f_findfirst( "*.*", &find );\r
909   if ( ret != F_ERR_NOTFOUND )\r
910   {\r
911     return _f_result( 5, ret );\r
912   }\r
913 \r
914 /*checking formatting, 1st creating*/\r
915   ret = f_format( F_FAT_TYPE );\r
916   if ( ret )\r
917   {\r
918     return _f_result( 6, ret );\r
919   }\r
920 \r
921   ret = f_mkdir( "testdir" );\r
922   if ( ret )\r
923   {\r
924     return _f_result( 7, ret );\r
925   }\r
926 \r
927   ret = f_findfirst( "testdir", &find );\r
928   if ( ret )\r
929   {\r
930     return _f_result( 8, ret );\r
931   }\r
932 \r
933   if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )\r
934   {\r
935     return _f_result( 9, 0 );\r
936   }\r
937 \r
938   ret = _f_poweron();\r
939   if ( ret )\r
940   {\r
941     return _f_result( 10, ret );\r
942   }\r
943 \r
944   ret = f_findfirst( "*.*", &find );\r
945   if ( ret )\r
946   {\r
947     return _f_result( 11, ret );\r
948   }\r
949 \r
950   if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )\r
951   {\r
952     return _f_result( 12, 0 );\r
953   }\r
954 \r
955 /*checking formatting, 2nd creating*/\r
956   ret = f_format( F_FAT_TYPE );\r
957   if ( ret )\r
958   {\r
959     return _f_result( 13, ret );\r
960   }\r
961 \r
962   ret = f_mkdir( "testdir" );\r
963   if ( ret )\r
964   {\r
965     return _f_result( 14, ret );\r
966   }\r
967 \r
968   ret = f_findfirst( "testdir", &find );\r
969   if ( ret )\r
970   {\r
971     return _f_result( 15, ret );\r
972   }\r
973 \r
974   if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )\r
975   {\r
976     return _f_result( 16, 0 );\r
977   }\r
978 \r
979   ret = f_mkdir( "testdir2" );\r
980   if ( ret )\r
981   {\r
982     return _f_result( 17, ret );\r
983   }\r
984 \r
985   ret = f_findfirst( "testdir2", &find );\r
986   if ( ret )\r
987   {\r
988     return _f_result( 18, ret );\r
989   }\r
990 \r
991   if ( strcmp( find.filename, f_nameconv( "testdir2" ) ) )\r
992   {\r
993     return _f_result( 19, 0 );\r
994   }\r
995 \r
996   ret = _f_poweron();\r
997   if ( ret )\r
998   {\r
999     return _f_result( 20, ret );\r
1000   }\r
1001 \r
1002   ret = f_findfirst( "*.*", &find );\r
1003   if ( ret )\r
1004   {\r
1005     return _f_result( 21, ret );\r
1006   }\r
1007 \r
1008   if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )\r
1009   {\r
1010     return _f_result( 22, 0 );\r
1011   }\r
1012 \r
1013   ret = f_findnext( &find );\r
1014   if ( ret )\r
1015   {\r
1016     return _f_result( 23, ret );\r
1017   }\r
1018 \r
1019   if ( strcmp( find.filename, f_nameconv( "testdir2" ) ) )\r
1020   {\r
1021     return _f_result( 24, 0 );\r
1022   }\r
1023 \r
1024   ret = f_findnext( &find );\r
1025   if ( ret != F_ERR_NOTFOUND )\r
1026   {\r
1027     return _f_result( 25, ret );\r
1028   }\r
1029 \r
1030 \r
1031 /*checking empty*/\r
1032   ret = _f_poweron();\r
1033   if ( ret )\r
1034   {\r
1035     return _f_result( 26, ret );\r
1036   }\r
1037 \r
1038   ret = f_format( F_FAT_TYPE );\r
1039   if ( ret )\r
1040   {\r
1041     return _f_result( 27, ret );\r
1042   }\r
1043 \r
1044   ret = _f_poweron();\r
1045   if ( ret )\r
1046   {\r
1047     return _f_result( 28, ret );\r
1048   }\r
1049 \r
1050   ret = f_findfirst( "*.*", &find );\r
1051   if ( ret != F_ERR_NOTFOUND )\r
1052   {\r
1053     return _f_result( 29, ret );\r
1054   }\r
1055 \r
1056 \r
1057   _f_dump( "passed..." );\r
1058   return 0;\r
1059 } /* f_powerfail */\r
1060 \r
1061 \r
1062 char  testbuffer[F_MAX_SEEK_TEST + 16]; /* +16 for f_appending test */\r
1063 \r
1064 static unsigned char checkfilecontent ( long nums, unsigned char value, F_FILE * file )\r
1065 {\r
1066   unsigned char  ch;\r
1067 \r
1068   while ( nums-- )\r
1069   {\r
1070     if ( f_eof( file ) )\r
1071     {\r
1072       return 1;                    /*eof ?*/\r
1073     }\r
1074 \r
1075     if ( 1 != f_read( &ch, 1, 1, file ) )\r
1076     {\r
1077       return 1;\r
1078     }\r
1079 \r
1080     if ( ch != value )\r
1081     {\r
1082       return 1;\r
1083     }\r
1084   }\r
1085 \r
1086   return 0;\r
1087 } /* checkfilecontent */\r
1088 \r
1089 static unsigned char f_seeking ( int sectorsize )\r
1090 {\r
1091   F_FILE       * file;\r
1092   unsigned char  ret;\r
1093   unsigned long  size;\r
1094   unsigned long  pos;\r
1095 \r
1096   if ( sectorsize == 128 )\r
1097   {\r
1098     _f_dump( "f_seeking with 128" );\r
1099   }\r
1100 \r
1101   #if ( F_MAX_SEEK_TEST > 128 )\r
1102   else if ( sectorsize == 256 )\r
1103   {\r
1104     _f_dump( "f_seeking with 256" );\r
1105   }\r
1106   #endif\r
1107   #if ( F_MAX_SEEK_TEST > 256 )\r
1108   else if ( sectorsize == 512 )\r
1109   {\r
1110     _f_dump( "f_seeking with 512" );\r
1111   }\r
1112   #endif\r
1113   #if ( F_MAX_SEEK_TEST > 512 )\r
1114   else if ( sectorsize == 1024 )\r
1115   {\r
1116     _f_dump( "f_seeking with 1024" );\r
1117   }\r
1118   #endif\r
1119   #if ( F_MAX_SEEK_TEST > 1024 )\r
1120   else if ( sectorsize == 2048 )\r
1121   {\r
1122     _f_dump( "f_seeking with 2048" );\r
1123   }\r
1124   #endif\r
1125   #if ( F_MAX_SEEK_TEST > 2048 )\r
1126   else if ( sectorsize == 4096 )\r
1127   {\r
1128     _f_dump( "f_seeking with 4096" );\r
1129   }\r
1130   #endif\r
1131   #if ( F_MAX_SEEK_TEST > 4096 )\r
1132   else if ( sectorsize == 8192 )\r
1133   {\r
1134     _f_dump( "f_seeking with 8192" );\r
1135   }\r
1136   #endif\r
1137   #if ( F_MAX_SEEK_TEST > 8192 )\r
1138   else if ( sectorsize == 16384 )\r
1139   {\r
1140     _f_dump( "f_seeking with 16384" );\r
1141   }\r
1142   #endif\r
1143   #if ( F_MAX_SEEK_TEST > 16384 )\r
1144   else if ( sectorsize == 32768 )\r
1145   {\r
1146     _f_dump( "f_seeking with 32768" );\r
1147   }\r
1148   #endif\r
1149   else\r
1150   {\r
1151     _f_dump( "f_seeking with random" );\r
1152   }\r
1153 \r
1154 /*checking sector boundary seekeng*/\r
1155   file = f_open( "test.bin", "w+" );\r
1156   if ( !file )\r
1157   {\r
1158     return _f_result( 0, 0 );\r
1159   }\r
1160 \r
1161 /*write sectorsize times 0*/\r
1162   psp_memset( testbuffer, 0, sectorsize );\r
1163   size = (unsigned long)f_write( testbuffer, 1, (long)sectorsize, file );\r
1164   if ( size != (unsigned long) sectorsize )\r
1165   {\r
1166     return _f_result( 1, size );\r
1167   }\r
1168 \r
1169   pos = (unsigned long)f_tell( file );\r
1170   if ( pos != (unsigned long) sectorsize )\r
1171   {\r
1172     return _f_result( 2, pos );\r
1173   }\r
1174 \r
1175 /*seek back and read some*/\r
1176   ret = f_seek( file, 0, F_SEEK_SET ); /*seek back*/\r
1177   if ( ret )\r
1178   {\r
1179     return _f_result( 3, ret );\r
1180   }\r
1181 \r
1182   pos = (unsigned long)f_tell( file );\r
1183   if ( pos )\r
1184   {\r
1185     return _f_result( 4, pos );\r
1186   }\r
1187 \r
1188   size = (unsigned long)f_read( testbuffer, 1, sectorsize, file );\r
1189   if ( size != (unsigned long) sectorsize )\r
1190   {\r
1191     return _f_result( 5, size );\r
1192   }\r
1193 \r
1194   pos = (unsigned long)f_tell( file );\r
1195   if ( pos != (unsigned long) sectorsize )\r
1196   {\r
1197     return _f_result( 6, pos );\r
1198   }\r
1199 \r
1200 /*fake read at eof*/\r
1201   size = (unsigned long)f_read( testbuffer, 1, 2, file ); /*eof!*/\r
1202   if ( size != 0 )\r
1203   {\r
1204     return _f_result( 7, size );\r
1205   }\r
1206 \r
1207   pos = (unsigned long)f_tell( file );\r
1208   if ( pos != (unsigned long) sectorsize )\r
1209   {\r
1210     return _f_result( 8, pos );\r
1211   }\r
1212 \r
1213 /*writing sectorsize times 1 at the end*/\r
1214   psp_memset( testbuffer, 1, sectorsize );\r
1215   size = (unsigned long)f_write( testbuffer, 1, sectorsize, file );\r
1216   if ( size != (unsigned long) sectorsize )\r
1217   {\r
1218     return _f_result( 11, size );\r
1219   }\r
1220 \r
1221   pos = (unsigned long)f_tell( file );\r
1222   if ( pos != (unsigned long) ( sectorsize * 2 ) )\r
1223   {\r
1224     return _f_result( 12, pos );\r
1225   }\r
1226 \r
1227 /*seeking back and read 1byte less*/\r
1228   ret = f_seek( file, 0, F_SEEK_SET );\r
1229   if ( ret )\r
1230   {\r
1231     return _f_result( 13, ret );\r
1232   }\r
1233 \r
1234   pos = (unsigned long)f_tell( file );\r
1235   if ( pos )\r
1236   {\r
1237     return _f_result( 14, pos );\r
1238   }\r
1239 \r
1240   size = (unsigned long)f_read( testbuffer, 1, sectorsize - 1, file );\r
1241   if ( size != (unsigned long) ( sectorsize - 1 ) )\r
1242   {\r
1243     return _f_result( 15, size );\r
1244   }\r
1245 \r
1246   pos = (unsigned long)f_tell( file );\r
1247   if ( pos != (unsigned long) ( sectorsize - 1 ) )\r
1248   {\r
1249     return _f_result( 16, pos );\r
1250   }\r
1251 \r
1252 \r
1253 /*write 2 times 2*/\r
1254   psp_memset( testbuffer, 2, sectorsize );\r
1255   size = (unsigned long)f_write( testbuffer, 1, 2, file );\r
1256   if ( size != 2 )\r
1257   {\r
1258     return _f_result( 17, size );\r
1259   }\r
1260 \r
1261   pos = (unsigned long)f_tell( file );\r
1262   if ( pos != (unsigned long) ( sectorsize + 1 ) )\r
1263   {\r
1264     return _f_result( 18, pos );\r
1265   }\r
1266 \r
1267 /*read 2 bytes*/\r
1268   size = (unsigned long)f_read( testbuffer, 2, 1, file );\r
1269   if ( size != 1 )\r
1270   {\r
1271     return _f_result( 19, size );\r
1272   }\r
1273 \r
1274   pos = (unsigned long)f_tell( file );\r
1275   if ( pos != (unsigned long) ( sectorsize + 3 ) )\r
1276   {\r
1277     return _f_result( 20, pos );\r
1278   }\r
1279 \r
1280 \r
1281 /*write 4 times 3*/\r
1282   psp_memset( testbuffer, 3, sectorsize );\r
1283   size = (unsigned long)f_write( testbuffer, 1, 4, file );\r
1284   if ( size != 4 )\r
1285   {\r
1286     return _f_result( 21, size );\r
1287   }\r
1288 \r
1289   pos = (unsigned long)f_tell( file );\r
1290   if ( pos != (unsigned long) ( sectorsize + 3 + 4 ) )\r
1291   {\r
1292     return _f_result( 22, pos );\r
1293   }\r
1294 \r
1295 /*seek at 2*/\r
1296   ret = f_seek( file, 2, F_SEEK_SET );\r
1297   if ( ret )\r
1298   {\r
1299     return _f_result( 23, ret );\r
1300   }\r
1301 \r
1302   pos = (unsigned long)f_tell( file );\r
1303   if ( pos != 2 )\r
1304   {\r
1305     return _f_result( 24, pos );\r
1306   }\r
1307 \r
1308 /*write 6 times 4*/\r
1309   psp_memset( testbuffer, 4, sectorsize );\r
1310   size = (unsigned long)f_write( testbuffer, 1, 6, file );\r
1311   if ( size != 6 )\r
1312   {\r
1313     return _f_result( 25, size );\r
1314   }\r
1315 \r
1316   pos = (unsigned long)f_tell( file );\r
1317   if ( pos != 8 )\r
1318   {\r
1319     return _f_result( 26, pos );\r
1320   }\r
1321 \r
1322 /*seek end -4*/\r
1323   ret = f_seek( file, -4, F_SEEK_END );\r
1324   if ( ret )\r
1325   {\r
1326     return _f_result( 27, ret );\r
1327   }\r
1328 \r
1329   pos = (unsigned long)f_tell( file );\r
1330   if ( pos != (unsigned long) ( 2 * sectorsize - 4 ) )\r
1331   {\r
1332     return _f_result( 28, pos );\r
1333   }\r
1334 \r
1335 /*read 2 bytes*/\r
1336   size = (unsigned long)f_read( testbuffer, 1, 2, file );\r
1337   if ( size != 2 )\r
1338   {\r
1339     return _f_result( 29, size );\r
1340   }\r
1341 \r
1342   pos = (unsigned long)f_tell( file );\r
1343   if ( pos != (unsigned long) ( 2 * sectorsize - 2 ) )\r
1344   {\r
1345     return _f_result( 30, pos );\r
1346   }\r
1347 \r
1348 /*write 8 times 5*/\r
1349   psp_memset( testbuffer, 5, sectorsize );\r
1350   size = (unsigned long)f_write( testbuffer, 1, 8, file );\r
1351   if ( size != 8 )\r
1352   {\r
1353     return _f_result( 31, size );\r
1354   }\r
1355 \r
1356   pos = (unsigned long)f_tell( file );\r
1357   if ( pos != (unsigned long) ( 2 * sectorsize + 6 ) )\r
1358   {\r
1359     return _f_result( 32, pos );\r
1360   }\r
1361 \r
1362 /*seek to the begining*/\r
1363   ret = f_seek( file, 0, F_SEEK_SET );\r
1364   if ( ret )\r
1365   {\r
1366     return _f_result( 33, ret );\r
1367   }\r
1368 \r
1369   pos = (unsigned long)f_tell( file );\r
1370   if ( pos )\r
1371   {\r
1372     return _f_result( 34, pos );\r
1373   }\r
1374 \r
1375 /*seek to the end*/\r
1376   ret = f_seek( file, 2 * sectorsize + 6, F_SEEK_SET );\r
1377   if ( ret )\r
1378   {\r
1379     return _f_result( 35, ret );\r
1380   }\r
1381 \r
1382   pos = (unsigned long)f_tell( file );\r
1383   if ( pos != (unsigned long) ( 2 * sectorsize + 6 ) )\r
1384   {\r
1385     return _f_result( 36, pos );\r
1386   }\r
1387 \r
1388 /*write 2 times 6*/\r
1389   psp_memset( testbuffer, 6, sectorsize );\r
1390   size = (unsigned long)f_write( testbuffer, 1, 2, file );\r
1391   if ( size != 2 )\r
1392   {\r
1393     return _f_result( 37, size );\r
1394   }\r
1395 \r
1396   pos = (unsigned long)f_tell( file );\r
1397   if ( pos != (unsigned long) ( 2 * sectorsize + 8 ) )\r
1398   {\r
1399     return _f_result( 38, pos );\r
1400   }\r
1401 \r
1402 /*seek to the begining*/\r
1403   (void)f_seek( file, -( 2 * sectorsize + 8 ), F_SEEK_CUR );\r
1404   if ( ret )\r
1405   {\r
1406     return _f_result( 39, ret );\r
1407   }\r
1408 \r
1409   pos = (unsigned long)f_tell( file );\r
1410   if ( pos )\r
1411   {\r
1412     return _f_result( 40, pos );\r
1413   }\r
1414 \r
1415 /*read 2 times sector*/\r
1416   size = (unsigned long)f_read( testbuffer, 1, sectorsize, file );\r
1417   if ( size != (unsigned long) sectorsize )\r
1418   {\r
1419     return _f_result( 41, size );\r
1420   }\r
1421 \r
1422   pos = (unsigned long)f_tell( file );\r
1423   if ( pos != (unsigned long) sectorsize )\r
1424   {\r
1425     return _f_result( 42, pos );\r
1426   }\r
1427 \r
1428   size = (unsigned long)f_read( testbuffer, 1, sectorsize, file );\r
1429   if ( size != (unsigned long) sectorsize )\r
1430   {\r
1431     return _f_result( 43, size );\r
1432   }\r
1433 \r
1434   pos = (unsigned long)f_tell( file );\r
1435   if ( pos != (unsigned long) ( 2 * sectorsize ) )\r
1436   {\r
1437     return _f_result( 44, pos );\r
1438   }\r
1439 \r
1440 /*write 1 once 7*/\r
1441   psp_memset( testbuffer, 7, sectorsize );\r
1442   size = (unsigned long)f_write( testbuffer, 1, 1, file );\r
1443   if ( size != 1 )\r
1444   {\r
1445     return _f_result( 45, size );\r
1446   }\r
1447 \r
1448   pos = (unsigned long)f_tell( file );\r
1449   if ( pos != (unsigned long) ( 2 * sectorsize + 1 ) )\r
1450   {\r
1451     return _f_result( 46, pos );\r
1452   }\r
1453 \r
1454 /*close it*/\r
1455   ret = f_close( file );\r
1456   if ( ret )\r
1457   {\r
1458     return _f_result( 47, ret );\r
1459   }\r
1460 \r
1461 \r
1462 /*check the result*/\r
1463   size = (unsigned long)f_filelength( "test.bin" );\r
1464   if ( size != (unsigned long) ( 2 * sectorsize + 8 ) )\r
1465   {\r
1466     return _f_result( 48, size );\r
1467   }\r
1468 \r
1469 /*opens it*/\r
1470   file = f_open( "test.bin", "r" );\r
1471   if ( !file )\r
1472   {\r
1473     return _f_result( 49, size );\r
1474   }\r
1475 \r
1476   if ( checkfilecontent( 2, 0, file ) )\r
1477   {\r
1478     return _f_result( 50, 0 );\r
1479   }\r
1480 \r
1481   if ( checkfilecontent( 6, 4, file ) )\r
1482   {\r
1483     return _f_result( 51, 0 );\r
1484   }\r
1485 \r
1486   if ( checkfilecontent( sectorsize - 8 - 1, 0, file ) )\r
1487   {\r
1488     return _f_result( 52, 0 );\r
1489   }\r
1490 \r
1491   if ( checkfilecontent( 2, 2, file ) )\r
1492   {\r
1493     return _f_result( 53, 0 );\r
1494   }\r
1495 \r
1496   if ( checkfilecontent( 2, 1, file ) )\r
1497   {\r
1498     return _f_result( 54, 0 );\r
1499   }\r
1500 \r
1501   if ( checkfilecontent( 4, 3, file ) )\r
1502   {\r
1503     return _f_result( 55, 0 );\r
1504   }\r
1505 \r
1506   if ( checkfilecontent( sectorsize - 7 - 2, 1, file ) )\r
1507   {\r
1508     return _f_result( 56, 0 );\r
1509   }\r
1510 \r
1511   if ( checkfilecontent( 2, 5, file ) )\r
1512   {\r
1513     return _f_result( 57, 0 );\r
1514   }\r
1515 \r
1516   if ( checkfilecontent( 1, 7, file ) )\r
1517   {\r
1518     return _f_result( 58, 0 );\r
1519   }\r
1520 \r
1521   if ( checkfilecontent( 5, 5, file ) )\r
1522   {\r
1523     return _f_result( 59, 0 );\r
1524   }\r
1525 \r
1526   if ( checkfilecontent( 2, 6, file ) )\r
1527   {\r
1528     return _f_result( 60, 0 );\r
1529   }\r
1530 \r
1531 /*check pos result*/\r
1532   pos = (unsigned long)f_tell( file );\r
1533   if ( pos != (unsigned long) ( 2 * sectorsize + 8 ) )\r
1534   {\r
1535     return _f_result( 61, pos );\r
1536   }\r
1537 \r
1538 /*this has to be eof*/\r
1539   pos = f_eof( file );\r
1540   if ( !pos )\r
1541   {\r
1542     return _f_result( 62, pos );\r
1543   }\r
1544 \r
1545 /*close it*/\r
1546   ret = f_close( file );\r
1547   if ( ret )\r
1548   {\r
1549     return _f_result( 63, ret );\r
1550   }\r
1551 \r
1552 /*deletes it*/\r
1553   ret = f_delete( "test.bin" );\r
1554   if ( ret )\r
1555   {\r
1556     return _f_result( 64, ret );\r
1557   }\r
1558 \r
1559   _f_dump( "passed..." );\r
1560   return 0;\r
1561 } /* f_seeking */\r
1562 \r
1563 static unsigned char f_opening ( void )\r
1564 {\r
1565   F_FILE        * file;\r
1566   F_FILE        * file2;\r
1567   unsigned char   ret;\r
1568   unsigned short  size, pos;\r
1569 \r
1570   _f_dump( "f_opening" );\r
1571 \r
1572 /*test non existing file open r, r+*/\r
1573   file = f_open( "file.bin", "r" );\r
1574   if ( file )\r
1575   {\r
1576     return _f_result( 0, 0 );\r
1577   }\r
1578 \r
1579   file = f_open( "file.bin", "r+" );\r
1580   if ( file )\r
1581   {\r
1582     return _f_result( 1, 0 );\r
1583   }\r
1584 \r
1585 /*test non existing appends     "a" a+*/\r
1586   file = f_open( "file.bin", "a" );\r
1587   if ( !file )\r
1588   {\r
1589     return _f_result( 2, 0 );\r
1590   }\r
1591 \r
1592   file2 = f_open( "file.bin", "a+" ); /*open again*/\r
1593   if ( file2 )\r
1594   {\r
1595     return _f_result( 3, 0 );\r
1596   }\r
1597 \r
1598   ret = f_close( file );\r
1599   if ( ret )\r
1600   {\r
1601     return _f_result( 3, 1 );\r
1602   }\r
1603 \r
1604   ret = f_close( file2 );\r
1605   if ( ret != F_ERR_NOTOPEN )\r
1606   {\r
1607     return _f_result( 3, 2 );\r
1608   }\r
1609 \r
1610 \r
1611 /*try to creates it w*/\r
1612   file = f_open( "file.bin", "w" );\r
1613   if ( !file )\r
1614   {\r
1615     return _f_result( 4, 0 );\r
1616   }\r
1617 \r
1618 /*write 512 times 1*/\r
1619   psp_memset( testbuffer, 1, 512 );                           /*set all 1*/\r
1620   size = (unsigned short)f_write( testbuffer, 1, 512, file ); /*test write*/\r
1621   if ( size != 512 )\r
1622   {\r
1623     return _f_result( 5, size );\r
1624   }\r
1625 \r
1626 /*go back, and read it*/\r
1627   ret = f_rewind( file ); /*back to the begining*/\r
1628   if ( ret )\r
1629   {\r
1630     return _f_result( 6, ret );       /*it should fail*/\r
1631   }\r
1632 \r
1633   size = (unsigned short)f_read( testbuffer, 1, 512, file ); /*test read*/\r
1634   if ( size )\r
1635   {\r
1636     return _f_result( 7, size );        /*it should fail*/\r
1637   }\r
1638 \r
1639 /*close and check size*/\r
1640   size = (unsigned short)f_filelength( "file.bin" );\r
1641   if ( size )\r
1642   {\r
1643     return _f_result( 8, size );        /*has to be zero*/\r
1644   }\r
1645 \r
1646   ret = f_close( file );\r
1647   if ( ret )\r
1648   {\r
1649     return _f_result( 9, ret );\r
1650   }\r
1651 \r
1652   size = (unsigned short)f_filelength( "file.bin" );\r
1653   if ( size != 512 )\r
1654   {\r
1655     return _f_result( 10, size );\r
1656   }\r
1657 \r
1658 /*try to owerwrites it it*/\r
1659   file = f_open( "file.bin", "w+" );\r
1660   if ( !file )\r
1661   {\r
1662     return _f_result( 11, 0 );\r
1663   }\r
1664 \r
1665 /*close and check size*/\r
1666   size = (unsigned short)f_filelength( "file.bin" );\r
1667   if ( size )\r
1668   {\r
1669     return _f_result( 12, size );        /*has to be zero*/\r
1670   }\r
1671 \r
1672   ret = f_close( file );\r
1673   if ( ret )\r
1674   {\r
1675     return _f_result( 13, ret );\r
1676   }\r
1677 \r
1678   size = (unsigned short)f_filelength( "file.bin" );\r
1679   if ( size )\r
1680   {\r
1681     return _f_result( 14, size );\r
1682   }\r
1683 \r
1684 \r
1685 \r
1686 /*test non existing appends     "a" */\r
1687   file = f_open( "file.bin", "r+" );\r
1688   if ( !file )\r
1689   {\r
1690     return _f_result( 15, 0 );\r
1691   }\r
1692 \r
1693 /*write 512 times 1*/\r
1694   psp_memset( testbuffer, 1, 512 );                           /*set all 1*/\r
1695   size = (unsigned short)f_write( testbuffer, 1, 512, file ); /*test write*/\r
1696   if ( size != 512 )\r
1697   {\r
1698     return _f_result( 16, size );\r
1699   }\r
1700 \r
1701 /*go back, and read it*/\r
1702   ret = f_rewind( file );                                    /*back to the begining*/\r
1703   size = (unsigned short)f_read( testbuffer, 1, 512, file ); /*test read*/\r
1704   if ( size != 512 )\r
1705   {\r
1706     return _f_result( 17, size );             /*it should fail*/\r
1707   }\r
1708 \r
1709   ret = f_rewind( file ); /*back to the begining*/\r
1710 \r
1711 /*write 256 times 2*/\r
1712   psp_memset( testbuffer, 2, 512 );                           /*set all 2*/\r
1713   size = (unsigned short)f_write( testbuffer, 1, 256, file ); /*test write*/\r
1714   if ( size != 256 )\r
1715   {\r
1716     return _f_result( 18, size );\r
1717   }\r
1718 \r
1719   pos = (unsigned short)f_tell( file );\r
1720   if ( pos != 256 )\r
1721   {\r
1722     return _f_result( 19, pos );            /*position has to be 512*/\r
1723   }\r
1724 \r
1725   size = (unsigned short)f_filelength( "file.bin" );\r
1726   if ( size )\r
1727   {\r
1728     return _f_result( 20, size );        /*has to be zero*/\r
1729   }\r
1730 \r
1731 /*close and check size*/\r
1732   ret = f_close( file );\r
1733   if ( ret )\r
1734   {\r
1735     return _f_result( 21, ret );\r
1736   }\r
1737 \r
1738   size = (unsigned short)f_filelength( "file.bin" );\r
1739   if ( size != 512 )\r
1740   {\r
1741     return _f_result( 22, size );\r
1742   }\r
1743 \r
1744 \r
1745 /*test non existing appends a+*/\r
1746   file = f_open( "file.bin", "a+" );\r
1747   if ( !file )\r
1748   {\r
1749     return _f_result( 23, 0 );\r
1750   }\r
1751 \r
1752   pos = (unsigned short)f_tell( file );\r
1753   if ( pos != 512 )\r
1754   {\r
1755     return _f_result( 24, pos );            /*position has to be 512*/\r
1756   }\r
1757 \r
1758 /*write 512 times 3*/\r
1759   psp_memset( testbuffer, 3, 512 );                           /*set all 3*/\r
1760   size = (unsigned short)f_write( testbuffer, 1, 512, file ); /*test write*/\r
1761   if ( size != 512 )\r
1762   {\r
1763     return _f_result( 25, size );\r
1764   }\r
1765 \r
1766 /*go back, and read it*/\r
1767   ret = f_rewind( file ); /*back to the begining*/\r
1768   if ( ret )\r
1769   {\r
1770     return _f_result( 26, ret );       /*it should fail*/\r
1771   }\r
1772 \r
1773   size = (unsigned short)f_read( testbuffer, 1, 512, file ); /*test read*/\r
1774   if ( size != 512 )\r
1775   {\r
1776     return _f_result( 27, size );             /*it should fail*/\r
1777   }\r
1778 \r
1779   pos = (unsigned short)f_tell( file );\r
1780   if ( pos != 512 )\r
1781   {\r
1782     return _f_result( 28, pos );            /*position has to be 512*/\r
1783   }\r
1784 \r
1785 /*close and check size*/\r
1786   size = (unsigned short)f_filelength( "file.bin" );\r
1787   if ( size != 512 )\r
1788   {\r
1789     return _f_result( 29, size );             /*has to be zero*/\r
1790   }\r
1791 \r
1792   ret = f_close( file );\r
1793   if ( ret )\r
1794   {\r
1795     return _f_result( 30, ret );\r
1796   }\r
1797 \r
1798   size = (unsigned short)f_filelength( "file.bin" );\r
1799   if ( size != 1024 )\r
1800   {\r
1801     return _f_result( 31, size );\r
1802   }\r
1803 \r
1804 /*close again!*/\r
1805   ret = f_close( file );\r
1806   if ( ret != F_ERR_NOTOPEN )\r
1807   {\r
1808     return _f_result( 32, pos );\r
1809   }\r
1810 \r
1811   ret = f_delete( "file.bin" );\r
1812   if ( ret )\r
1813   {\r
1814     return _f_result( 33, ret );\r
1815   }\r
1816 \r
1817   _f_dump( "passed..." );\r
1818   return 0;\r
1819 } /* f_opening */\r
1820 \r
1821 static unsigned char f_appending ( void )\r
1822 {\r
1823   F_FILE        * file;\r
1824   unsigned short  size, tsize, pos;\r
1825   unsigned char   a, b, ret;\r
1826 \r
1827   _f_dump( "f_appending" );\r
1828 \r
1829   _f_deleteall();\r
1830 \r
1831   for ( tsize = 0, a = 0 ; a < 16 ; a++ )\r
1832   {\r
1833     file = f_open( "ap.bin", "a" );\r
1834     if ( !file )\r
1835     {\r
1836       return _f_result( 1, 0 );\r
1837     }\r
1838 \r
1839     psp_memset( testbuffer, a, sizeof( testbuffer ) );\r
1840     size = (unsigned short)f_write( testbuffer, 1, a + 128, file );\r
1841     if ( size != a + 128 )\r
1842     {\r
1843       return _f_result( 2, size );\r
1844     }\r
1845 \r
1846     size = (unsigned short)f_filelength( "ap.bin" );\r
1847     if ( size != tsize )\r
1848     {\r
1849       return _f_result( 3, size );\r
1850     }\r
1851 \r
1852     tsize += a + 128;\r
1853 \r
1854     ret = f_close( file );\r
1855     if ( ret )\r
1856     {\r
1857       return _f_result( 4, ret );\r
1858     }\r
1859 \r
1860     size = (unsigned short)f_filelength( "ap.bin" );\r
1861     if ( size != tsize )\r
1862     {\r
1863       return _f_result( 5, size );\r
1864     }\r
1865   }\r
1866 \r
1867   file = f_open( "ap.bin", "r" );\r
1868   if ( !file )\r
1869   {\r
1870     return _f_result( 6, 0 );\r
1871   }\r
1872 \r
1873   for ( tsize = 0, a = 0 ; a < 16 ; a++ )\r
1874   {\r
1875     if ( checkfilecontent( a + 128, (char)a, file ) )\r
1876     {\r
1877       return _f_result( 7, a );\r
1878     }\r
1879   }\r
1880 \r
1881   ret = f_close( file );\r
1882   if ( ret )\r
1883   {\r
1884     return _f_result( 8, ret );\r
1885   }\r
1886 \r
1887   for ( tsize = 0, a = 0 ; a < 16 ; a++ )\r
1888   {\r
1889     file = f_open( "ap.bin", "r" );\r
1890     if ( !file )\r
1891     {\r
1892       return _f_result( 9, 0 );\r
1893     }\r
1894 \r
1895     ret = f_seek( file, tsize, F_SEEK_SET );\r
1896     if ( ret )\r
1897     {\r
1898       return _f_result( 10, ret );\r
1899     }\r
1900 \r
1901     pos = (unsigned short)f_tell( file );\r
1902     if ( pos != tsize )\r
1903     {\r
1904       return _f_result( 11, pos );\r
1905     }\r
1906 \r
1907     size = (unsigned short)f_read( testbuffer, 1, a + 128, file );\r
1908     if ( size != a + 128 )\r
1909     {\r
1910       return _f_result( 12, size );\r
1911     }\r
1912 \r
1913     for ( b = 0 ; b < a + 128 ; b++ )\r
1914     {\r
1915       if ( testbuffer[b] != (char)a )\r
1916       {\r
1917         return _f_result( 13, a );\r
1918       }\r
1919     }\r
1920 \r
1921     tsize += a + 128;\r
1922 \r
1923     pos = (unsigned short)f_tell( file );\r
1924     if ( pos != tsize )\r
1925     {\r
1926       return _f_result( 13, pos );\r
1927     }\r
1928 \r
1929     ret = f_close( file );\r
1930     if ( ret )\r
1931     {\r
1932       return _f_result( 14, ret );\r
1933     }\r
1934   }\r
1935 \r
1936   ret = f_close( file );\r
1937   if ( ret != F_ERR_NOTOPEN )\r
1938   {\r
1939     return _f_result( 9, ret );\r
1940   }\r
1941 \r
1942   ret = f_delete( "ap.bin" );\r
1943   if ( ret )\r
1944   {\r
1945     return _f_result( 14, ret );\r
1946   }\r
1947 \r
1948   _f_dump( "passed..." );\r
1949   return 0;\r
1950 } /* f_appending */\r
1951 \r
1952 static unsigned char f_writing ( void )\r
1953 {\r
1954   F_FILE        * file;\r
1955   unsigned short  size;\r
1956   unsigned char   a, ret;\r
1957   F_SPACE         before, after;\r
1958 \r
1959   _f_dump( "f_writing" );\r
1960 \r
1961   ret = f_getfreespace( &before );\r
1962   if ( ret )\r
1963   {\r
1964     return _f_result( 0, ret );\r
1965   }\r
1966 \r
1967   for ( a = 0 ; a < 4 ; a++ )\r
1968   {\r
1969     file = f_open( "wr.bin", "w" );\r
1970     if ( !file )\r
1971     {\r
1972       return _f_result( 1, 0 );\r
1973     }\r
1974 \r
1975     psp_memset( testbuffer, a, sizeof( testbuffer ) );\r
1976     size = (unsigned short)f_write( testbuffer, 1, a * 128, file );\r
1977     if ( size != a * 128 )\r
1978     {\r
1979       return _f_result( 2, size );\r
1980     }\r
1981 \r
1982     ret = f_close( file );\r
1983     if ( ret )\r
1984     {\r
1985       return _f_result( 3, ret );\r
1986     }\r
1987 \r
1988     size = (unsigned short)f_filelength( "wr.bin" );\r
1989     if ( size != a * 128 )\r
1990     {\r
1991       return _f_result( 4, size );\r
1992     }\r
1993 \r
1994     file = f_open( "wr.bin", "r" );\r
1995     if ( !file )\r
1996     {\r
1997       return _f_result( 5, 0 );\r
1998     }\r
1999 \r
2000     if ( checkfilecontent( a * 128, (char)a, file ) )\r
2001     {\r
2002       return _f_result( 6, a );\r
2003     }\r
2004 \r
2005     ret = f_close( file );\r
2006     if ( ret )\r
2007     {\r
2008       return _f_result( 7, ret );\r
2009     }\r
2010   }\r
2011 \r
2012 \r
2013   for ( a = 0 ; a < 4 ; a++ )\r
2014   {\r
2015     file = f_open( "wr.bin", "w+" );\r
2016     if ( !file )\r
2017     {\r
2018       return _f_result( 8, 0 );\r
2019     }\r
2020 \r
2021     psp_memset( testbuffer, a, sizeof( testbuffer ) );\r
2022     size = (unsigned short)f_write( testbuffer, 1, a * 128, file );\r
2023     if ( size != a * 128 )\r
2024     {\r
2025       return _f_result( 9, size );\r
2026     }\r
2027 \r
2028     ret = f_close( file );\r
2029     if ( ret )\r
2030     {\r
2031       return _f_result( 10, ret );\r
2032     }\r
2033 \r
2034     size = (unsigned short)f_filelength( "wr.bin" );\r
2035     if ( size != a * 128 )\r
2036     {\r
2037       return _f_result( 11, size );\r
2038     }\r
2039 \r
2040     file = f_open( "wr.bin", "r+" );\r
2041     if ( !file )\r
2042     {\r
2043       return _f_result( 12, 0 );\r
2044     }\r
2045 \r
2046     if ( checkfilecontent( a * 128, (char)a, file ) )\r
2047     {\r
2048       return _f_result( 13, a );\r
2049     }\r
2050 \r
2051     ret = f_close( file );\r
2052     if ( ret )\r
2053     {\r
2054       return _f_result( 14, ret );\r
2055     }\r
2056   }\r
2057 \r
2058   ret = f_getfreespace( &after );\r
2059   if ( ret )\r
2060   {\r
2061     return _f_result( 15, ret );\r
2062   }\r
2063 \r
2064   if ( before.bad != after.bad )\r
2065   {\r
2066     return _f_result( 16, 0 );\r
2067   }\r
2068 \r
2069   if ( before.free == after.free )\r
2070   {\r
2071     return _f_result( 17, 0 );\r
2072   }\r
2073 \r
2074   if ( before.used == after.used )\r
2075   {\r
2076     return _f_result( 18, 0 );\r
2077   }\r
2078 \r
2079   if ( before.total != after.total )\r
2080   {\r
2081     return _f_result( 19, 0 );\r
2082   }\r
2083 \r
2084   if ( before.used + before.free != after.used + after.free )\r
2085   {\r
2086     return _f_result( 20, 0 );\r
2087   }\r
2088 \r
2089   ret = f_delete( "wr.bin" );\r
2090   if ( ret )\r
2091   {\r
2092     return _f_result( 21, ret );\r
2093   }\r
2094 \r
2095   ret = f_getfreespace( &after );\r
2096   if ( ret )\r
2097   {\r
2098     return _f_result( 22, ret );\r
2099   }\r
2100 \r
2101   if ( before.bad != after.bad )\r
2102   {\r
2103     return _f_result( 23, 0 );\r
2104   }\r
2105 \r
2106   if ( before.free != after.free )\r
2107   {\r
2108     return _f_result( 24, 0 );\r
2109   }\r
2110 \r
2111   if ( before.used != after.used )\r
2112   {\r
2113     return _f_result( 25, 0 );\r
2114   }\r
2115 \r
2116   if ( before.total != after.total )\r
2117   {\r
2118     return _f_result( 26, 0 );\r
2119   }\r
2120 \r
2121   _f_dump( "passed..." );\r
2122   return 0;\r
2123 } /* f_writing */\r
2124 \r
2125 static unsigned char f_dots ( void )\r
2126 {\r
2127   unsigned char  ret;\r
2128   unsigned char  a, size;\r
2129   F_FILE       * file;\r
2130 \r
2131   _f_dump( "f_dots" );\r
2132 \r
2133   ret = f_mkdir( "/tt" );\r
2134   if ( ret )\r
2135   {\r
2136     return _f_result( 0, ret );\r
2137   }\r
2138 \r
2139   ret = f_chdir( "/tt" );\r
2140   if ( ret )\r
2141   {\r
2142     return _f_result( 1, ret );\r
2143   }\r
2144 \r
2145   ret = f_rmdir( "." );\r
2146   if ( ret != F_ERR_NOTFOUND )\r
2147   {\r
2148     return _f_result( 4, ret );\r
2149   }\r
2150 \r
2151   ret = f_rmdir( ".." );\r
2152   if ( ret != F_ERR_NOTFOUND )\r
2153   {\r
2154     return _f_result( 5, ret );\r
2155   }\r
2156 \r
2157   ret = f_chdir( "." );\r
2158   if ( ret )\r
2159   {\r
2160     return _f_result( 6, ret );\r
2161   }\r
2162 \r
2163   ret = _f_checkcwd( f_nameconv( "/tt" ) );\r
2164   if ( ret )\r
2165   {\r
2166     return _f_result( 7, ret );\r
2167   }\r
2168 \r
2169   ret = f_delete( "." );\r
2170   if ( ret != F_ERR_NOTFOUND )\r
2171   {\r
2172     return _f_result( 8, ret );\r
2173   }\r
2174 \r
2175   ret = f_delete( ".." );\r
2176   if ( ret != F_ERR_NOTFOUND )\r
2177   {\r
2178     return _f_result( 9, ret );\r
2179   }\r
2180 \r
2181   ret = f_mkdir( "." );\r
2182   if ( ret != F_ERR_NOTFOUND )\r
2183   {\r
2184     return _f_result( 10, ret );\r
2185   }\r
2186 \r
2187   ret = f_mkdir( ".." );\r
2188   if ( ret != F_ERR_NOTFOUND )\r
2189   {\r
2190     return _f_result( 11, ret );\r
2191   }\r
2192 \r
2193   ret = f_mkdir( "..." );\r
2194   if ( ret != F_ERR_NOTFOUND )\r
2195   {\r
2196     return _f_result( 12, ret );\r
2197   }\r
2198 \r
2199   for ( a = 0 ; a < 6 ; a++ )\r
2200   {\r
2201     char * mode;\r
2202     switch ( a )\r
2203     {\r
2204       case 0:\r
2205         mode = "r";\r
2206         break;\r
2207 \r
2208       case 1:\r
2209         mode = "r+";\r
2210         break;\r
2211 \r
2212       case 2:\r
2213         mode = "w";\r
2214         break;\r
2215 \r
2216       case 3:\r
2217         mode = "w+";\r
2218         break;\r
2219 \r
2220       case 4:\r
2221         mode = "a";\r
2222         break;\r
2223 \r
2224       case 5:\r
2225         mode = "a+";\r
2226         break;\r
2227 \r
2228       default:\r
2229         return _f_result( 13, a );\r
2230     } /* switch */\r
2231 \r
2232     file = f_open( ".", mode );\r
2233     if ( file )\r
2234     {\r
2235       return _f_result( 14, a );\r
2236     }\r
2237 \r
2238     file = f_open( "..", mode );\r
2239     if ( file )\r
2240     {\r
2241       return _f_result( 15, a );\r
2242     }\r
2243 \r
2244     file = f_open( "...", mode );\r
2245     if ( file )\r
2246     {\r
2247       return _f_result( 16, a );\r
2248     }\r
2249   }\r
2250 \r
2251   size = (unsigned char)f_filelength( "." );\r
2252   if ( size )\r
2253   {\r
2254     return _f_result( 17, size );\r
2255   }\r
2256 \r
2257   size = (unsigned char)f_filelength( ".." );\r
2258   if ( size )\r
2259   {\r
2260     return _f_result( 18, size );\r
2261   }\r
2262 \r
2263   size = (unsigned char)f_filelength( "..." );\r
2264   if ( size )\r
2265   {\r
2266     return _f_result( 19, size );\r
2267   }\r
2268 \r
2269 \r
2270   ret = f_chdir( "..." );\r
2271   if ( ret != F_ERR_NOTFOUND )\r
2272   {\r
2273     return _f_result( 20, ret );\r
2274   }\r
2275 \r
2276   ret = f_chdir( ".." );\r
2277   if ( ret )\r
2278   {\r
2279     return _f_result( 21, ret );\r
2280   }\r
2281 \r
2282   ret = f_rmdir( "tt" );\r
2283   if ( ret )\r
2284   {\r
2285     return _f_result( 27, ret );\r
2286   }\r
2287 \r
2288 \r
2289   _f_dump( "passed..." );\r
2290   return 0;\r
2291 } /* f_dots */\r
2292 \r
2293 \r
2294 typedef struct\r
2295 {\r
2296   unsigned char  MagicNum;\r
2297   unsigned char  Line;\r
2298   unsigned char  Buf[87];\r
2299 } struct_TestFileSysEntry;\r
2300   #define NUM_OF_RECORDS 10\r
2301 static unsigned char f_rit ( void )\r
2302 {\r
2303   unsigned char             i;\r
2304   unsigned char             ret;\r
2305   F_FILE                  * File;\r
2306   struct_TestFileSysEntry * Entry = (struct_TestFileSysEntry *)( ( ( (long)testbuffer + 3 ) >> 2 ) << 2 );\r
2307   unsigned short            Pos;\r
2308   unsigned char             Ch;\r
2309   unsigned char             Founded;\r
2310 \r
2311   _f_dump( "f_rit" );\r
2312 \r
2313   (void)f_delete( "MyTest" );\r
2314   File = f_open( "MyTest", "a+" );\r
2315   if ( !File )\r
2316   {\r
2317     return _f_result( 1, 0 );\r
2318   }\r
2319 \r
2320   /* add records  */\r
2321   for ( i = 0 ; i < NUM_OF_RECORDS ; i++ )\r
2322   {\r
2323     Ch = (char)( i % 10 );\r
2324     Entry->MagicNum = 0xbc;\r
2325     Entry->Line = i;\r
2326     Entry->Buf[0] = Ch;\r
2327     Entry->Buf[10] = (unsigned char)( Ch + 1 );\r
2328 \r
2329     if ( F_NO_ERROR != f_seek( File, 0, F_SEEK_END ) )\r
2330     {\r
2331       return _f_result( 2, 0 ); /* Fail, could not go to the end of the file */\r
2332     }\r
2333 \r
2334     if ( sizeof( struct_TestFileSysEntry ) != f_write( (void *)Entry, 1, sizeof( struct_TestFileSysEntry ), File ) )\r
2335     {\r
2336       return _f_result( 3, 0 ); /* Fail, could not write new entry */\r
2337     }\r
2338 \r
2339     Pos = (unsigned short)f_tell( File );\r
2340     if ( ( ( Pos / sizeof( struct_TestFileSysEntry ) ) - 1 ) != i )\r
2341     {\r
2342       return _f_result( 4, 0 ); /* Fail, wrong file position */\r
2343     }\r
2344 \r
2345     if ( F_NO_ERROR != f_seek( File, (long)( Pos - sizeof( struct_TestFileSysEntry ) ), F_SEEK_SET ) )\r
2346     {\r
2347       return _f_result( 5, 0 ); /* Fail, could not go to new entry position */\r
2348     }\r
2349 \r
2350     if ( sizeof( struct_TestFileSysEntry ) != f_read( (void *)Entry, 1, sizeof( struct_TestFileSysEntry ), File ) )\r
2351     {\r
2352       return _f_result( 6, 0 ); /* Fail, could not read the new entry */\r
2353     }\r
2354 \r
2355     if ( ( Entry->MagicNum != 0xbc ) || ( Entry->Line != (int)i ) || ( Entry->Buf[0] != Ch ) || ( Entry->Buf[10] != Ch + 1 ) )\r
2356     {\r
2357       return _f_result( 7, 0 ); /*Fail, the new entry is corrupted"*/\r
2358     }\r
2359   }\r
2360 \r
2361   ret = f_close( File );\r
2362   if ( ret )\r
2363   {\r
2364     return _f_result( 8, ret );\r
2365   }\r
2366 \r
2367 \r
2368   /*Open file again*/\r
2369   File = f_open( "MyTest", "a+" );\r
2370   if ( !File )\r
2371   {\r
2372     return _f_result( 9, 0 );\r
2373   }\r
2374 \r
2375   /* read records  */\r
2376   for ( i = 0 ; i < NUM_OF_RECORDS ; i++ )\r
2377   {\r
2378     Ch = (char)( i % 10 );\r
2379 \r
2380     if ( F_NO_ERROR != f_seek( File, 0, F_SEEK_SET ) )\r
2381     {\r
2382       return _f_result( 10, 0 ); /* Fail, could not go to the start of the file */\r
2383     }\r
2384 \r
2385     Founded = 0;\r
2386     while ( sizeof( struct_TestFileSysEntry ) == f_read( (void *)Entry, 1, sizeof( struct_TestFileSysEntry ), File ) )\r
2387     {\r
2388       if ( ( Entry->MagicNum == 0xbc )\r
2389           && ( Entry->Line == (int)i )\r
2390           && ( Entry->Buf[0] == Ch )\r
2391           && ( Entry->Buf[10] == Ch + 1 ) )\r
2392       {\r
2393         Founded = 1;\r
2394         break;\r
2395       }\r
2396     }\r
2397 \r
2398     if ( !Founded )\r
2399     {\r
2400       return _f_result( 11, i );      /* Entry not founded */\r
2401     }\r
2402   }\r
2403 \r
2404   ret = f_close( File );\r
2405   if ( ret )\r
2406   {\r
2407     return _f_result( 12, ret );\r
2408   }\r
2409 \r
2410 \r
2411   ret = f_delete( "MyTest" );\r
2412   if ( ret )\r
2413   {\r
2414     return _f_result( 13, ret );\r
2415   }\r
2416 \r
2417   _f_dump( "passed..." );\r
2418 \r
2419   return 0;\r
2420 } /* f_rit */\r
2421 \r
2422 \r
2423 \r
2424 \r
2425 static unsigned char f_truncating ( void )\r
2426 {\r
2427   F_FILE       * file;\r
2428   unsigned long  size;\r
2429   unsigned char  ret;\r
2430 \r
2431   _f_dump( "f_truncating" );\r
2432 \r
2433   file = f_open( "test.bin", "w+" );\r
2434   if ( !file )\r
2435   {\r
2436     return _f_result( 0, 0 );\r
2437   }\r
2438 \r
2439   (void)psp_memset( testbuffer, 1, F_MAX_SEEK_TEST );\r
2440   size = (unsigned long)f_write( testbuffer, 1, F_MAX_SEEK_TEST, file );\r
2441   if ( size != F_MAX_SEEK_TEST )\r
2442   {\r
2443     return _f_result( 1, size );\r
2444   }\r
2445 \r
2446   ret = f_close( file );\r
2447   if ( ret )\r
2448   {\r
2449     return _f_result( 2, ret );\r
2450   }\r
2451 \r
2452   file = f_truncate( "test.bin", F_MAX_SEEK_TEST - 4 );\r
2453   if ( !file )\r
2454   {\r
2455     return _f_result( 3, 0 );\r
2456   }\r
2457 \r
2458   ret = f_close( file );\r
2459   if ( ret )\r
2460   {\r
2461     return _f_result( 4, ret );\r
2462   }\r
2463 \r
2464   size = (unsigned long)f_filelength( "test.bin" );\r
2465   if ( size != F_MAX_SEEK_TEST - 4 )\r
2466   {\r
2467     return _f_result( 5, size );\r
2468   }\r
2469 \r
2470 \r
2471   file = f_truncate( "test.bin", F_MAX_SEEK_TEST );\r
2472   if ( !file )\r
2473   {\r
2474     return _f_result( 3, 0 );\r
2475   }\r
2476 \r
2477   ret = f_close( file );\r
2478   if ( ret )\r
2479   {\r
2480     return _f_result( 4, ret );\r
2481   }\r
2482 \r
2483   size = (unsigned long)f_filelength( "test.bin" );\r
2484   if ( size != F_MAX_SEEK_TEST )\r
2485   {\r
2486     return _f_result( 5, size );\r
2487   }\r
2488 \r
2489 \r
2490   file = f_truncate( "test.bin", ( F_MAX_SEEK_TEST / 2 ) - 92 );\r
2491   if ( !file )\r
2492   {\r
2493     return _f_result( 6, 0 );\r
2494   }\r
2495 \r
2496   (void)psp_memset( testbuffer, 2, 92 );\r
2497   size = (unsigned long)f_write( testbuffer, 1, 92, file );\r
2498   if ( size != 92 )\r
2499   {\r
2500     return _f_result( 7, size );\r
2501   }\r
2502 \r
2503   ret = f_close( file );\r
2504   if ( ret )\r
2505   {\r
2506     return _f_result( 8, ret );\r
2507   }\r
2508 \r
2509   size = (unsigned long)f_filelength( "test.bin" );\r
2510   if ( size != ( F_MAX_SEEK_TEST / 2 ) )\r
2511   {\r
2512     return _f_result( 9, size );\r
2513   }\r
2514 \r
2515 \r
2516   file = f_truncate( "test.bin", 1 );\r
2517   if ( !file )\r
2518   {\r
2519     return _f_result( 10, 0 );\r
2520   }\r
2521 \r
2522   (void)psp_memset( testbuffer, 3, 2 );\r
2523   size = (unsigned long)f_write( testbuffer, 1, 2, file );\r
2524   if ( size != 2 )\r
2525   {\r
2526     return _f_result( 11, size );\r
2527   }\r
2528 \r
2529   ret = f_close( file );\r
2530   if ( ret )\r
2531   {\r
2532     return _f_result( 12, ret );\r
2533   }\r
2534 \r
2535   size = (unsigned long)f_filelength( "test.bin" );\r
2536   if ( size != 3 )\r
2537   {\r
2538     return _f_result( 13, size );\r
2539   }\r
2540 \r
2541 \r
2542 \r
2543   _f_dump( "passed..." );\r
2544   return 0;\r
2545 } /* f_truncating */\r
2546 \r
2547 \r
2548 void f_dotest ( unsigned char t )\r
2549 {\r
2550   _f_dump( "File system test started..." );\r
2551   _f_dump( "WARNING: The contents of your drive will be destroyed!\n" );\r
2552 \r
2553   (void)_f_poweron();\r
2554 \r
2555   switch ( t )\r
2556   {\r
2557     case 0:\r
2558     case 1:\r
2559       (void)f_formatting();\r
2560       if ( t )\r
2561       {\r
2562         break;\r
2563       }\r
2564 \r
2565 \r
2566     /* fall through */\r
2567     case 2:\r
2568       (void)f_dirtest();\r
2569       if ( t )\r
2570       {\r
2571         break;\r
2572       }\r
2573 \r
2574 \r
2575     /* fall through */\r
2576     case 3:\r
2577       (void)f_findingtest();\r
2578       if ( t )\r
2579       {\r
2580         break;\r
2581       }\r
2582 \r
2583 \r
2584     /* fall through */\r
2585     case 4:\r
2586       (void)f_powerfail();\r
2587       if ( t )\r
2588       {\r
2589         break;\r
2590       }\r
2591 \r
2592 \r
2593     /* fall through */\r
2594     case 5:\r
2595       (void)f_seeking( 128 );\r
2596       if ( t )\r
2597       {\r
2598         break;\r
2599       }\r
2600 \r
2601   #if ( F_MAX_SEEK_TEST > 128 )\r
2602 \r
2603     /* fall through */\r
2604     case 6:\r
2605       (void)f_seeking( 256 );\r
2606       if ( t )\r
2607       {\r
2608         break;\r
2609       }\r
2610 \r
2611   #endif\r
2612   #if ( F_MAX_SEEK_TEST > 256 )\r
2613 \r
2614     /* fall through */\r
2615     case 7:\r
2616       (void)f_seeking( 512 );\r
2617       if ( t )\r
2618       {\r
2619         break;\r
2620       }\r
2621 \r
2622   #endif\r
2623   #if ( F_MAX_SEEK_TEST > 512 )\r
2624 \r
2625     /* fall through */\r
2626     case 8:\r
2627       (void)f_seeking( 1024 );\r
2628       if ( t )\r
2629       {\r
2630         break;\r
2631       }\r
2632 \r
2633   #endif\r
2634   #if ( F_MAX_SEEK_TEST > 1024 )\r
2635 \r
2636     /* fall through */\r
2637     case 9:\r
2638       (void)f_seeking( 2048 );\r
2639       if ( t )\r
2640       {\r
2641         break;\r
2642       }\r
2643 \r
2644   #endif\r
2645   #if ( F_MAX_SEEK_TEST > 2048 )\r
2646 \r
2647     /* fall through */\r
2648     case 10:\r
2649       (void)f_seeking( 4096 );\r
2650       if ( t )\r
2651       {\r
2652         break;\r
2653       }\r
2654 \r
2655   #endif\r
2656   #if ( F_MAX_SEEK_TEST > 4096 )\r
2657 \r
2658     /* fall through */\r
2659     case 11:\r
2660       (void)f_seeking( 8192 );\r
2661       if ( t )\r
2662       {\r
2663         break;\r
2664       }\r
2665 \r
2666   #endif\r
2667   #if ( F_MAX_SEEK_TEST > 8192 )\r
2668 \r
2669     /* fall through */\r
2670     case 12:\r
2671       (void)f_seeking( 16384 );\r
2672       if ( t )\r
2673       {\r
2674         break;\r
2675       }\r
2676 \r
2677   #endif\r
2678   #if ( F_MAX_SEEK_TEST > 16384 )\r
2679 \r
2680     /* fall through */\r
2681     case 13:\r
2682       (void)f_seeking( 32768 );\r
2683       if ( t )\r
2684       {\r
2685         break;\r
2686       }\r
2687 \r
2688   #endif\r
2689 \r
2690     /* fall through */\r
2691     case 14:\r
2692       (void)f_opening();\r
2693       if ( t )\r
2694       {\r
2695         break;\r
2696       }\r
2697 \r
2698 \r
2699     /* fall through */\r
2700     case 15:\r
2701       (void)f_appending();\r
2702       if ( t )\r
2703       {\r
2704         break;\r
2705       }\r
2706 \r
2707 \r
2708     /* fall through */\r
2709     case 16:\r
2710       (void)f_writing();\r
2711       if ( t )\r
2712       {\r
2713         break;\r
2714       }\r
2715 \r
2716 \r
2717     /* fall through */\r
2718     case 17:\r
2719       (void)f_dots();\r
2720       if ( t )\r
2721       {\r
2722         break;\r
2723       }\r
2724 \r
2725 \r
2726     /* fall through */\r
2727     case 18:\r
2728       (void)f_rit();\r
2729       if ( t )\r
2730       {\r
2731         break;\r
2732       }\r
2733 \r
2734     case 19:\r
2735       (void)f_truncating();\r
2736       if ( t )\r
2737       {\r
2738         break;\r
2739       }\r
2740 \r
2741       break;\r
2742   } /* switch */\r
2743 \r
2744   _f_dump( "End of tests..." );\r
2745 } /* f_dotest */\r
2746 \r
2747 \r
2748 \r
2749 /****************************************************************************\r
2750  *\r
2751  * end of test.c\r
2752  *\r
2753  ***************************************************************************/\r
2754 #endif  /*_TEST_C_*/\r