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