6 * FreeRTOS+FAT FS V1.0.0 (C) 2013 HCC Embedded
\r
8 * The FreeRTOS+FAT SL license terms are different to the FreeRTOS license
\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
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
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
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
40 * http://www.FreeRTOS.org
\r
41 * http://www.FreeRTOS.org/FreeRTOS-Plus
\r
46 #include "../../api/fat_sl.h"
\r
47 #include "../../psp/target/fat_sl/psp_test.h"
\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
54 static char cwd[F_MAXPATH];
\r
58 static void _f_deleteall ( void )
\r
61 unsigned char sd = 0, rc, fl = 0;
\r
66 rc = f_findfirst( "*.*", &find );
\r
67 while ( rc == 0 && find.filename[0] == '.' )
\r
69 rc = f_findnext( &find );
\r
74 if ( find.attr & F_ATTR_DIR )
\r
79 (void)f_chdir( find.filename );
\r
84 (void)f_delete( find.filename );
\r
85 rc = f_findnext( &find );
\r
89 if ( rc && sd && fl )
\r
91 (void)f_chdir( ".." );
\r
95 (void)f_rmdir( find.filename );
\r
96 rc = f_findnext( &find );
\r
99 if ( rc && sd && !fl )
\r
101 (void)f_chdir( "/" );
\r
107 } /* _f_deleteall */
\r
110 static char * f_nameconv ( char * s )
\r
117 if ( ( ch >= 'a' ) && ( ch <= 'z' ) )
\r
132 static unsigned char f_formatting ( void )
\r
136 _f_dump( "f_formatting" );
\r
138 /*checking formatting*/
\r
139 ret = f_format( F_FAT_TYPE );
\r
142 return _f_result( 0, ret );
\r
145 ret = _f_poweron();
\r
148 return _f_result( 1, ret );
\r
151 ret = f_findfirst( "*.*", &find );
\r
152 if ( ret != F_ERR_NOTFOUND )
\r
154 return _f_result( 2, ret );
\r
157 _f_dump( "passed..." );
\r
159 } /* f_formatting */
\r
161 static unsigned char _f_checkcwd ( char * orig )
\r
165 ret = f_getcwd( cwd, F_MAXPATH );
\r
171 if ( strcmp( orig, cwd ) )
\r
173 return (unsigned char)-1;
\r
179 static unsigned char f_dirtest ( void )
\r
183 _f_dump( "f_dirtest" );
\r
187 /*creates a ab abc abcd*/
\r
188 ret = f_mkdir( "a" );
\r
191 return _f_result( 1, ret );
\r
194 ret = f_mkdir( "ab" );
\r
197 return _f_result( 2, ret );
\r
200 ret = f_mkdir( "abc" );
\r
203 return _f_result( 3, ret );
\r
206 ret = f_mkdir( "abca" );
\r
209 return _f_result( 4, ret );
\r
212 /*creates directories in /a - a ab abc abcd*/
\r
213 ret = f_mkdir( "a/a" );
\r
216 return _f_result( 5, ret );
\r
219 ret = f_mkdir( "a/ab" );
\r
222 return _f_result( 6, ret );
\r
225 ret = f_mkdir( "a/abc" );
\r
228 return _f_result( 7, ret );
\r
231 ret = f_mkdir( "a/abcd" );
\r
234 return _f_result( 8, ret );
\r
237 /*change into a/abcd and check cwd*/
\r
238 ret = f_chdir( "a/abcd" );
\r
241 return _f_result( 9, ret );
\r
244 ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );
\r
247 return _f_result( 10, ret );
\r
250 /*make directory t change into t and check cwd="a/abcd/t"*/
\r
251 ret = f_mkdir( "t" );
\r
254 return _f_result( 11, ret );
\r
257 ret = f_chdir( "t" );
\r
260 return _f_result( 12, ret );
\r
263 ret = _f_checkcwd( f_nameconv( "/a/abcd/t" ) );
\r
266 return _f_result( 13, ret );
\r
269 ret = f_chdir( "." );
\r
272 return _f_result( 14, ret );
\r
275 ret = _f_checkcwd( f_nameconv( "/a/abcd/t" ) );
\r
278 return _f_result( 15, ret );
\r
281 ret = f_chdir( "../." );
\r
284 return _f_result( 16, ret );
\r
287 ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );
\r
290 return _f_result( 17, ret );
\r
294 ret = f_rmdir( "t" );
\r
297 return _f_result( 18, ret );
\r
300 ret = f_chdir( "t" );
\r
301 if ( ret != F_ERR_NOTFOUND )
\r
303 return _f_result( 19, ret );
\r
306 /*removing /a dir*/
\r
307 ret = f_rmdir( "/ab" );
\r
310 return _f_result( 20, ret );
\r
313 ret = f_chdir( "/ab" );
\r
314 if ( ret != F_ERR_NOTFOUND )
\r
316 return _f_result( 21, ret );
\r
319 /*removing /a dir*/
\r
320 ret = f_rmdir( "../../a" );
\r
321 if ( ret != F_ERR_NOTEMPTY )
\r
323 return _f_result( 22, ret );
\r
326 /*removing /abca dir*/
\r
327 ret = f_rmdir( "a:/abca" );
\r
330 return _f_result( 24, ret );
\r
333 /*changing invalid dirs*/
\r
334 ret = f_chdir( "" );
\r
335 if ( ret != F_ERR_INVALIDNAME )
\r
337 return _f_result( 25, ret );
\r
340 ret = f_chdir( " " );
\r
343 return _f_result( 26, ret );
\r
346 ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );
\r
349 return _f_result( 27, ret );
\r
352 ret = f_chdir( "?" );
\r
353 if ( ret != F_ERR_INVALIDNAME )
\r
355 return _f_result( 28, ret );
\r
358 ret = f_chdir( "*.*" );
\r
359 if ( ret != F_ERR_INVALIDNAME )
\r
361 return _f_result( 29, ret );
\r
364 ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );
\r
367 return _f_result( 30, ret );
\r
370 /*changing into /abc and removes subfolder from /a/ */
\r
371 ret = f_chdir( "/abc" );
\r
374 return _f_result( 31, ret );
\r
377 ret = f_rmdir( "/a/a" );
\r
380 return _f_result( 32, ret );
\r
383 ret = f_rmdir( "A:../a/ab" );
\r
386 return _f_result( 33, ret );
\r
389 ret = f_rmdir( "A:/a/abc" );
\r
392 return _f_result( 34, ret );
\r
395 ret = f_rmdir( ".././abc/.././a/../a/abcd" );
\r
398 return _f_result( 35, ret );
\r
401 /*some invalid rmdir*/
\r
402 ret = f_rmdir( "." );
\r
403 if ( ret != F_ERR_NOTFOUND )
\r
405 return _f_result( 36, ret );
\r
408 ret = f_rmdir( ".." );
\r
409 if ( ret != F_ERR_NOTFOUND )
\r
411 return _f_result( 37, ret );
\r
414 /*create again abc remove abc*/
\r
415 ret = f_mkdir( ".././abc" );
\r
416 if ( ret != F_ERR_DUPLICATED )
\r
418 return _f_result( 38, ret );
\r
421 ret = f_rmdir( "../abc" );
\r
424 return _f_result( 39, ret );
\r
427 ret = f_mkdir( ".././abc" );
\r
428 if ( ret != F_ERR_INVALIDDIR )
\r
430 return _f_result( 40, ret ); /*cwd is not exist*/
\r
433 ret = f_chdir( "/" );
\r
436 return _f_result( 41, ret );
\r
439 /*try . and .. in the root*/
\r
440 ret = f_chdir( "." );
\r
443 return _f_result( 42, ret );
\r
446 ret = f_chdir( "./././." );
\r
449 return _f_result( 43, ret );
\r
452 ret = f_chdir( ".." );
\r
453 if ( ret != F_ERR_NOTFOUND )
\r
455 return _f_result( 44, ret );
\r
458 ret = _f_checkcwd( "/" ); /*root!*/
\r
461 return _f_result( 45, ret );
\r
464 /*test . and .. in a and remove a*/
\r
465 ret = f_chdir( "a" );
\r
468 return _f_result( 46, ret );
\r
471 ret = f_chdir( ".." );
\r
474 return _f_result( 47, ret );
\r
477 ret = f_chdir( "a" );
\r
480 return _f_result( 48, ret );
\r
483 ret = f_chdir( "." );
\r
486 return _f_result( 49, ret );
\r
489 ret = f_chdir( "a" );
\r
490 if ( ret != F_ERR_NOTFOUND )
\r
492 return _f_result( 50, ret );
\r
495 ret = f_chdir( "./.." );
\r
498 return _f_result( 51, ret );
\r
501 ret = f_rmdir( "a" );
\r
504 return _f_result( 52, ret );
\r
507 /*check if all are removed*/
\r
508 ret = f_findfirst( "*.*", &find );
\r
509 if ( ret != F_ERR_NOTFOUND )
\r
511 return _f_result( 53, ret );
\r
514 _f_dump( "passed..." );
\r
519 static unsigned char f_findingtest ( void )
\r
523 _f_dump( "f_findingtest" );
\r
528 ret = f_findfirst( "*.*", &find );
\r
529 if ( ret != F_ERR_NOTFOUND )
\r
531 return _f_result( 0, ret );
\r
534 /*create Hello.dir*/
\r
535 ret = f_mkdir( "Hello.dir" );
\r
538 return _f_result( 1, ret );
\r
541 /*check if it is exist, and only exist*/
\r
542 ret = f_findfirst( "*.*", &find );
\r
545 return _f_result( 2, ret );
\r
548 if ( strcmp( find.filename, f_nameconv( "Hello.dir" ) ) )
\r
550 return _f_result( 3, 0 );
\r
553 if ( find.attr != F_ATTR_DIR )
\r
555 return _f_result( 4, 0 );
\r
558 ret = f_findnext( &find );
\r
559 if ( ret != F_ERR_NOTFOUND )
\r
561 return _f_result( 5, ret );
\r
564 /*check some not founds*/
\r
565 ret = f_findfirst( "q*.*", &find );
\r
566 if ( ret != F_ERR_NOTFOUND )
\r
568 return _f_result( 6, ret );
\r
571 ret = f_findfirst( "Hello.", &find );
\r
572 if ( ret != F_ERR_NOTFOUND )
\r
574 return _f_result( 7, ret );
\r
577 ret = f_findfirst( "a/*.*", &find );
\r
578 if ( ret != F_ERR_INVALIDDIR )
\r
580 return _f_result( 8, ret );
\r
583 ret = f_findfirst( ".", &find );
\r
584 if ( ret != F_ERR_NOTFOUND )
\r
586 return _f_result( 9, ret );
\r
589 ret = f_findfirst( "..", &find );
\r
590 if ( ret != F_ERR_NOTFOUND )
\r
592 return _f_result( 10, ret );
\r
595 ret = f_findfirst( "?e.*", &find );
\r
596 if ( ret != F_ERR_NOTFOUND )
\r
598 return _f_result( 11, ret );
\r
601 ret = f_findfirst( "*.", &find );
\r
602 if ( ret != F_ERR_NOTFOUND )
\r
604 return _f_result( 12, ret );
\r
607 ret = f_findfirst( "*.?", &find );
\r
608 if ( ret != F_ERR_NOTFOUND )
\r
610 return _f_result( 13, ret );
\r
613 ret = f_findfirst( "*.??", &find );
\r
614 if ( ret != F_ERR_NOTFOUND )
\r
616 return _f_result( 14, ret );
\r
620 /*check some founds*/
\r
621 ret = f_findfirst( "*.dir", &find );
\r
624 return _f_result( 15, ret );
\r
627 ret = f_findfirst( "*.d?r", &find );
\r
630 return _f_result( 16, ret );
\r
633 ret = f_findfirst( "*.d??", &find );
\r
636 return _f_result( 17, ret );
\r
639 ret = f_findfirst( "*.???", &find );
\r
642 return _f_result( 18, ret );
\r
645 ret = f_findfirst( "?ello.???", &find );
\r
648 return _f_result( 19, ret );
\r
651 ret = f_findfirst( "he??o.dir", &find );
\r
654 return _f_result( 20, ret );
\r
657 ret = f_findfirst( "he?*.dir", &find );
\r
660 return _f_result( 21, ret );
\r
663 ret = f_findfirst( "HELLO.DIR", &find ); /*no capitals sensitivity in find!!*/
\r
666 return _f_result( 22, ret );
\r
669 /*change into hello.dir*/
\r
670 ret = f_chdir( "hello.dir" );
\r
673 return _f_result( 23, ret );
\r
676 ret = f_findfirst( "*.*", &find );
\r
679 return _f_result( 24, ret );
\r
682 ret = f_findfirst( "..", &find );
\r
685 return _f_result( 25, ret );
\r
688 ret = f_findfirst( "??", &find );
\r
691 return _f_result( 26, ret );
\r
694 ret = f_findfirst( ".", &find );
\r
697 return _f_result( 27, ret );
\r
700 ret = f_findfirst( "k*.*", &find );
\r
701 if ( ret != F_ERR_NOTFOUND )
\r
703 return _f_result( 28, ret );
\r
706 ret = f_findfirst( "*.", &find );
\r
709 return _f_result( 29, ret );
\r
712 if ( strcmp( find.filename, "." ) )
\r
714 return _f_result( 29, 0 );
\r
717 ret = f_findnext( &find );
\r
720 return _f_result( 29, ret );
\r
723 if ( strcmp( find.filename, ".." ) )
\r
725 return _f_result( 29, 0 );
\r
728 ret = f_findnext( &find );
\r
729 if ( ret != F_ERR_NOTFOUND )
\r
731 return _f_result( 29, ret );
\r
735 ret = f_findfirst( "*.a", &find );
\r
736 if ( ret != F_ERR_NOTFOUND )
\r
738 return _f_result( 30, ret );
\r
741 /*creating testdir and find it*/
\r
742 ret = f_mkdir( "testdir" );
\r
745 return _f_result( 31, ret );
\r
748 ret = f_findfirst( "*.", &find );
\r
751 return _f_result( 32, ret );
\r
754 if ( strcmp( find.filename, "." ) )
\r
756 return _f_result( 32, 0 );
\r
759 ret = f_findnext( &find );
\r
762 return _f_result( 32, ret );
\r
765 if ( strcmp( find.filename, ".." ) )
\r
767 return _f_result( 32, 0 );
\r
770 ret = f_findnext( &find );
\r
773 return _f_result( 32, ret );
\r
777 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
779 return _f_result( 33, 0 );
\r
782 ret = f_findfirst( "*.*", &find );
\r
785 return _f_result( 34, ret );
\r
788 if ( strcmp( find.filename, "." ) )
\r
790 return _f_result( 35, 0 );
\r
793 ret = f_findnext( &find );
\r
796 return _f_result( 35, ret );
\r
799 if ( strcmp( find.filename, ".." ) )
\r
801 return _f_result( 35, 0 );
\r
804 ret = f_findnext( &find );
\r
807 return _f_result( 36, ret );
\r
810 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
812 return _f_result( 37, 0 );
\r
815 ret = f_findnext( &find );
\r
816 if ( ret != F_ERR_NOTFOUND )
\r
818 return _f_result( 38, ret );
\r
821 /*search exact file*/
\r
822 ret = f_findfirst( "testDir", &find ); /*no capitals!*/
\r
825 return _f_result( 39, ret );
\r
828 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
830 return _f_result( 40, 0 );
\r
833 ret = f_findnext( &find );
\r
834 if ( ret != F_ERR_NOTFOUND )
\r
836 return _f_result( 41, ret );
\r
840 /*go back to root and remove dirs*/
\r
841 ret = f_chdir( "\\" );
\r
844 return _f_result( 42, ret );
\r
847 ret = f_rmdir( "Hello.dir/testdir" );
\r
850 return _f_result( 43, ret );
\r
853 ret = f_rmdir( "Hello.dir" );
\r
856 return _f_result( 44, ret );
\r
859 /*check if all are removed*/
\r
860 ret = f_findfirst( "*.*", &find );
\r
861 if ( ret != F_ERR_NOTFOUND )
\r
863 return _f_result( 45, ret );
\r
866 _f_dump( "passed..." );
\r
868 } /* f_findingtest */
\r
870 static unsigned char f_powerfail ( void )
\r
874 _f_dump( "f_powerfail" );
\r
876 /*checking if its power fail system (RAMDRIVE is not powerfail!)*/
\r
877 ret = f_mkdir( "testdir" );
\r
880 return _f_result( 0, ret );
\r
883 ret = _f_poweron();
\r
886 return _f_result( 1, ret );
\r
889 ret = f_findfirst( "testdir", &find );
\r
892 return _f_result( 2, ret );
\r
895 /*checking formatting*/
\r
896 ret = f_format( F_FAT_TYPE );
\r
899 return _f_result( 3, ret );
\r
902 ret = _f_poweron();
\r
905 return _f_result( 4, ret );
\r
908 ret = f_findfirst( "*.*", &find );
\r
909 if ( ret != F_ERR_NOTFOUND )
\r
911 return _f_result( 5, ret );
\r
914 /*checking formatting, 1st creating*/
\r
915 ret = f_format( F_FAT_TYPE );
\r
918 return _f_result( 6, ret );
\r
921 ret = f_mkdir( "testdir" );
\r
924 return _f_result( 7, ret );
\r
927 ret = f_findfirst( "testdir", &find );
\r
930 return _f_result( 8, ret );
\r
933 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
935 return _f_result( 9, 0 );
\r
938 ret = _f_poweron();
\r
941 return _f_result( 10, ret );
\r
944 ret = f_findfirst( "*.*", &find );
\r
947 return _f_result( 11, ret );
\r
950 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
952 return _f_result( 12, 0 );
\r
955 /*checking formatting, 2nd creating*/
\r
956 ret = f_format( F_FAT_TYPE );
\r
959 return _f_result( 13, ret );
\r
962 ret = f_mkdir( "testdir" );
\r
965 return _f_result( 14, ret );
\r
968 ret = f_findfirst( "testdir", &find );
\r
971 return _f_result( 15, ret );
\r
974 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
976 return _f_result( 16, 0 );
\r
979 ret = f_mkdir( "testdir2" );
\r
982 return _f_result( 17, ret );
\r
985 ret = f_findfirst( "testdir2", &find );
\r
988 return _f_result( 18, ret );
\r
991 if ( strcmp( find.filename, f_nameconv( "testdir2" ) ) )
\r
993 return _f_result( 19, 0 );
\r
996 ret = _f_poweron();
\r
999 return _f_result( 20, ret );
\r
1002 ret = f_findfirst( "*.*", &find );
\r
1005 return _f_result( 21, ret );
\r
1008 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
1010 return _f_result( 22, 0 );
\r
1013 ret = f_findnext( &find );
\r
1016 return _f_result( 23, ret );
\r
1019 if ( strcmp( find.filename, f_nameconv( "testdir2" ) ) )
\r
1021 return _f_result( 24, 0 );
\r
1024 ret = f_findnext( &find );
\r
1025 if ( ret != F_ERR_NOTFOUND )
\r
1027 return _f_result( 25, ret );
\r
1031 /*checking empty*/
\r
1032 ret = _f_poweron();
\r
1035 return _f_result( 26, ret );
\r
1038 ret = f_format( F_FAT_TYPE );
\r
1041 return _f_result( 27, ret );
\r
1044 ret = _f_poweron();
\r
1047 return _f_result( 28, ret );
\r
1050 ret = f_findfirst( "*.*", &find );
\r
1051 if ( ret != F_ERR_NOTFOUND )
\r
1053 return _f_result( 29, ret );
\r
1057 _f_dump( "passed..." );
\r
1059 } /* f_powerfail */
\r
1062 char testbuffer[F_MAX_SEEK_TEST + 16]; /* +16 for f_appending test */
\r
1064 static unsigned char checkfilecontent ( long nums, unsigned char value, F_FILE * file )
\r
1070 if ( f_eof( file ) )
\r
1072 return 1; /*eof ?*/
\r
1075 if ( 1 != f_read( &ch, 1, 1, file ) )
\r
1080 if ( ch != value )
\r
1087 } /* checkfilecontent */
\r
1089 static unsigned char f_seeking ( int sectorsize )
\r
1092 unsigned char ret;
\r
1093 unsigned long size;
\r
1094 unsigned long pos;
\r
1096 if ( sectorsize == 128 )
\r
1098 _f_dump( "f_seeking with 128" );
\r
1101 #if ( F_MAX_SEEK_TEST > 128 )
\r
1102 else if ( sectorsize == 256 )
\r
1104 _f_dump( "f_seeking with 256" );
\r
1107 #if ( F_MAX_SEEK_TEST > 256 )
\r
1108 else if ( sectorsize == 512 )
\r
1110 _f_dump( "f_seeking with 512" );
\r
1113 #if ( F_MAX_SEEK_TEST > 512 )
\r
1114 else if ( sectorsize == 1024 )
\r
1116 _f_dump( "f_seeking with 1024" );
\r
1119 #if ( F_MAX_SEEK_TEST > 1024 )
\r
1120 else if ( sectorsize == 2048 )
\r
1122 _f_dump( "f_seeking with 2048" );
\r
1125 #if ( F_MAX_SEEK_TEST > 2048 )
\r
1126 else if ( sectorsize == 4096 )
\r
1128 _f_dump( "f_seeking with 4096" );
\r
1131 #if ( F_MAX_SEEK_TEST > 4096 )
\r
1132 else if ( sectorsize == 8192 )
\r
1134 _f_dump( "f_seeking with 8192" );
\r
1137 #if ( F_MAX_SEEK_TEST > 8192 )
\r
1138 else if ( sectorsize == 16384 )
\r
1140 _f_dump( "f_seeking with 16384" );
\r
1143 #if ( F_MAX_SEEK_TEST > 16384 )
\r
1144 else if ( sectorsize == 32768 )
\r
1146 _f_dump( "f_seeking with 32768" );
\r
1151 _f_dump( "f_seeking with random" );
\r
1154 /*checking sector boundary seekeng*/
\r
1155 file = f_open( "test.bin", "w+" );
\r
1158 return _f_result( 0, 0 );
\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
1166 return _f_result( 1, size );
\r
1169 pos = (unsigned long)f_tell( file );
\r
1170 if ( pos != (unsigned long) sectorsize )
\r
1172 return _f_result( 2, pos );
\r
1175 /*seek back and read some*/
\r
1176 ret = f_seek( file, 0, F_SEEK_SET ); /*seek back*/
\r
1179 return _f_result( 3, ret );
\r
1182 pos = (unsigned long)f_tell( file );
\r
1185 return _f_result( 4, pos );
\r
1188 size = (unsigned long)f_read( testbuffer, 1, sectorsize, file );
\r
1189 if ( size != (unsigned long) sectorsize )
\r
1191 return _f_result( 5, size );
\r
1194 pos = (unsigned long)f_tell( file );
\r
1195 if ( pos != (unsigned long) sectorsize )
\r
1197 return _f_result( 6, pos );
\r
1200 /*fake read at eof*/
\r
1201 size = (unsigned long)f_read( testbuffer, 1, 2, file ); /*eof!*/
\r
1204 return _f_result( 7, size );
\r
1207 pos = (unsigned long)f_tell( file );
\r
1208 if ( pos != (unsigned long) sectorsize )
\r
1210 return _f_result( 8, pos );
\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
1218 return _f_result( 11, size );
\r
1221 pos = (unsigned long)f_tell( file );
\r
1222 if ( pos != (unsigned long) ( sectorsize * 2 ) )
\r
1224 return _f_result( 12, pos );
\r
1227 /*seeking back and read 1byte less*/
\r
1228 ret = f_seek( file, 0, F_SEEK_SET );
\r
1231 return _f_result( 13, ret );
\r
1234 pos = (unsigned long)f_tell( file );
\r
1237 return _f_result( 14, pos );
\r
1240 size = (unsigned long)f_read( testbuffer, 1, sectorsize - 1, file );
\r
1241 if ( size != (unsigned long) ( sectorsize - 1 ) )
\r
1243 return _f_result( 15, size );
\r
1246 pos = (unsigned long)f_tell( file );
\r
1247 if ( pos != (unsigned long) ( sectorsize - 1 ) )
\r
1249 return _f_result( 16, pos );
\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
1258 return _f_result( 17, size );
\r
1261 pos = (unsigned long)f_tell( file );
\r
1262 if ( pos != (unsigned long) ( sectorsize + 1 ) )
\r
1264 return _f_result( 18, pos );
\r
1268 size = (unsigned long)f_read( testbuffer, 2, 1, file );
\r
1271 return _f_result( 19, size );
\r
1274 pos = (unsigned long)f_tell( file );
\r
1275 if ( pos != (unsigned long) ( sectorsize + 3 ) )
\r
1277 return _f_result( 20, pos );
\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
1286 return _f_result( 21, size );
\r
1289 pos = (unsigned long)f_tell( file );
\r
1290 if ( pos != (unsigned long) ( sectorsize + 3 + 4 ) )
\r
1292 return _f_result( 22, pos );
\r
1296 ret = f_seek( file, 2, F_SEEK_SET );
\r
1299 return _f_result( 23, ret );
\r
1302 pos = (unsigned long)f_tell( file );
\r
1305 return _f_result( 24, pos );
\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
1313 return _f_result( 25, size );
\r
1316 pos = (unsigned long)f_tell( file );
\r
1319 return _f_result( 26, pos );
\r
1323 ret = f_seek( file, -4, F_SEEK_END );
\r
1326 return _f_result( 27, ret );
\r
1329 pos = (unsigned long)f_tell( file );
\r
1330 if ( pos != (unsigned long) ( 2 * sectorsize - 4 ) )
\r
1332 return _f_result( 28, pos );
\r
1336 size = (unsigned long)f_read( testbuffer, 1, 2, file );
\r
1339 return _f_result( 29, size );
\r
1342 pos = (unsigned long)f_tell( file );
\r
1343 if ( pos != (unsigned long) ( 2 * sectorsize - 2 ) )
\r
1345 return _f_result( 30, pos );
\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
1353 return _f_result( 31, size );
\r
1356 pos = (unsigned long)f_tell( file );
\r
1357 if ( pos != (unsigned long) ( 2 * sectorsize + 6 ) )
\r
1359 return _f_result( 32, pos );
\r
1362 /*seek to the begining*/
\r
1363 ret = f_seek( file, 0, F_SEEK_SET );
\r
1366 return _f_result( 33, ret );
\r
1369 pos = (unsigned long)f_tell( file );
\r
1372 return _f_result( 34, pos );
\r
1375 /*seek to the end*/
\r
1376 ret = f_seek( file, 2 * sectorsize + 6, F_SEEK_SET );
\r
1379 return _f_result( 35, ret );
\r
1382 pos = (unsigned long)f_tell( file );
\r
1383 if ( pos != (unsigned long) ( 2 * sectorsize + 6 ) )
\r
1385 return _f_result( 36, pos );
\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
1393 return _f_result( 37, size );
\r
1396 pos = (unsigned long)f_tell( file );
\r
1397 if ( pos != (unsigned long) ( 2 * sectorsize + 8 ) )
\r
1399 return _f_result( 38, pos );
\r
1402 /*seek to the begining*/
\r
1403 (void)f_seek( file, -( 2 * sectorsize + 8 ), F_SEEK_CUR );
\r
1406 return _f_result( 39, ret );
\r
1409 pos = (unsigned long)f_tell( file );
\r
1412 return _f_result( 40, pos );
\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
1419 return _f_result( 41, size );
\r
1422 pos = (unsigned long)f_tell( file );
\r
1423 if ( pos != (unsigned long) sectorsize )
\r
1425 return _f_result( 42, pos );
\r
1428 size = (unsigned long)f_read( testbuffer, 1, sectorsize, file );
\r
1429 if ( size != (unsigned long) sectorsize )
\r
1431 return _f_result( 43, size );
\r
1434 pos = (unsigned long)f_tell( file );
\r
1435 if ( pos != (unsigned long) ( 2 * sectorsize ) )
\r
1437 return _f_result( 44, pos );
\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
1445 return _f_result( 45, size );
\r
1448 pos = (unsigned long)f_tell( file );
\r
1449 if ( pos != (unsigned long) ( 2 * sectorsize + 1 ) )
\r
1451 return _f_result( 46, pos );
\r
1455 ret = f_close( file );
\r
1458 return _f_result( 47, ret );
\r
1462 /*check the result*/
\r
1463 size = (unsigned long)f_filelength( "test.bin" );
\r
1464 if ( size != (unsigned long) ( 2 * sectorsize + 8 ) )
\r
1466 return _f_result( 48, size );
\r
1470 file = f_open( "test.bin", "r" );
\r
1473 return _f_result( 49, size );
\r
1476 if ( checkfilecontent( 2, 0, file ) )
\r
1478 return _f_result( 50, 0 );
\r
1481 if ( checkfilecontent( 6, 4, file ) )
\r
1483 return _f_result( 51, 0 );
\r
1486 if ( checkfilecontent( sectorsize - 8 - 1, 0, file ) )
\r
1488 return _f_result( 52, 0 );
\r
1491 if ( checkfilecontent( 2, 2, file ) )
\r
1493 return _f_result( 53, 0 );
\r
1496 if ( checkfilecontent( 2, 1, file ) )
\r
1498 return _f_result( 54, 0 );
\r
1501 if ( checkfilecontent( 4, 3, file ) )
\r
1503 return _f_result( 55, 0 );
\r
1506 if ( checkfilecontent( sectorsize - 7 - 2, 1, file ) )
\r
1508 return _f_result( 56, 0 );
\r
1511 if ( checkfilecontent( 2, 5, file ) )
\r
1513 return _f_result( 57, 0 );
\r
1516 if ( checkfilecontent( 1, 7, file ) )
\r
1518 return _f_result( 58, 0 );
\r
1521 if ( checkfilecontent( 5, 5, file ) )
\r
1523 return _f_result( 59, 0 );
\r
1526 if ( checkfilecontent( 2, 6, file ) )
\r
1528 return _f_result( 60, 0 );
\r
1531 /*check pos result*/
\r
1532 pos = (unsigned long)f_tell( file );
\r
1533 if ( pos != (unsigned long) ( 2 * sectorsize + 8 ) )
\r
1535 return _f_result( 61, pos );
\r
1538 /*this has to be eof*/
\r
1539 pos = f_eof( file );
\r
1542 return _f_result( 62, pos );
\r
1546 ret = f_close( file );
\r
1549 return _f_result( 63, ret );
\r
1553 ret = f_delete( "test.bin" );
\r
1556 return _f_result( 64, ret );
\r
1559 _f_dump( "passed..." );
\r
1563 static unsigned char f_opening ( void )
\r
1567 unsigned char ret;
\r
1568 unsigned short size, pos;
\r
1570 _f_dump( "f_opening" );
\r
1572 /*test non existing file open r, r+*/
\r
1573 file = f_open( "file.bin", "r" );
\r
1576 return _f_result( 0, 0 );
\r
1579 file = f_open( "file.bin", "r+" );
\r
1582 return _f_result( 1, 0 );
\r
1585 /*test non existing appends "a" a+*/
\r
1586 file = f_open( "file.bin", "a" );
\r
1589 return _f_result( 2, 0 );
\r
1592 file2 = f_open( "file.bin", "a+" ); /*open again*/
\r
1595 return _f_result( 3, 0 );
\r
1598 ret = f_close( file );
\r
1601 return _f_result( 3, 1 );
\r
1604 ret = f_close( file2 );
\r
1605 if ( ret != F_ERR_NOTOPEN )
\r
1607 return _f_result( 3, 2 );
\r
1611 /*try to creates it w*/
\r
1612 file = f_open( "file.bin", "w" );
\r
1615 return _f_result( 4, 0 );
\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
1623 return _f_result( 5, size );
\r
1626 /*go back, and read it*/
\r
1627 ret = f_rewind( file ); /*back to the begining*/
\r
1630 return _f_result( 6, ret ); /*it should fail*/
\r
1633 size = (unsigned short)f_read( testbuffer, 1, 512, file ); /*test read*/
\r
1636 return _f_result( 7, size ); /*it should fail*/
\r
1639 /*close and check size*/
\r
1640 size = (unsigned short)f_filelength( "file.bin" );
\r
1643 return _f_result( 8, size ); /*has to be zero*/
\r
1646 ret = f_close( file );
\r
1649 return _f_result( 9, ret );
\r
1652 size = (unsigned short)f_filelength( "file.bin" );
\r
1653 if ( size != 512 )
\r
1655 return _f_result( 10, size );
\r
1658 /*try to owerwrites it it*/
\r
1659 file = f_open( "file.bin", "w+" );
\r
1662 return _f_result( 11, 0 );
\r
1665 /*close and check size*/
\r
1666 size = (unsigned short)f_filelength( "file.bin" );
\r
1669 return _f_result( 12, size ); /*has to be zero*/
\r
1672 ret = f_close( file );
\r
1675 return _f_result( 13, ret );
\r
1678 size = (unsigned short)f_filelength( "file.bin" );
\r
1681 return _f_result( 14, size );
\r
1686 /*test non existing appends "a" */
\r
1687 file = f_open( "file.bin", "r+" );
\r
1690 return _f_result( 15, 0 );
\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
1698 return _f_result( 16, size );
\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
1706 return _f_result( 17, size ); /*it should fail*/
\r
1709 ret = f_rewind( file ); /*back to the begining*/
\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
1716 return _f_result( 18, size );
\r
1719 pos = (unsigned short)f_tell( file );
\r
1722 return _f_result( 19, pos ); /*position has to be 512*/
\r
1725 size = (unsigned short)f_filelength( "file.bin" );
\r
1728 return _f_result( 20, size ); /*has to be zero*/
\r
1731 /*close and check size*/
\r
1732 ret = f_close( file );
\r
1735 return _f_result( 21, ret );
\r
1738 size = (unsigned short)f_filelength( "file.bin" );
\r
1739 if ( size != 512 )
\r
1741 return _f_result( 22, size );
\r
1745 /*test non existing appends a+*/
\r
1746 file = f_open( "file.bin", "a+" );
\r
1749 return _f_result( 23, 0 );
\r
1752 pos = (unsigned short)f_tell( file );
\r
1755 return _f_result( 24, pos ); /*position has to be 512*/
\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
1763 return _f_result( 25, size );
\r
1766 /*go back, and read it*/
\r
1767 ret = f_rewind( file ); /*back to the begining*/
\r
1770 return _f_result( 26, ret ); /*it should fail*/
\r
1773 size = (unsigned short)f_read( testbuffer, 1, 512, file ); /*test read*/
\r
1774 if ( size != 512 )
\r
1776 return _f_result( 27, size ); /*it should fail*/
\r
1779 pos = (unsigned short)f_tell( file );
\r
1782 return _f_result( 28, pos ); /*position has to be 512*/
\r
1785 /*close and check size*/
\r
1786 size = (unsigned short)f_filelength( "file.bin" );
\r
1787 if ( size != 512 )
\r
1789 return _f_result( 29, size ); /*has to be zero*/
\r
1792 ret = f_close( file );
\r
1795 return _f_result( 30, ret );
\r
1798 size = (unsigned short)f_filelength( "file.bin" );
\r
1799 if ( size != 1024 )
\r
1801 return _f_result( 31, size );
\r
1805 ret = f_close( file );
\r
1806 if ( ret != F_ERR_NOTOPEN )
\r
1808 return _f_result( 32, pos );
\r
1811 ret = f_delete( "file.bin" );
\r
1814 return _f_result( 33, ret );
\r
1817 _f_dump( "passed..." );
\r
1821 static unsigned char f_appending ( void )
\r
1824 unsigned short size, tsize, pos;
\r
1825 unsigned char a, b, ret;
\r
1827 _f_dump( "f_appending" );
\r
1831 for ( tsize = 0, a = 0 ; a < 16 ; a++ )
\r
1833 file = f_open( "ap.bin", "a" );
\r
1836 return _f_result( 1, 0 );
\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
1843 return _f_result( 2, size );
\r
1846 size = (unsigned short)f_filelength( "ap.bin" );
\r
1847 if ( size != tsize )
\r
1849 return _f_result( 3, size );
\r
1854 ret = f_close( file );
\r
1857 return _f_result( 4, ret );
\r
1860 size = (unsigned short)f_filelength( "ap.bin" );
\r
1861 if ( size != tsize )
\r
1863 return _f_result( 5, size );
\r
1867 file = f_open( "ap.bin", "r" );
\r
1870 return _f_result( 6, 0 );
\r
1873 for ( tsize = 0, a = 0 ; a < 16 ; a++ )
\r
1875 if ( checkfilecontent( a + 128, (char)a, file ) )
\r
1877 return _f_result( 7, a );
\r
1881 ret = f_close( file );
\r
1884 return _f_result( 8, ret );
\r
1887 for ( tsize = 0, a = 0 ; a < 16 ; a++ )
\r
1889 file = f_open( "ap.bin", "r" );
\r
1892 return _f_result( 9, 0 );
\r
1895 ret = f_seek( file, tsize, F_SEEK_SET );
\r
1898 return _f_result( 10, ret );
\r
1901 pos = (unsigned short)f_tell( file );
\r
1902 if ( pos != tsize )
\r
1904 return _f_result( 11, pos );
\r
1907 size = (unsigned short)f_read( testbuffer, 1, a + 128, file );
\r
1908 if ( size != a + 128 )
\r
1910 return _f_result( 12, size );
\r
1913 for ( b = 0 ; b < a + 128 ; b++ )
\r
1915 if ( testbuffer[b] != (char)a )
\r
1917 return _f_result( 13, a );
\r
1923 pos = (unsigned short)f_tell( file );
\r
1924 if ( pos != tsize )
\r
1926 return _f_result( 13, pos );
\r
1929 ret = f_close( file );
\r
1932 return _f_result( 14, ret );
\r
1936 ret = f_close( file );
\r
1937 if ( ret != F_ERR_NOTOPEN )
\r
1939 return _f_result( 9, ret );
\r
1942 ret = f_delete( "ap.bin" );
\r
1945 return _f_result( 14, ret );
\r
1948 _f_dump( "passed..." );
\r
1950 } /* f_appending */
\r
1952 static unsigned char f_writing ( void )
\r
1955 unsigned short size;
\r
1956 unsigned char a, ret;
\r
1957 F_SPACE before, after;
\r
1959 _f_dump( "f_writing" );
\r
1961 ret = f_getfreespace( &before );
\r
1964 return _f_result( 0, ret );
\r
1967 for ( a = 0 ; a < 4 ; a++ )
\r
1969 file = f_open( "wr.bin", "w" );
\r
1972 return _f_result( 1, 0 );
\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
1979 return _f_result( 2, size );
\r
1982 ret = f_close( file );
\r
1985 return _f_result( 3, ret );
\r
1988 size = (unsigned short)f_filelength( "wr.bin" );
\r
1989 if ( size != a * 128 )
\r
1991 return _f_result( 4, size );
\r
1994 file = f_open( "wr.bin", "r" );
\r
1997 return _f_result( 5, 0 );
\r
2000 if ( checkfilecontent( a * 128, (char)a, file ) )
\r
2002 return _f_result( 6, a );
\r
2005 ret = f_close( file );
\r
2008 return _f_result( 7, ret );
\r
2013 for ( a = 0 ; a < 4 ; a++ )
\r
2015 file = f_open( "wr.bin", "w+" );
\r
2018 return _f_result( 8, 0 );
\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
2025 return _f_result( 9, size );
\r
2028 ret = f_close( file );
\r
2031 return _f_result( 10, ret );
\r
2034 size = (unsigned short)f_filelength( "wr.bin" );
\r
2035 if ( size != a * 128 )
\r
2037 return _f_result( 11, size );
\r
2040 file = f_open( "wr.bin", "r+" );
\r
2043 return _f_result( 12, 0 );
\r
2046 if ( checkfilecontent( a * 128, (char)a, file ) )
\r
2048 return _f_result( 13, a );
\r
2051 ret = f_close( file );
\r
2054 return _f_result( 14, ret );
\r
2058 ret = f_getfreespace( &after );
\r
2061 return _f_result( 15, ret );
\r
2064 if ( before.bad != after.bad )
\r
2066 return _f_result( 16, 0 );
\r
2069 if ( before.free == after.free )
\r
2071 return _f_result( 17, 0 );
\r
2074 if ( before.used == after.used )
\r
2076 return _f_result( 18, 0 );
\r
2079 if ( before.total != after.total )
\r
2081 return _f_result( 19, 0 );
\r
2084 if ( before.used + before.free != after.used + after.free )
\r
2086 return _f_result( 20, 0 );
\r
2089 ret = f_delete( "wr.bin" );
\r
2092 return _f_result( 21, ret );
\r
2095 ret = f_getfreespace( &after );
\r
2098 return _f_result( 22, ret );
\r
2101 if ( before.bad != after.bad )
\r
2103 return _f_result( 23, 0 );
\r
2106 if ( before.free != after.free )
\r
2108 return _f_result( 24, 0 );
\r
2111 if ( before.used != after.used )
\r
2113 return _f_result( 25, 0 );
\r
2116 if ( before.total != after.total )
\r
2118 return _f_result( 26, 0 );
\r
2121 _f_dump( "passed..." );
\r
2125 static unsigned char f_dots ( void )
\r
2127 unsigned char ret;
\r
2128 unsigned char a, size;
\r
2131 _f_dump( "f_dots" );
\r
2133 ret = f_mkdir( "/tt" );
\r
2136 return _f_result( 0, ret );
\r
2139 ret = f_chdir( "/tt" );
\r
2142 return _f_result( 1, ret );
\r
2145 ret = f_rmdir( "." );
\r
2146 if ( ret != F_ERR_NOTFOUND )
\r
2148 return _f_result( 4, ret );
\r
2151 ret = f_rmdir( ".." );
\r
2152 if ( ret != F_ERR_NOTFOUND )
\r
2154 return _f_result( 5, ret );
\r
2157 ret = f_chdir( "." );
\r
2160 return _f_result( 6, ret );
\r
2163 ret = _f_checkcwd( f_nameconv( "/tt" ) );
\r
2166 return _f_result( 7, ret );
\r
2169 ret = f_delete( "." );
\r
2170 if ( ret != F_ERR_NOTFOUND )
\r
2172 return _f_result( 8, ret );
\r
2175 ret = f_delete( ".." );
\r
2176 if ( ret != F_ERR_NOTFOUND )
\r
2178 return _f_result( 9, ret );
\r
2181 ret = f_mkdir( "." );
\r
2182 if ( ret != F_ERR_NOTFOUND )
\r
2184 return _f_result( 10, ret );
\r
2187 ret = f_mkdir( ".." );
\r
2188 if ( ret != F_ERR_NOTFOUND )
\r
2190 return _f_result( 11, ret );
\r
2193 ret = f_mkdir( "..." );
\r
2194 if ( ret != F_ERR_NOTFOUND )
\r
2196 return _f_result( 12, ret );
\r
2199 for ( a = 0 ; a < 6 ; a++ )
\r
2229 return _f_result( 13, a );
\r
2232 file = f_open( ".", mode );
\r
2235 return _f_result( 14, a );
\r
2238 file = f_open( "..", mode );
\r
2241 return _f_result( 15, a );
\r
2244 file = f_open( "...", mode );
\r
2247 return _f_result( 16, a );
\r
2251 size = (unsigned char)f_filelength( "." );
\r
2254 return _f_result( 17, size );
\r
2257 size = (unsigned char)f_filelength( ".." );
\r
2260 return _f_result( 18, size );
\r
2263 size = (unsigned char)f_filelength( "..." );
\r
2266 return _f_result( 19, size );
\r
2270 ret = f_chdir( "..." );
\r
2271 if ( ret != F_ERR_NOTFOUND )
\r
2273 return _f_result( 20, ret );
\r
2276 ret = f_chdir( ".." );
\r
2279 return _f_result( 21, ret );
\r
2282 ret = f_rmdir( "tt" );
\r
2285 return _f_result( 27, ret );
\r
2289 _f_dump( "passed..." );
\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
2304 unsigned char ret;
\r
2306 struct_TestFileSysEntry * Entry = (struct_TestFileSysEntry *)( ( ( (long)testbuffer + 3 ) >> 2 ) << 2 );
\r
2307 unsigned short Pos;
\r
2309 unsigned char Founded;
\r
2311 _f_dump( "f_rit" );
\r
2313 (void)f_delete( "MyTest" );
\r
2314 File = f_open( "MyTest", "a+" );
\r
2317 return _f_result( 1, 0 );
\r
2321 for ( i = 0 ; i < NUM_OF_RECORDS ; i++ )
\r
2323 Ch = (char)( i % 10 );
\r
2324 Entry->MagicNum = 0xbc;
\r
2326 Entry->Buf[0] = Ch;
\r
2327 Entry->Buf[10] = (unsigned char)( Ch + 1 );
\r
2329 if ( F_NO_ERROR != f_seek( File, 0, F_SEEK_END ) )
\r
2331 return _f_result( 2, 0 ); /* Fail, could not go to the end of the file */
\r
2334 if ( sizeof( struct_TestFileSysEntry ) != f_write( (void *)Entry, 1, sizeof( struct_TestFileSysEntry ), File ) )
\r
2336 return _f_result( 3, 0 ); /* Fail, could not write new entry */
\r
2339 Pos = (unsigned short)f_tell( File );
\r
2340 if ( ( ( Pos / sizeof( struct_TestFileSysEntry ) ) - 1 ) != i )
\r
2342 return _f_result( 4, 0 ); /* Fail, wrong file position */
\r
2345 if ( F_NO_ERROR != f_seek( File, (long)( Pos - sizeof( struct_TestFileSysEntry ) ), F_SEEK_SET ) )
\r
2347 return _f_result( 5, 0 ); /* Fail, could not go to new entry position */
\r
2350 if ( sizeof( struct_TestFileSysEntry ) != f_read( (void *)Entry, 1, sizeof( struct_TestFileSysEntry ), File ) )
\r
2352 return _f_result( 6, 0 ); /* Fail, could not read the new entry */
\r
2355 if ( ( Entry->MagicNum != 0xbc ) || ( Entry->Line != (int)i ) || ( Entry->Buf[0] != Ch ) || ( Entry->Buf[10] != Ch + 1 ) )
\r
2357 return _f_result( 7, 0 ); /*Fail, the new entry is corrupted"*/
\r
2361 ret = f_close( File );
\r
2364 return _f_result( 8, ret );
\r
2368 /*Open file again*/
\r
2369 File = f_open( "MyTest", "a+" );
\r
2372 return _f_result( 9, 0 );
\r
2375 /* read records */
\r
2376 for ( i = 0 ; i < NUM_OF_RECORDS ; i++ )
\r
2378 Ch = (char)( i % 10 );
\r
2380 if ( F_NO_ERROR != f_seek( File, 0, F_SEEK_SET ) )
\r
2382 return _f_result( 10, 0 ); /* Fail, could not go to the start of the file */
\r
2386 while ( sizeof( struct_TestFileSysEntry ) == f_read( (void *)Entry, 1, sizeof( struct_TestFileSysEntry ), File ) )
\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
2400 return _f_result( 11, i ); /* Entry not founded */
\r
2404 ret = f_close( File );
\r
2407 return _f_result( 12, ret );
\r
2411 ret = f_delete( "MyTest" );
\r
2414 return _f_result( 13, ret );
\r
2417 _f_dump( "passed..." );
\r
2425 static unsigned char f_truncating ( void )
\r
2428 unsigned long size;
\r
2429 unsigned char ret;
\r
2431 _f_dump( "f_truncating" );
\r
2433 file = f_open( "test.bin", "w+" );
\r
2436 return _f_result( 0, 0 );
\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
2443 return _f_result( 1, size );
\r
2446 ret = f_close( file );
\r
2449 return _f_result( 2, ret );
\r
2452 file = f_truncate( "test.bin", F_MAX_SEEK_TEST - 4 );
\r
2455 return _f_result( 3, 0 );
\r
2458 ret = f_close( file );
\r
2461 return _f_result( 4, ret );
\r
2464 size = (unsigned long)f_filelength( "test.bin" );
\r
2465 if ( size != F_MAX_SEEK_TEST - 4 )
\r
2467 return _f_result( 5, size );
\r
2471 file = f_truncate( "test.bin", F_MAX_SEEK_TEST );
\r
2474 return _f_result( 3, 0 );
\r
2477 ret = f_close( file );
\r
2480 return _f_result( 4, ret );
\r
2483 size = (unsigned long)f_filelength( "test.bin" );
\r
2484 if ( size != F_MAX_SEEK_TEST )
\r
2486 return _f_result( 5, size );
\r
2490 file = f_truncate( "test.bin", ( F_MAX_SEEK_TEST / 2 ) - 92 );
\r
2493 return _f_result( 6, 0 );
\r
2496 (void)psp_memset( testbuffer, 2, 92 );
\r
2497 size = (unsigned long)f_write( testbuffer, 1, 92, file );
\r
2500 return _f_result( 7, size );
\r
2503 ret = f_close( file );
\r
2506 return _f_result( 8, ret );
\r
2509 size = (unsigned long)f_filelength( "test.bin" );
\r
2510 if ( size != ( F_MAX_SEEK_TEST / 2 ) )
\r
2512 return _f_result( 9, size );
\r
2516 file = f_truncate( "test.bin", 1 );
\r
2519 return _f_result( 10, 0 );
\r
2522 (void)psp_memset( testbuffer, 3, 2 );
\r
2523 size = (unsigned long)f_write( testbuffer, 1, 2, file );
\r
2526 return _f_result( 11, size );
\r
2529 ret = f_close( file );
\r
2532 return _f_result( 12, ret );
\r
2535 size = (unsigned long)f_filelength( "test.bin" );
\r
2538 return _f_result( 13, size );
\r
2543 _f_dump( "passed..." );
\r
2545 } /* f_truncating */
\r
2548 void f_dotest ( unsigned char t )
\r
2550 _f_dump( "File system test started..." );
\r
2551 _f_dump( "WARNING: The contents of your drive will be destroyed!\n" );
\r
2553 (void)_f_poweron();
\r
2559 (void)f_formatting();
\r
2566 /* fall through */
\r
2568 (void)f_dirtest();
\r
2575 /* fall through */
\r
2577 (void)f_findingtest();
\r
2584 /* fall through */
\r
2586 (void)f_powerfail();
\r
2593 /* fall through */
\r
2595 (void)f_seeking( 128 );
\r
2601 #if ( F_MAX_SEEK_TEST > 128 )
\r
2603 /* fall through */
\r
2605 (void)f_seeking( 256 );
\r
2612 #if ( F_MAX_SEEK_TEST > 256 )
\r
2614 /* fall through */
\r
2616 (void)f_seeking( 512 );
\r
2623 #if ( F_MAX_SEEK_TEST > 512 )
\r
2625 /* fall through */
\r
2627 (void)f_seeking( 1024 );
\r
2634 #if ( F_MAX_SEEK_TEST > 1024 )
\r
2636 /* fall through */
\r
2638 (void)f_seeking( 2048 );
\r
2645 #if ( F_MAX_SEEK_TEST > 2048 )
\r
2647 /* fall through */
\r
2649 (void)f_seeking( 4096 );
\r
2656 #if ( F_MAX_SEEK_TEST > 4096 )
\r
2658 /* fall through */
\r
2660 (void)f_seeking( 8192 );
\r
2667 #if ( F_MAX_SEEK_TEST > 8192 )
\r
2669 /* fall through */
\r
2671 (void)f_seeking( 16384 );
\r
2678 #if ( F_MAX_SEEK_TEST > 16384 )
\r
2680 /* fall through */
\r
2682 (void)f_seeking( 32768 );
\r
2690 /* fall through */
\r
2692 (void)f_opening();
\r
2699 /* fall through */
\r
2701 (void)f_appending();
\r
2708 /* fall through */
\r
2710 (void)f_writing();
\r
2717 /* fall through */
\r
2726 /* fall through */
\r
2735 (void)f_truncating();
\r
2744 _f_dump( "End of tests..." );
\r
2749 /****************************************************************************
\r
2753 ***************************************************************************/
\r
2754 #endif /*_TEST_C_*/
\r