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 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
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
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
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
38 * http://www.FreeRTOS.org
\r
39 * http://www.FreeRTOS.org/FreeRTOS-Plus
\r
44 #include "../../api/fat_sl.h"
\r
45 #include "../../psp/target/fat_sl/psp_test.h"
\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
52 static char cwd[F_MAXPATH];
\r
56 static void _f_deleteall ( void )
\r
59 unsigned char sd = 0, rc, fl = 0;
\r
64 rc = f_findfirst( "*.*", &find );
\r
65 while ( rc == 0 && find.filename[0] == '.' )
\r
67 rc = f_findnext( &find );
\r
72 if ( find.attr & F_ATTR_DIR )
\r
77 (void)f_chdir( find.filename );
\r
82 (void)f_delete( find.filename );
\r
83 rc = f_findnext( &find );
\r
87 if ( rc && sd && fl )
\r
89 (void)f_chdir( ".." );
\r
93 (void)f_rmdir( find.filename );
\r
94 rc = f_findnext( &find );
\r
97 if ( rc && sd && !fl )
\r
99 (void)f_chdir( "/" );
\r
105 } /* _f_deleteall */
\r
108 static char * f_nameconv ( char * s )
\r
115 if ( ( ch >= 'a' ) && ( ch <= 'z' ) )
\r
130 static unsigned char f_formatting ( void )
\r
134 _f_dump( "f_formatting" );
\r
136 /*checking formatting*/
\r
137 ret = f_format( F_FAT_TYPE );
\r
140 return _f_result( 0, ret );
\r
143 ret = _f_poweron();
\r
146 return _f_result( 1, ret );
\r
149 ret = f_findfirst( "*.*", &find );
\r
150 if ( ret != F_ERR_NOTFOUND )
\r
152 return _f_result( 2, ret );
\r
155 _f_dump( "passed..." );
\r
157 } /* f_formatting */
\r
159 static unsigned char _f_checkcwd ( char * orig )
\r
163 ret = f_getcwd( cwd, F_MAXPATH );
\r
169 if ( strcmp( orig, cwd ) )
\r
171 return (unsigned char)-1;
\r
177 static unsigned char f_dirtest ( void )
\r
181 _f_dump( "f_dirtest" );
\r
185 /*creates a ab abc abcd*/
\r
186 ret = f_mkdir( "a" );
\r
189 return _f_result( 1, ret );
\r
192 ret = f_mkdir( "ab" );
\r
195 return _f_result( 2, ret );
\r
198 ret = f_mkdir( "abc" );
\r
201 return _f_result( 3, ret );
\r
204 ret = f_mkdir( "abca" );
\r
207 return _f_result( 4, ret );
\r
210 /*creates directories in /a - a ab abc abcd*/
\r
211 ret = f_mkdir( "a/a" );
\r
214 return _f_result( 5, ret );
\r
217 ret = f_mkdir( "a/ab" );
\r
220 return _f_result( 6, ret );
\r
223 ret = f_mkdir( "a/abc" );
\r
226 return _f_result( 7, ret );
\r
229 ret = f_mkdir( "a/abcd" );
\r
232 return _f_result( 8, ret );
\r
235 /*change into a/abcd and check cwd*/
\r
236 ret = f_chdir( "a/abcd" );
\r
239 return _f_result( 9, ret );
\r
242 ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );
\r
245 return _f_result( 10, ret );
\r
248 /*make directory t change into t and check cwd="a/abcd/t"*/
\r
249 ret = f_mkdir( "t" );
\r
252 return _f_result( 11, ret );
\r
255 ret = f_chdir( "t" );
\r
258 return _f_result( 12, ret );
\r
261 ret = _f_checkcwd( f_nameconv( "/a/abcd/t" ) );
\r
264 return _f_result( 13, ret );
\r
267 ret = f_chdir( "." );
\r
270 return _f_result( 14, ret );
\r
273 ret = _f_checkcwd( f_nameconv( "/a/abcd/t" ) );
\r
276 return _f_result( 15, ret );
\r
279 ret = f_chdir( "../." );
\r
282 return _f_result( 16, ret );
\r
285 ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );
\r
288 return _f_result( 17, ret );
\r
292 ret = f_rmdir( "t" );
\r
295 return _f_result( 18, ret );
\r
298 ret = f_chdir( "t" );
\r
299 if ( ret != F_ERR_NOTFOUND )
\r
301 return _f_result( 19, ret );
\r
304 /*removing /a dir*/
\r
305 ret = f_rmdir( "/ab" );
\r
308 return _f_result( 20, ret );
\r
311 ret = f_chdir( "/ab" );
\r
312 if ( ret != F_ERR_NOTFOUND )
\r
314 return _f_result( 21, ret );
\r
317 /*removing /a dir*/
\r
318 ret = f_rmdir( "../../a" );
\r
319 if ( ret != F_ERR_NOTEMPTY )
\r
321 return _f_result( 22, ret );
\r
324 /*removing /abca dir*/
\r
325 ret = f_rmdir( "a:/abca" );
\r
328 return _f_result( 24, ret );
\r
331 /*changing invalid dirs*/
\r
332 ret = f_chdir( "" );
\r
333 if ( ret != F_ERR_INVALIDNAME )
\r
335 return _f_result( 25, ret );
\r
338 ret = f_chdir( " " );
\r
341 return _f_result( 26, ret );
\r
344 ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );
\r
347 return _f_result( 27, ret );
\r
350 ret = f_chdir( "?" );
\r
351 if ( ret != F_ERR_INVALIDNAME )
\r
353 return _f_result( 28, ret );
\r
356 ret = f_chdir( "*.*" );
\r
357 if ( ret != F_ERR_INVALIDNAME )
\r
359 return _f_result( 29, ret );
\r
362 ret = _f_checkcwd( f_nameconv( "/a/abcd" ) );
\r
365 return _f_result( 30, ret );
\r
368 /*changing into /abc and removes subfolder from /a/ */
\r
369 ret = f_chdir( "/abc" );
\r
372 return _f_result( 31, ret );
\r
375 ret = f_rmdir( "/a/a" );
\r
378 return _f_result( 32, ret );
\r
381 ret = f_rmdir( "A:../a/ab" );
\r
384 return _f_result( 33, ret );
\r
387 ret = f_rmdir( "A:/a/abc" );
\r
390 return _f_result( 34, ret );
\r
393 ret = f_rmdir( ".././abc/.././a/../a/abcd" );
\r
396 return _f_result( 35, ret );
\r
399 /*some invalid rmdir*/
\r
400 ret = f_rmdir( "." );
\r
401 if ( ret != F_ERR_NOTFOUND )
\r
403 return _f_result( 36, ret );
\r
406 ret = f_rmdir( ".." );
\r
407 if ( ret != F_ERR_NOTFOUND )
\r
409 return _f_result( 37, ret );
\r
412 /*create again abc remove abc*/
\r
413 ret = f_mkdir( ".././abc" );
\r
414 if ( ret != F_ERR_DUPLICATED )
\r
416 return _f_result( 38, ret );
\r
419 ret = f_rmdir( "../abc" );
\r
422 return _f_result( 39, ret );
\r
425 ret = f_mkdir( ".././abc" );
\r
426 if ( ret != F_ERR_INVALIDDIR )
\r
428 return _f_result( 40, ret ); /*cwd is not exist*/
\r
431 ret = f_chdir( "/" );
\r
434 return _f_result( 41, ret );
\r
437 /*try . and .. in the root*/
\r
438 ret = f_chdir( "." );
\r
441 return _f_result( 42, ret );
\r
444 ret = f_chdir( "./././." );
\r
447 return _f_result( 43, ret );
\r
450 ret = f_chdir( ".." );
\r
451 if ( ret != F_ERR_NOTFOUND )
\r
453 return _f_result( 44, ret );
\r
456 ret = _f_checkcwd( "/" ); /*root!*/
\r
459 return _f_result( 45, ret );
\r
462 /*test . and .. in a and remove a*/
\r
463 ret = f_chdir( "a" );
\r
466 return _f_result( 46, ret );
\r
469 ret = f_chdir( ".." );
\r
472 return _f_result( 47, ret );
\r
475 ret = f_chdir( "a" );
\r
478 return _f_result( 48, ret );
\r
481 ret = f_chdir( "." );
\r
484 return _f_result( 49, ret );
\r
487 ret = f_chdir( "a" );
\r
488 if ( ret != F_ERR_NOTFOUND )
\r
490 return _f_result( 50, ret );
\r
493 ret = f_chdir( "./.." );
\r
496 return _f_result( 51, ret );
\r
499 ret = f_rmdir( "a" );
\r
502 return _f_result( 52, ret );
\r
505 /*check if all are removed*/
\r
506 ret = f_findfirst( "*.*", &find );
\r
507 if ( ret != F_ERR_NOTFOUND )
\r
509 return _f_result( 53, ret );
\r
512 _f_dump( "passed..." );
\r
517 static unsigned char f_findingtest ( void )
\r
521 _f_dump( "f_findingtest" );
\r
526 ret = f_findfirst( "*.*", &find );
\r
527 if ( ret != F_ERR_NOTFOUND )
\r
529 return _f_result( 0, ret );
\r
532 /*create Hello.dir*/
\r
533 ret = f_mkdir( "Hello.dir" );
\r
536 return _f_result( 1, ret );
\r
539 /*check if it is exist, and only exist*/
\r
540 ret = f_findfirst( "*.*", &find );
\r
543 return _f_result( 2, ret );
\r
546 if ( strcmp( find.filename, f_nameconv( "Hello.dir" ) ) )
\r
548 return _f_result( 3, 0 );
\r
551 if ( find.attr != F_ATTR_DIR )
\r
553 return _f_result( 4, 0 );
\r
556 ret = f_findnext( &find );
\r
557 if ( ret != F_ERR_NOTFOUND )
\r
559 return _f_result( 5, ret );
\r
562 /*check some not founds*/
\r
563 ret = f_findfirst( "q*.*", &find );
\r
564 if ( ret != F_ERR_NOTFOUND )
\r
566 return _f_result( 6, ret );
\r
569 ret = f_findfirst( "Hello.", &find );
\r
570 if ( ret != F_ERR_NOTFOUND )
\r
572 return _f_result( 7, ret );
\r
575 ret = f_findfirst( "a/*.*", &find );
\r
576 if ( ret != F_ERR_INVALIDDIR )
\r
578 return _f_result( 8, ret );
\r
581 ret = f_findfirst( ".", &find );
\r
582 if ( ret != F_ERR_NOTFOUND )
\r
584 return _f_result( 9, ret );
\r
587 ret = f_findfirst( "..", &find );
\r
588 if ( ret != F_ERR_NOTFOUND )
\r
590 return _f_result( 10, ret );
\r
593 ret = f_findfirst( "?e.*", &find );
\r
594 if ( ret != F_ERR_NOTFOUND )
\r
596 return _f_result( 11, ret );
\r
599 ret = f_findfirst( "*.", &find );
\r
600 if ( ret != F_ERR_NOTFOUND )
\r
602 return _f_result( 12, ret );
\r
605 ret = f_findfirst( "*.?", &find );
\r
606 if ( ret != F_ERR_NOTFOUND )
\r
608 return _f_result( 13, ret );
\r
611 ret = f_findfirst( "*.??", &find );
\r
612 if ( ret != F_ERR_NOTFOUND )
\r
614 return _f_result( 14, ret );
\r
618 /*check some founds*/
\r
619 ret = f_findfirst( "*.dir", &find );
\r
622 return _f_result( 15, ret );
\r
625 ret = f_findfirst( "*.d?r", &find );
\r
628 return _f_result( 16, ret );
\r
631 ret = f_findfirst( "*.d??", &find );
\r
634 return _f_result( 17, ret );
\r
637 ret = f_findfirst( "*.???", &find );
\r
640 return _f_result( 18, ret );
\r
643 ret = f_findfirst( "?ello.???", &find );
\r
646 return _f_result( 19, ret );
\r
649 ret = f_findfirst( "he??o.dir", &find );
\r
652 return _f_result( 20, ret );
\r
655 ret = f_findfirst( "he?*.dir", &find );
\r
658 return _f_result( 21, ret );
\r
661 ret = f_findfirst( "HELLO.DIR", &find ); /*no capitals sensitivity in find!!*/
\r
664 return _f_result( 22, ret );
\r
667 /*change into hello.dir*/
\r
668 ret = f_chdir( "hello.dir" );
\r
671 return _f_result( 23, ret );
\r
674 ret = f_findfirst( "*.*", &find );
\r
677 return _f_result( 24, ret );
\r
680 ret = f_findfirst( "..", &find );
\r
683 return _f_result( 25, ret );
\r
686 ret = f_findfirst( "??", &find );
\r
689 return _f_result( 26, ret );
\r
692 ret = f_findfirst( ".", &find );
\r
695 return _f_result( 27, ret );
\r
698 ret = f_findfirst( "k*.*", &find );
\r
699 if ( ret != F_ERR_NOTFOUND )
\r
701 return _f_result( 28, ret );
\r
704 ret = f_findfirst( "*.", &find );
\r
707 return _f_result( 29, ret );
\r
710 if ( strcmp( find.filename, "." ) )
\r
712 return _f_result( 29, 0 );
\r
715 ret = f_findnext( &find );
\r
718 return _f_result( 29, ret );
\r
721 if ( strcmp( find.filename, ".." ) )
\r
723 return _f_result( 29, 0 );
\r
726 ret = f_findnext( &find );
\r
727 if ( ret != F_ERR_NOTFOUND )
\r
729 return _f_result( 29, ret );
\r
733 ret = f_findfirst( "*.a", &find );
\r
734 if ( ret != F_ERR_NOTFOUND )
\r
736 return _f_result( 30, ret );
\r
739 /*creating testdir and find it*/
\r
740 ret = f_mkdir( "testdir" );
\r
743 return _f_result( 31, ret );
\r
746 ret = f_findfirst( "*.", &find );
\r
749 return _f_result( 32, ret );
\r
752 if ( strcmp( find.filename, "." ) )
\r
754 return _f_result( 32, 0 );
\r
757 ret = f_findnext( &find );
\r
760 return _f_result( 32, ret );
\r
763 if ( strcmp( find.filename, ".." ) )
\r
765 return _f_result( 32, 0 );
\r
768 ret = f_findnext( &find );
\r
771 return _f_result( 32, ret );
\r
775 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
777 return _f_result( 33, 0 );
\r
780 ret = f_findfirst( "*.*", &find );
\r
783 return _f_result( 34, ret );
\r
786 if ( strcmp( find.filename, "." ) )
\r
788 return _f_result( 35, 0 );
\r
791 ret = f_findnext( &find );
\r
794 return _f_result( 35, ret );
\r
797 if ( strcmp( find.filename, ".." ) )
\r
799 return _f_result( 35, 0 );
\r
802 ret = f_findnext( &find );
\r
805 return _f_result( 36, ret );
\r
808 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
810 return _f_result( 37, 0 );
\r
813 ret = f_findnext( &find );
\r
814 if ( ret != F_ERR_NOTFOUND )
\r
816 return _f_result( 38, ret );
\r
819 /*search exact file*/
\r
820 ret = f_findfirst( "testDir", &find ); /*no capitals!*/
\r
823 return _f_result( 39, ret );
\r
826 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
828 return _f_result( 40, 0 );
\r
831 ret = f_findnext( &find );
\r
832 if ( ret != F_ERR_NOTFOUND )
\r
834 return _f_result( 41, ret );
\r
838 /*go back to root and remove dirs*/
\r
839 ret = f_chdir( "\\" );
\r
842 return _f_result( 42, ret );
\r
845 ret = f_rmdir( "Hello.dir/testdir" );
\r
848 return _f_result( 43, ret );
\r
851 ret = f_rmdir( "Hello.dir" );
\r
854 return _f_result( 44, ret );
\r
857 /*check if all are removed*/
\r
858 ret = f_findfirst( "*.*", &find );
\r
859 if ( ret != F_ERR_NOTFOUND )
\r
861 return _f_result( 45, ret );
\r
864 _f_dump( "passed..." );
\r
866 } /* f_findingtest */
\r
868 static unsigned char f_powerfail ( void )
\r
872 _f_dump( "f_powerfail" );
\r
874 /*checking if its power fail system (RAMDRIVE is not powerfail!)*/
\r
875 ret = f_mkdir( "testdir" );
\r
878 return _f_result( 0, ret );
\r
881 ret = _f_poweron();
\r
884 return _f_result( 1, ret );
\r
887 ret = f_findfirst( "testdir", &find );
\r
890 return _f_result( 2, ret );
\r
893 /*checking formatting*/
\r
894 ret = f_format( F_FAT_TYPE );
\r
897 return _f_result( 3, ret );
\r
900 ret = _f_poweron();
\r
903 return _f_result( 4, ret );
\r
906 ret = f_findfirst( "*.*", &find );
\r
907 if ( ret != F_ERR_NOTFOUND )
\r
909 return _f_result( 5, ret );
\r
912 /*checking formatting, 1st creating*/
\r
913 ret = f_format( F_FAT_TYPE );
\r
916 return _f_result( 6, ret );
\r
919 ret = f_mkdir( "testdir" );
\r
922 return _f_result( 7, ret );
\r
925 ret = f_findfirst( "testdir", &find );
\r
928 return _f_result( 8, ret );
\r
931 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
933 return _f_result( 9, 0 );
\r
936 ret = _f_poweron();
\r
939 return _f_result( 10, ret );
\r
942 ret = f_findfirst( "*.*", &find );
\r
945 return _f_result( 11, ret );
\r
948 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
950 return _f_result( 12, 0 );
\r
953 /*checking formatting, 2nd creating*/
\r
954 ret = f_format( F_FAT_TYPE );
\r
957 return _f_result( 13, ret );
\r
960 ret = f_mkdir( "testdir" );
\r
963 return _f_result( 14, ret );
\r
966 ret = f_findfirst( "testdir", &find );
\r
969 return _f_result( 15, ret );
\r
972 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
974 return _f_result( 16, 0 );
\r
977 ret = f_mkdir( "testdir2" );
\r
980 return _f_result( 17, ret );
\r
983 ret = f_findfirst( "testdir2", &find );
\r
986 return _f_result( 18, ret );
\r
989 if ( strcmp( find.filename, f_nameconv( "testdir2" ) ) )
\r
991 return _f_result( 19, 0 );
\r
994 ret = _f_poweron();
\r
997 return _f_result( 20, ret );
\r
1000 ret = f_findfirst( "*.*", &find );
\r
1003 return _f_result( 21, ret );
\r
1006 if ( strcmp( find.filename, f_nameconv( "testdir" ) ) )
\r
1008 return _f_result( 22, 0 );
\r
1011 ret = f_findnext( &find );
\r
1014 return _f_result( 23, ret );
\r
1017 if ( strcmp( find.filename, f_nameconv( "testdir2" ) ) )
\r
1019 return _f_result( 24, 0 );
\r
1022 ret = f_findnext( &find );
\r
1023 if ( ret != F_ERR_NOTFOUND )
\r
1025 return _f_result( 25, ret );
\r
1029 /*checking empty*/
\r
1030 ret = _f_poweron();
\r
1033 return _f_result( 26, ret );
\r
1036 ret = f_format( F_FAT_TYPE );
\r
1039 return _f_result( 27, ret );
\r
1042 ret = _f_poweron();
\r
1045 return _f_result( 28, ret );
\r
1048 ret = f_findfirst( "*.*", &find );
\r
1049 if ( ret != F_ERR_NOTFOUND )
\r
1051 return _f_result( 29, ret );
\r
1055 _f_dump( "passed..." );
\r
1057 } /* f_powerfail */
\r
1060 char testbuffer[F_MAX_SEEK_TEST + 16]; /* +16 for f_appending test */
\r
1062 static unsigned char checkfilecontent ( long nums, unsigned char value, F_FILE * file )
\r
1068 if ( f_eof( file ) )
\r
1070 return 1; /*eof ?*/
\r
1073 if ( 1 != f_read( &ch, 1, 1, file ) )
\r
1078 if ( ch != value )
\r
1085 } /* checkfilecontent */
\r
1087 static unsigned char f_seeking ( int sectorsize )
\r
1090 unsigned char ret;
\r
1091 unsigned long size;
\r
1092 unsigned long pos;
\r
1094 if ( sectorsize == 128 )
\r
1096 _f_dump( "f_seeking with 128" );
\r
1099 #if ( F_MAX_SEEK_TEST > 128 )
\r
1100 else if ( sectorsize == 256 )
\r
1102 _f_dump( "f_seeking with 256" );
\r
1105 #if ( F_MAX_SEEK_TEST > 256 )
\r
1106 else if ( sectorsize == 512 )
\r
1108 _f_dump( "f_seeking with 512" );
\r
1111 #if ( F_MAX_SEEK_TEST > 512 )
\r
1112 else if ( sectorsize == 1024 )
\r
1114 _f_dump( "f_seeking with 1024" );
\r
1117 #if ( F_MAX_SEEK_TEST > 1024 )
\r
1118 else if ( sectorsize == 2048 )
\r
1120 _f_dump( "f_seeking with 2048" );
\r
1123 #if ( F_MAX_SEEK_TEST > 2048 )
\r
1124 else if ( sectorsize == 4096 )
\r
1126 _f_dump( "f_seeking with 4096" );
\r
1129 #if ( F_MAX_SEEK_TEST > 4096 )
\r
1130 else if ( sectorsize == 8192 )
\r
1132 _f_dump( "f_seeking with 8192" );
\r
1135 #if ( F_MAX_SEEK_TEST > 8192 )
\r
1136 else if ( sectorsize == 16384 )
\r
1138 _f_dump( "f_seeking with 16384" );
\r
1141 #if ( F_MAX_SEEK_TEST > 16384 )
\r
1142 else if ( sectorsize == 32768 )
\r
1144 _f_dump( "f_seeking with 32768" );
\r
1149 _f_dump( "f_seeking with random" );
\r
1152 /*checking sector boundary seekeng*/
\r
1153 file = f_open( "test.bin", "w+" );
\r
1156 return _f_result( 0, 0 );
\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
1164 return _f_result( 1, size );
\r
1167 pos = (unsigned long)f_tell( file );
\r
1168 if ( pos != (unsigned long) sectorsize )
\r
1170 return _f_result( 2, pos );
\r
1173 /*seek back and read some*/
\r
1174 ret = f_seek( file, 0, F_SEEK_SET ); /*seek back*/
\r
1177 return _f_result( 3, ret );
\r
1180 pos = (unsigned long)f_tell( file );
\r
1183 return _f_result( 4, pos );
\r
1186 size = (unsigned long)f_read( testbuffer, 1, sectorsize, file );
\r
1187 if ( size != (unsigned long) sectorsize )
\r
1189 return _f_result( 5, size );
\r
1192 pos = (unsigned long)f_tell( file );
\r
1193 if ( pos != (unsigned long) sectorsize )
\r
1195 return _f_result( 6, pos );
\r
1198 /*fake read at eof*/
\r
1199 size = (unsigned long)f_read( testbuffer, 1, 2, file ); /*eof!*/
\r
1202 return _f_result( 7, size );
\r
1205 pos = (unsigned long)f_tell( file );
\r
1206 if ( pos != (unsigned long) sectorsize )
\r
1208 return _f_result( 8, pos );
\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
1216 return _f_result( 11, size );
\r
1219 pos = (unsigned long)f_tell( file );
\r
1220 if ( pos != (unsigned long) ( sectorsize * 2 ) )
\r
1222 return _f_result( 12, pos );
\r
1225 /*seeking back and read 1byte less*/
\r
1226 ret = f_seek( file, 0, F_SEEK_SET );
\r
1229 return _f_result( 13, ret );
\r
1232 pos = (unsigned long)f_tell( file );
\r
1235 return _f_result( 14, pos );
\r
1238 size = (unsigned long)f_read( testbuffer, 1, sectorsize - 1, file );
\r
1239 if ( size != (unsigned long) ( sectorsize - 1 ) )
\r
1241 return _f_result( 15, size );
\r
1244 pos = (unsigned long)f_tell( file );
\r
1245 if ( pos != (unsigned long) ( sectorsize - 1 ) )
\r
1247 return _f_result( 16, pos );
\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
1256 return _f_result( 17, size );
\r
1259 pos = (unsigned long)f_tell( file );
\r
1260 if ( pos != (unsigned long) ( sectorsize + 1 ) )
\r
1262 return _f_result( 18, pos );
\r
1266 size = (unsigned long)f_read( testbuffer, 2, 1, file );
\r
1269 return _f_result( 19, size );
\r
1272 pos = (unsigned long)f_tell( file );
\r
1273 if ( pos != (unsigned long) ( sectorsize + 3 ) )
\r
1275 return _f_result( 20, pos );
\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
1284 return _f_result( 21, size );
\r
1287 pos = (unsigned long)f_tell( file );
\r
1288 if ( pos != (unsigned long) ( sectorsize + 3 + 4 ) )
\r
1290 return _f_result( 22, pos );
\r
1294 ret = f_seek( file, 2, F_SEEK_SET );
\r
1297 return _f_result( 23, ret );
\r
1300 pos = (unsigned long)f_tell( file );
\r
1303 return _f_result( 24, pos );
\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
1311 return _f_result( 25, size );
\r
1314 pos = (unsigned long)f_tell( file );
\r
1317 return _f_result( 26, pos );
\r
1321 ret = f_seek( file, -4, F_SEEK_END );
\r
1324 return _f_result( 27, ret );
\r
1327 pos = (unsigned long)f_tell( file );
\r
1328 if ( pos != (unsigned long) ( 2 * sectorsize - 4 ) )
\r
1330 return _f_result( 28, pos );
\r
1334 size = (unsigned long)f_read( testbuffer, 1, 2, file );
\r
1337 return _f_result( 29, size );
\r
1340 pos = (unsigned long)f_tell( file );
\r
1341 if ( pos != (unsigned long) ( 2 * sectorsize - 2 ) )
\r
1343 return _f_result( 30, pos );
\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
1351 return _f_result( 31, size );
\r
1354 pos = (unsigned long)f_tell( file );
\r
1355 if ( pos != (unsigned long) ( 2 * sectorsize + 6 ) )
\r
1357 return _f_result( 32, pos );
\r
1360 /*seek to the begining*/
\r
1361 ret = f_seek( file, 0, F_SEEK_SET );
\r
1364 return _f_result( 33, ret );
\r
1367 pos = (unsigned long)f_tell( file );
\r
1370 return _f_result( 34, pos );
\r
1373 /*seek to the end*/
\r
1374 ret = f_seek( file, 2 * sectorsize + 6, F_SEEK_SET );
\r
1377 return _f_result( 35, ret );
\r
1380 pos = (unsigned long)f_tell( file );
\r
1381 if ( pos != (unsigned long) ( 2 * sectorsize + 6 ) )
\r
1383 return _f_result( 36, pos );
\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
1391 return _f_result( 37, size );
\r
1394 pos = (unsigned long)f_tell( file );
\r
1395 if ( pos != (unsigned long) ( 2 * sectorsize + 8 ) )
\r
1397 return _f_result( 38, pos );
\r
1400 /*seek to the begining*/
\r
1401 (void)f_seek( file, -( 2 * sectorsize + 8 ), F_SEEK_CUR );
\r
1404 return _f_result( 39, ret );
\r
1407 pos = (unsigned long)f_tell( file );
\r
1410 return _f_result( 40, pos );
\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
1417 return _f_result( 41, size );
\r
1420 pos = (unsigned long)f_tell( file );
\r
1421 if ( pos != (unsigned long) sectorsize )
\r
1423 return _f_result( 42, pos );
\r
1426 size = (unsigned long)f_read( testbuffer, 1, sectorsize, file );
\r
1427 if ( size != (unsigned long) sectorsize )
\r
1429 return _f_result( 43, size );
\r
1432 pos = (unsigned long)f_tell( file );
\r
1433 if ( pos != (unsigned long) ( 2 * sectorsize ) )
\r
1435 return _f_result( 44, pos );
\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
1443 return _f_result( 45, size );
\r
1446 pos = (unsigned long)f_tell( file );
\r
1447 if ( pos != (unsigned long) ( 2 * sectorsize + 1 ) )
\r
1449 return _f_result( 46, pos );
\r
1453 ret = f_close( file );
\r
1456 return _f_result( 47, ret );
\r
1460 /*check the result*/
\r
1461 size = (unsigned long)f_filelength( "test.bin" );
\r
1462 if ( size != (unsigned long) ( 2 * sectorsize + 8 ) )
\r
1464 return _f_result( 48, size );
\r
1468 file = f_open( "test.bin", "r" );
\r
1471 return _f_result( 49, size );
\r
1474 if ( checkfilecontent( 2, 0, file ) )
\r
1476 return _f_result( 50, 0 );
\r
1479 if ( checkfilecontent( 6, 4, file ) )
\r
1481 return _f_result( 51, 0 );
\r
1484 if ( checkfilecontent( sectorsize - 8 - 1, 0, file ) )
\r
1486 return _f_result( 52, 0 );
\r
1489 if ( checkfilecontent( 2, 2, file ) )
\r
1491 return _f_result( 53, 0 );
\r
1494 if ( checkfilecontent( 2, 1, file ) )
\r
1496 return _f_result( 54, 0 );
\r
1499 if ( checkfilecontent( 4, 3, file ) )
\r
1501 return _f_result( 55, 0 );
\r
1504 if ( checkfilecontent( sectorsize - 7 - 2, 1, file ) )
\r
1506 return _f_result( 56, 0 );
\r
1509 if ( checkfilecontent( 2, 5, file ) )
\r
1511 return _f_result( 57, 0 );
\r
1514 if ( checkfilecontent( 1, 7, file ) )
\r
1516 return _f_result( 58, 0 );
\r
1519 if ( checkfilecontent( 5, 5, file ) )
\r
1521 return _f_result( 59, 0 );
\r
1524 if ( checkfilecontent( 2, 6, file ) )
\r
1526 return _f_result( 60, 0 );
\r
1529 /*check pos result*/
\r
1530 pos = (unsigned long)f_tell( file );
\r
1531 if ( pos != (unsigned long) ( 2 * sectorsize + 8 ) )
\r
1533 return _f_result( 61, pos );
\r
1536 /*this has to be eof*/
\r
1537 pos = f_eof( file );
\r
1540 return _f_result( 62, pos );
\r
1544 ret = f_close( file );
\r
1547 return _f_result( 63, ret );
\r
1551 ret = f_delete( "test.bin" );
\r
1554 return _f_result( 64, ret );
\r
1557 _f_dump( "passed..." );
\r
1561 static unsigned char f_opening ( void )
\r
1565 unsigned char ret;
\r
1566 unsigned short size, pos;
\r
1568 _f_dump( "f_opening" );
\r
1570 /*test non existing file open r, r+*/
\r
1571 file = f_open( "file.bin", "r" );
\r
1574 return _f_result( 0, 0 );
\r
1577 file = f_open( "file.bin", "r+" );
\r
1580 return _f_result( 1, 0 );
\r
1583 /*test non existing appends "a" a+*/
\r
1584 file = f_open( "file.bin", "a" );
\r
1587 return _f_result( 2, 0 );
\r
1590 file2 = f_open( "file.bin", "a+" ); /*open again*/
\r
1593 return _f_result( 3, 0 );
\r
1596 ret = f_close( file );
\r
1599 return _f_result( 3, 1 );
\r
1602 ret = f_close( file2 );
\r
1603 if ( ret != F_ERR_NOTOPEN )
\r
1605 return _f_result( 3, 2 );
\r
1609 /*try to creates it w*/
\r
1610 file = f_open( "file.bin", "w" );
\r
1613 return _f_result( 4, 0 );
\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
1621 return _f_result( 5, size );
\r
1624 /*go back, and read it*/
\r
1625 ret = f_rewind( file ); /*back to the begining*/
\r
1628 return _f_result( 6, ret ); /*it should fail*/
\r
1631 size = (unsigned short)f_read( testbuffer, 1, 512, file ); /*test read*/
\r
1634 return _f_result( 7, size ); /*it should fail*/
\r
1637 /*close and check size*/
\r
1638 size = (unsigned short)f_filelength( "file.bin" );
\r
1641 return _f_result( 8, size ); /*has to be zero*/
\r
1644 ret = f_close( file );
\r
1647 return _f_result( 9, ret );
\r
1650 size = (unsigned short)f_filelength( "file.bin" );
\r
1651 if ( size != 512 )
\r
1653 return _f_result( 10, size );
\r
1656 /*try to owerwrites it it*/
\r
1657 file = f_open( "file.bin", "w+" );
\r
1660 return _f_result( 11, 0 );
\r
1663 /*close and check size*/
\r
1664 size = (unsigned short)f_filelength( "file.bin" );
\r
1667 return _f_result( 12, size ); /*has to be zero*/
\r
1670 ret = f_close( file );
\r
1673 return _f_result( 13, ret );
\r
1676 size = (unsigned short)f_filelength( "file.bin" );
\r
1679 return _f_result( 14, size );
\r
1684 /*test non existing appends "a" */
\r
1685 file = f_open( "file.bin", "r+" );
\r
1688 return _f_result( 15, 0 );
\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
1696 return _f_result( 16, size );
\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
1704 return _f_result( 17, size ); /*it should fail*/
\r
1707 ret = f_rewind( file ); /*back to the begining*/
\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
1714 return _f_result( 18, size );
\r
1717 pos = (unsigned short)f_tell( file );
\r
1720 return _f_result( 19, pos ); /*position has to be 512*/
\r
1723 size = (unsigned short)f_filelength( "file.bin" );
\r
1726 return _f_result( 20, size ); /*has to be zero*/
\r
1729 /*close and check size*/
\r
1730 ret = f_close( file );
\r
1733 return _f_result( 21, ret );
\r
1736 size = (unsigned short)f_filelength( "file.bin" );
\r
1737 if ( size != 512 )
\r
1739 return _f_result( 22, size );
\r
1743 /*test non existing appends a+*/
\r
1744 file = f_open( "file.bin", "a+" );
\r
1747 return _f_result( 23, 0 );
\r
1750 pos = (unsigned short)f_tell( file );
\r
1753 return _f_result( 24, pos ); /*position has to be 512*/
\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
1761 return _f_result( 25, size );
\r
1764 /*go back, and read it*/
\r
1765 ret = f_rewind( file ); /*back to the begining*/
\r
1768 return _f_result( 26, ret ); /*it should fail*/
\r
1771 size = (unsigned short)f_read( testbuffer, 1, 512, file ); /*test read*/
\r
1772 if ( size != 512 )
\r
1774 return _f_result( 27, size ); /*it should fail*/
\r
1777 pos = (unsigned short)f_tell( file );
\r
1780 return _f_result( 28, pos ); /*position has to be 512*/
\r
1783 /*close and check size*/
\r
1784 size = (unsigned short)f_filelength( "file.bin" );
\r
1785 if ( size != 512 )
\r
1787 return _f_result( 29, size ); /*has to be zero*/
\r
1790 ret = f_close( file );
\r
1793 return _f_result( 30, ret );
\r
1796 size = (unsigned short)f_filelength( "file.bin" );
\r
1797 if ( size != 1024 )
\r
1799 return _f_result( 31, size );
\r
1803 ret = f_close( file );
\r
1804 if ( ret != F_ERR_NOTOPEN )
\r
1806 return _f_result( 32, pos );
\r
1809 ret = f_delete( "file.bin" );
\r
1812 return _f_result( 33, ret );
\r
1815 _f_dump( "passed..." );
\r
1819 static unsigned char f_appending ( void )
\r
1822 unsigned short size, tsize, pos;
\r
1823 unsigned char a, b, ret;
\r
1825 _f_dump( "f_appending" );
\r
1829 for ( tsize = 0, a = 0 ; a < 16 ; a++ )
\r
1831 file = f_open( "ap.bin", "a" );
\r
1834 return _f_result( 1, 0 );
\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
1841 return _f_result( 2, size );
\r
1844 size = (unsigned short)f_filelength( "ap.bin" );
\r
1845 if ( size != tsize )
\r
1847 return _f_result( 3, size );
\r
1852 ret = f_close( file );
\r
1855 return _f_result( 4, ret );
\r
1858 size = (unsigned short)f_filelength( "ap.bin" );
\r
1859 if ( size != tsize )
\r
1861 return _f_result( 5, size );
\r
1865 file = f_open( "ap.bin", "r" );
\r
1868 return _f_result( 6, 0 );
\r
1871 for ( tsize = 0, a = 0 ; a < 16 ; a++ )
\r
1873 if ( checkfilecontent( a + 128, (char)a, file ) )
\r
1875 return _f_result( 7, a );
\r
1879 ret = f_close( file );
\r
1882 return _f_result( 8, ret );
\r
1885 for ( tsize = 0, a = 0 ; a < 16 ; a++ )
\r
1887 file = f_open( "ap.bin", "r" );
\r
1890 return _f_result( 9, 0 );
\r
1893 ret = f_seek( file, tsize, F_SEEK_SET );
\r
1896 return _f_result( 10, ret );
\r
1899 pos = (unsigned short)f_tell( file );
\r
1900 if ( pos != tsize )
\r
1902 return _f_result( 11, pos );
\r
1905 size = (unsigned short)f_read( testbuffer, 1, a + 128, file );
\r
1906 if ( size != a + 128 )
\r
1908 return _f_result( 12, size );
\r
1911 for ( b = 0 ; b < a + 128 ; b++ )
\r
1913 if ( testbuffer[b] != (char)a )
\r
1915 return _f_result( 13, a );
\r
1921 pos = (unsigned short)f_tell( file );
\r
1922 if ( pos != tsize )
\r
1924 return _f_result( 13, pos );
\r
1927 ret = f_close( file );
\r
1930 return _f_result( 14, ret );
\r
1934 ret = f_close( file );
\r
1935 if ( ret != F_ERR_NOTOPEN )
\r
1937 return _f_result( 9, ret );
\r
1940 ret = f_delete( "ap.bin" );
\r
1943 return _f_result( 14, ret );
\r
1946 _f_dump( "passed..." );
\r
1948 } /* f_appending */
\r
1950 static unsigned char f_writing ( void )
\r
1953 unsigned short size;
\r
1954 unsigned char a, ret;
\r
1955 F_SPACE before, after;
\r
1957 _f_dump( "f_writing" );
\r
1959 ret = f_getfreespace( &before );
\r
1962 return _f_result( 0, ret );
\r
1965 for ( a = 0 ; a < 4 ; a++ )
\r
1967 file = f_open( "wr.bin", "w" );
\r
1970 return _f_result( 1, 0 );
\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
1977 return _f_result( 2, size );
\r
1980 ret = f_close( file );
\r
1983 return _f_result( 3, ret );
\r
1986 size = (unsigned short)f_filelength( "wr.bin" );
\r
1987 if ( size != a * 128 )
\r
1989 return _f_result( 4, size );
\r
1992 file = f_open( "wr.bin", "r" );
\r
1995 return _f_result( 5, 0 );
\r
1998 if ( checkfilecontent( a * 128, (char)a, file ) )
\r
2000 return _f_result( 6, a );
\r
2003 ret = f_close( file );
\r
2006 return _f_result( 7, ret );
\r
2011 for ( a = 0 ; a < 4 ; a++ )
\r
2013 file = f_open( "wr.bin", "w+" );
\r
2016 return _f_result( 8, 0 );
\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
2023 return _f_result( 9, size );
\r
2026 ret = f_close( file );
\r
2029 return _f_result( 10, ret );
\r
2032 size = (unsigned short)f_filelength( "wr.bin" );
\r
2033 if ( size != a * 128 )
\r
2035 return _f_result( 11, size );
\r
2038 file = f_open( "wr.bin", "r+" );
\r
2041 return _f_result( 12, 0 );
\r
2044 if ( checkfilecontent( a * 128, (char)a, file ) )
\r
2046 return _f_result( 13, a );
\r
2049 ret = f_close( file );
\r
2052 return _f_result( 14, ret );
\r
2056 ret = f_getfreespace( &after );
\r
2059 return _f_result( 15, ret );
\r
2062 if ( before.bad != after.bad )
\r
2064 return _f_result( 16, 0 );
\r
2067 if ( before.free == after.free )
\r
2069 return _f_result( 17, 0 );
\r
2072 if ( before.used == after.used )
\r
2074 return _f_result( 18, 0 );
\r
2077 if ( before.total != after.total )
\r
2079 return _f_result( 19, 0 );
\r
2082 if ( before.used + before.free != after.used + after.free )
\r
2084 return _f_result( 20, 0 );
\r
2087 ret = f_delete( "wr.bin" );
\r
2090 return _f_result( 21, ret );
\r
2093 ret = f_getfreespace( &after );
\r
2096 return _f_result( 22, ret );
\r
2099 if ( before.bad != after.bad )
\r
2101 return _f_result( 23, 0 );
\r
2104 if ( before.free != after.free )
\r
2106 return _f_result( 24, 0 );
\r
2109 if ( before.used != after.used )
\r
2111 return _f_result( 25, 0 );
\r
2114 if ( before.total != after.total )
\r
2116 return _f_result( 26, 0 );
\r
2119 _f_dump( "passed..." );
\r
2123 static unsigned char f_dots ( void )
\r
2125 unsigned char ret;
\r
2126 unsigned char a, size;
\r
2129 _f_dump( "f_dots" );
\r
2131 ret = f_mkdir( "/tt" );
\r
2134 return _f_result( 0, ret );
\r
2137 ret = f_chdir( "/tt" );
\r
2140 return _f_result( 1, ret );
\r
2143 ret = f_rmdir( "." );
\r
2144 if ( ret != F_ERR_NOTFOUND )
\r
2146 return _f_result( 4, ret );
\r
2149 ret = f_rmdir( ".." );
\r
2150 if ( ret != F_ERR_NOTFOUND )
\r
2152 return _f_result( 5, ret );
\r
2155 ret = f_chdir( "." );
\r
2158 return _f_result( 6, ret );
\r
2161 ret = _f_checkcwd( f_nameconv( "/tt" ) );
\r
2164 return _f_result( 7, ret );
\r
2167 ret = f_delete( "." );
\r
2168 if ( ret != F_ERR_NOTFOUND )
\r
2170 return _f_result( 8, ret );
\r
2173 ret = f_delete( ".." );
\r
2174 if ( ret != F_ERR_NOTFOUND )
\r
2176 return _f_result( 9, ret );
\r
2179 ret = f_mkdir( "." );
\r
2180 if ( ret != F_ERR_NOTFOUND )
\r
2182 return _f_result( 10, ret );
\r
2185 ret = f_mkdir( ".." );
\r
2186 if ( ret != F_ERR_NOTFOUND )
\r
2188 return _f_result( 11, ret );
\r
2191 ret = f_mkdir( "..." );
\r
2192 if ( ret != F_ERR_NOTFOUND )
\r
2194 return _f_result( 12, ret );
\r
2197 for ( a = 0 ; a < 6 ; a++ )
\r
2227 return _f_result( 13, a );
\r
2230 file = f_open( ".", mode );
\r
2233 return _f_result( 14, a );
\r
2236 file = f_open( "..", mode );
\r
2239 return _f_result( 15, a );
\r
2242 file = f_open( "...", mode );
\r
2245 return _f_result( 16, a );
\r
2249 size = (unsigned char)f_filelength( "." );
\r
2252 return _f_result( 17, size );
\r
2255 size = (unsigned char)f_filelength( ".." );
\r
2258 return _f_result( 18, size );
\r
2261 size = (unsigned char)f_filelength( "..." );
\r
2264 return _f_result( 19, size );
\r
2268 ret = f_chdir( "..." );
\r
2269 if ( ret != F_ERR_NOTFOUND )
\r
2271 return _f_result( 20, ret );
\r
2274 ret = f_chdir( ".." );
\r
2277 return _f_result( 21, ret );
\r
2280 ret = f_rmdir( "tt" );
\r
2283 return _f_result( 27, ret );
\r
2287 _f_dump( "passed..." );
\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
2302 unsigned char ret;
\r
2304 struct_TestFileSysEntry * Entry = (struct_TestFileSysEntry *)( ( ( (long)testbuffer + 3 ) >> 2 ) << 2 );
\r
2305 unsigned short Pos;
\r
2307 unsigned char Founded;
\r
2309 _f_dump( "f_rit" );
\r
2311 (void)f_delete( "MyTest" );
\r
2312 File = f_open( "MyTest", "a+" );
\r
2315 return _f_result( 1, 0 );
\r
2319 for ( i = 0 ; i < NUM_OF_RECORDS ; i++ )
\r
2321 Ch = (char)( i % 10 );
\r
2322 Entry->MagicNum = 0xbc;
\r
2324 Entry->Buf[0] = Ch;
\r
2325 Entry->Buf[10] = (unsigned char)( Ch + 1 );
\r
2327 if ( F_NO_ERROR != f_seek( File, 0, F_SEEK_END ) )
\r
2329 return _f_result( 2, 0 ); /* Fail, could not go to the end of the file */
\r
2332 if ( sizeof( struct_TestFileSysEntry ) != f_write( (void *)Entry, 1, sizeof( struct_TestFileSysEntry ), File ) )
\r
2334 return _f_result( 3, 0 ); /* Fail, could not write new entry */
\r
2337 Pos = (unsigned short)f_tell( File );
\r
2338 if ( ( ( Pos / sizeof( struct_TestFileSysEntry ) ) - 1 ) != i )
\r
2340 return _f_result( 4, 0 ); /* Fail, wrong file position */
\r
2343 if ( F_NO_ERROR != f_seek( File, (long)( Pos - sizeof( struct_TestFileSysEntry ) ), F_SEEK_SET ) )
\r
2345 return _f_result( 5, 0 ); /* Fail, could not go to new entry position */
\r
2348 if ( sizeof( struct_TestFileSysEntry ) != f_read( (void *)Entry, 1, sizeof( struct_TestFileSysEntry ), File ) )
\r
2350 return _f_result( 6, 0 ); /* Fail, could not read the new entry */
\r
2353 if ( ( Entry->MagicNum != 0xbc ) || ( Entry->Line != (int)i ) || ( Entry->Buf[0] != Ch ) || ( Entry->Buf[10] != Ch + 1 ) )
\r
2355 return _f_result( 7, 0 ); /*Fail, the new entry is corrupted"*/
\r
2359 ret = f_close( File );
\r
2362 return _f_result( 8, ret );
\r
2366 /*Open file again*/
\r
2367 File = f_open( "MyTest", "a+" );
\r
2370 return _f_result( 9, 0 );
\r
2373 /* read records */
\r
2374 for ( i = 0 ; i < NUM_OF_RECORDS ; i++ )
\r
2376 Ch = (char)( i % 10 );
\r
2378 if ( F_NO_ERROR != f_seek( File, 0, F_SEEK_SET ) )
\r
2380 return _f_result( 10, 0 ); /* Fail, could not go to the start of the file */
\r
2384 while ( sizeof( struct_TestFileSysEntry ) == f_read( (void *)Entry, 1, sizeof( struct_TestFileSysEntry ), File ) )
\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
2398 return _f_result( 11, i ); /* Entry not founded */
\r
2402 ret = f_close( File );
\r
2405 return _f_result( 12, ret );
\r
2409 ret = f_delete( "MyTest" );
\r
2412 return _f_result( 13, ret );
\r
2415 _f_dump( "passed..." );
\r
2423 static unsigned char f_truncating ( void )
\r
2426 unsigned long size;
\r
2427 unsigned char ret;
\r
2429 _f_dump( "f_truncating" );
\r
2431 file = f_open( "test.bin", "w+" );
\r
2434 return _f_result( 0, 0 );
\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
2441 return _f_result( 1, size );
\r
2444 ret = f_close( file );
\r
2447 return _f_result( 2, ret );
\r
2450 file = f_truncate( "test.bin", F_MAX_SEEK_TEST - 4 );
\r
2453 return _f_result( 3, 0 );
\r
2456 ret = f_close( file );
\r
2459 return _f_result( 4, ret );
\r
2462 size = (unsigned long)f_filelength( "test.bin" );
\r
2463 if ( size != F_MAX_SEEK_TEST - 4 )
\r
2465 return _f_result( 5, size );
\r
2469 file = f_truncate( "test.bin", F_MAX_SEEK_TEST );
\r
2472 return _f_result( 3, 0 );
\r
2475 ret = f_close( file );
\r
2478 return _f_result( 4, ret );
\r
2481 size = (unsigned long)f_filelength( "test.bin" );
\r
2482 if ( size != F_MAX_SEEK_TEST )
\r
2484 return _f_result( 5, size );
\r
2488 file = f_truncate( "test.bin", ( F_MAX_SEEK_TEST / 2 ) - 92 );
\r
2491 return _f_result( 6, 0 );
\r
2494 (void)psp_memset( testbuffer, 2, 92 );
\r
2495 size = (unsigned long)f_write( testbuffer, 1, 92, file );
\r
2498 return _f_result( 7, size );
\r
2501 ret = f_close( file );
\r
2504 return _f_result( 8, ret );
\r
2507 size = (unsigned long)f_filelength( "test.bin" );
\r
2508 if ( size != ( F_MAX_SEEK_TEST / 2 ) )
\r
2510 return _f_result( 9, size );
\r
2514 file = f_truncate( "test.bin", 1 );
\r
2517 return _f_result( 10, 0 );
\r
2520 (void)psp_memset( testbuffer, 3, 2 );
\r
2521 size = (unsigned long)f_write( testbuffer, 1, 2, file );
\r
2524 return _f_result( 11, size );
\r
2527 ret = f_close( file );
\r
2530 return _f_result( 12, ret );
\r
2533 size = (unsigned long)f_filelength( "test.bin" );
\r
2536 return _f_result( 13, size );
\r
2541 _f_dump( "passed..." );
\r
2543 } /* f_truncating */
\r
2546 void f_dotest ( unsigned char t )
\r
2548 _f_dump( "File system test started..." );
\r
2549 _f_dump( "WARNING: The contents of your drive will be destroyed!\n" );
\r
2551 (void)_f_poweron();
\r
2557 (void)f_formatting();
\r
2564 /* fall through */
\r
2566 (void)f_dirtest();
\r
2573 /* fall through */
\r
2575 (void)f_findingtest();
\r
2582 /* fall through */
\r
2584 (void)f_powerfail();
\r
2591 /* fall through */
\r
2593 (void)f_seeking( 128 );
\r
2599 #if ( F_MAX_SEEK_TEST > 128 )
\r
2601 /* fall through */
\r
2603 (void)f_seeking( 256 );
\r
2610 #if ( F_MAX_SEEK_TEST > 256 )
\r
2612 /* fall through */
\r
2614 (void)f_seeking( 512 );
\r
2621 #if ( F_MAX_SEEK_TEST > 512 )
\r
2623 /* fall through */
\r
2625 (void)f_seeking( 1024 );
\r
2632 #if ( F_MAX_SEEK_TEST > 1024 )
\r
2634 /* fall through */
\r
2636 (void)f_seeking( 2048 );
\r
2643 #if ( F_MAX_SEEK_TEST > 2048 )
\r
2645 /* fall through */
\r
2647 (void)f_seeking( 4096 );
\r
2654 #if ( F_MAX_SEEK_TEST > 4096 )
\r
2656 /* fall through */
\r
2658 (void)f_seeking( 8192 );
\r
2665 #if ( F_MAX_SEEK_TEST > 8192 )
\r
2667 /* fall through */
\r
2669 (void)f_seeking( 16384 );
\r
2676 #if ( F_MAX_SEEK_TEST > 16384 )
\r
2678 /* fall through */
\r
2680 (void)f_seeking( 32768 );
\r
2688 /* fall through */
\r
2690 (void)f_opening();
\r
2697 /* fall through */
\r
2699 (void)f_appending();
\r
2706 /* fall through */
\r
2708 (void)f_writing();
\r
2715 /* fall through */
\r
2724 /* fall through */
\r
2733 (void)f_truncating();
\r
2742 _f_dump( "End of tests..." );
\r
2747 /****************************************************************************
\r
2751 ***************************************************************************/
\r
2752 #endif /*_TEST_C_*/
\r