From e1a60ae9412db5bb7e845bc65b7f8529e9b22d95 Mon Sep 17 00:00:00 2001 From: Timothy Manning Date: Wed, 22 Dec 2010 10:55:46 +1300 Subject: [PATCH] yaffs Trying to find a bug in direct/timothy_tests/mirror_tests Signed-off-by: Timothy Manning --- .../mirror_tests/current_bugs.txt | 3 + direct/timothy_tests/mirror_tests/lib.c | 27 ++++ direct/timothy_tests/mirror_tests/lib.h | 5 +- .../mirror_tests/linux_test_write.c | 6 +- .../timothy_tests/mirror_tests/mirror_tests.c | 121 ++++++++++++------ .../timothy_tests/mirror_tests/mirror_tests.h | 9 +- .../mirror_tests/yaffs_test_write.c | 52 +++++++- 7 files changed, 171 insertions(+), 52 deletions(-) diff --git a/direct/timothy_tests/mirror_tests/current_bugs.txt b/direct/timothy_tests/mirror_tests/current_bugs.txt index 523fd3b..da17001 100644 --- a/direct/timothy_tests/mirror_tests/current_bugs.txt +++ b/direct/timothy_tests/mirror_tests/current_bugs.txt @@ -1,3 +1,6 @@ BUGS In yaffs having a pathname "yaffs2/tests//.." appears to create a file called ".." unstead of going back a directory. + + + diff --git a/direct/timothy_tests/mirror_tests/lib.c b/direct/timothy_tests/mirror_tests/lib.c index 558de9a..e21e77d 100644 --- a/direct/timothy_tests/mirror_tests/lib.c +++ b/direct/timothy_tests/mirror_tests/lib.c @@ -42,6 +42,33 @@ void display_error(void) } +void get_error_yaffs(void) +{ + int error_code=0; + char message[30]; + message[0]='\0'; + + error_code=yaffs_get_error(); + sprintf(message,"yaffs_error code %d\n",error_code); + print_message(1,message); + sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code)); + print_message(1,message); +} + +void get_error_linux(void) +{ + int error_code=0; + char message[30]; + message[0]='\0'; + + error_code=errno; + sprintf(message,"linux_error code %d\n",error_code); + print_message(1,message); + strcpy(message,"error code"); + sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code)); + //perror(message); + print_message(1,message); +} void generate_random_string(char *ptr,int length_of_str){ unsigned int x; unsigned int length=((rand() %(length_of_str-3))+3); /*creates a int with the number of charecters been between 1 and 51*/ diff --git a/direct/timothy_tests/mirror_tests/lib.h b/direct/timothy_tests/mirror_tests/lib.h index c77e2f6..48adc94 100644 --- a/direct/timothy_tests/mirror_tests/lib.h +++ b/direct/timothy_tests/mirror_tests/lib.h @@ -19,7 +19,7 @@ #include #include #include "yaffsfs.h" - +#include typedef struct arg_temp2{ char char1; @@ -48,5 +48,6 @@ int get_print_level(void); void set_exit_on_error(int num); int get_exit_on_error(void); void display_error(void); - +void get_error_yaffs(void); +void get_error_linux(void); #endif diff --git a/direct/timothy_tests/mirror_tests/linux_test_write.c b/direct/timothy_tests/mirror_tests/linux_test_write.c index 9695953..03c092d 100644 --- a/direct/timothy_tests/mirror_tests/linux_test_write.c +++ b/direct/timothy_tests/mirror_tests/linux_test_write.c @@ -20,9 +20,11 @@ int linux_test_write(arg_temp *args_struct) int output=0; int handle=-1; join_paths(linux_struct.root_path,args_struct->string1, path ); - sprintf(message,"trying to write to: %s\nwith mode set to %o \n",path,args_struct->char1); + sprintf(message,"trying to write to: %s\nwith mode set to %o \n",path,args_struct->char1 ); print_message(3,message); - handle=open(path,args_struct->char1 &(O_TRUNC|O_EXCL|O_CREAT|O_APPEND),args_struct->char2&(S_IREAD|S_IWRITE)); + printf("mode S_IREAD %d S_IWRITE %d\n",(args_struct->char2 & S_IREAD),(args_struct->char2 & S_IWRITE)); + handle=open(path,(args_struct->char1 &(O_TRUNC|O_EXCL|O_CREAT|O_APPEND)),(args_struct->char2&(S_IREAD|S_IWRITE))); + printf("handle %d\n",handle); if (handle<0){ print_message(3,"failed to open a handle\n"); return -1; //handle failed to open diff --git a/direct/timothy_tests/mirror_tests/mirror_tests.c b/direct/timothy_tests/mirror_tests/mirror_tests.c index 758b0a9..6e2c33e 100644 --- a/direct/timothy_tests/mirror_tests/mirror_tests.c +++ b/direct/timothy_tests/mirror_tests/mirror_tests.c @@ -68,7 +68,7 @@ int main(int argc, char *argv[]) print_message(3,message); run_random_test(num_of_random_tests); - compare_linux_and_yaffs(); + //compare_linux_and_yaffs(); yaffs_unmount("yaffs2"); return 0; } @@ -80,7 +80,10 @@ void init(int argc, char *argv[]) int x=-1; char message[100]; - srand((unsigned)time(NULL)); + x=(unsigned)time(NULL); + sprintf(message,"seeding srand with: %d\n",x); + print_message(2,message); + srand(x); yaffs_set_trace(0); linux_struct.type_of_test =LINUX; yaffs_struct.type_of_test =YAFFS; @@ -179,11 +182,16 @@ int run_random_test(int num_of_random_tests) print_message(3,message); generate_random_numbers(&args_struct); run_yaffs_test(test_id, &args_struct); + + check_mode(&args_struct); + run_linux_test(test_id, &args_struct); + check_mode(&args_struct); if (get_print_level()>=4){ get_error_yaffs(); get_error_linux(); } + if ((abs(yaffs_get_error())!=abs(errno)) && (abs(yaffs_get_error())!=EISDIR && abs(errno) != 0) && (abs(yaffs_get_error())!=ENOENT && abs(errno) != EACCES)&& @@ -196,9 +204,13 @@ int run_random_test(int num_of_random_tests) exit(0); } } - } - compare_linux_and_yaffs(); + } + check_mode(&args_struct); + compare_linux_and_yaffs(&args_struct); + check_mode(&args_struct); + } + compare_linux_and_yaffs(&args_struct); } int select_test_id(int test_len) @@ -211,7 +223,33 @@ int select_test_id(int test_len) } -int compare_linux_and_yaffs(void) +int check_mode(arg_temp *args_struct) +{ + char path[200]; + char message[200]; + int output=0; + + struct yaffs_stat yaffs_stat_struct; + join_paths(yaffs_struct.root_path,args_struct->string1, path ); + sprintf(message,"\ntrying to stat to: %s\n",path); + print_message(3,message); + output=yaffs_stat(path,&yaffs_stat_struct); + if (output < 0){ + sprintf(message,"failed to stat the file\n"); + print_message(3,message); + get_error_yaffs(); + } else { + sprintf(message,"stated the file\n"); + print_message(3,message); + sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + } + return 1; +} + +int compare_linux_and_yaffs(arg_temp *args_struct) { int x=0,y=0; int exit_bool=0; @@ -219,6 +257,8 @@ int compare_linux_and_yaffs(void) int number_of_files_in_linux=0; char message[200]; + struct yaffs_stat yaffs_stat_struct; + struct stat linux_stat_struct; yaffs_DIR *yaffs_open_dir; yaffs_dirent *yaffs_current_file; @@ -226,7 +266,7 @@ int compare_linux_and_yaffs(void) struct dirent *linux_current_file; print_message(2,"\n\n comparing folders\n"); - + check_mode(&args_struct); yaffs_open_dir = yaffs_opendir(yaffs_struct.root_path); if (yaffs_open_dir) { @@ -239,7 +279,7 @@ int compare_linux_and_yaffs(void) print_message(3,"failed to open yaffs test dir\n"); } char yaffs_file_list[x][200]; - + check_mode(&args_struct); if (yaffs_open_dir){ @@ -254,7 +294,7 @@ int compare_linux_and_yaffs(void) } else { print_message(3,"failed to populate yaffs test list\n"); } - + check_mode(&args_struct); linux_open_dir = opendir(linux_struct.root_path); if (linux_open_dir){ for (x=0;NULL!=readdir(linux_open_dir);x++){} @@ -274,9 +314,9 @@ int compare_linux_and_yaffs(void) linux_current_file =readdir(linux_open_dir); if (NULL!=linux_current_file){ strcpy(message,linux_current_file->d_name); - print_message(3,"opened file: "); - print_message(3,message); - print_message(3,"\n"); + print_message(7,"opened file: "); + print_message(7,message); + print_message(7,"\n"); } if (NULL!=linux_current_file && 0!=strcmp(message,".")&& @@ -284,11 +324,11 @@ int compare_linux_and_yaffs(void) // strcpy(message,linux_current_file->d_name); //sprintf("file opened: %s\n",linux_current_file->d_name); //print_message(3,message); - print_message(3,"added file to list\n"); + print_message(7,"added file to list\n"); strcpy(linux_file_list[y],message); y++; sprintf(message,"file added to list: %s\n",linux_file_list[x]); - print_message(3,message); + print_message(7,message); } } closedir(linux_open_dir); @@ -303,11 +343,35 @@ int compare_linux_and_yaffs(void) print_message(3,message); for (y=0;y - +#include #include "linux_test_open.h" #include "yaffs_test_open.h" @@ -44,14 +44,15 @@ void init(int argc, char *argv[]); int run_random_test(int num_of_random_tests); -int compare_linux_and_yaffs(void); -void get_error_yaffs(void); -void get_error_linux(void); +int compare_linux_and_yaffs(arg_temp *args_struct); + int select_test_id(int test_len); void generate_random_numbers(arg_temp *args_struct); void run_yaffs_test(int id,arg_temp *args_struct); void run_linux_test(int id,arg_temp *args_struct); void clean_dir(void); +int select_test_id(int test_len); +int check_mode(arg_temp *args_struct); //void generate_array_of_objects_in_yaffs(void); //void generate_array_of_objects_in_linux(void); diff --git a/direct/timothy_tests/mirror_tests/yaffs_test_write.c b/direct/timothy_tests/mirror_tests/yaffs_test_write.c index eaa97da..690fea6 100644 --- a/direct/timothy_tests/mirror_tests/yaffs_test_write.c +++ b/direct/timothy_tests/mirror_tests/yaffs_test_write.c @@ -17,19 +17,67 @@ int yaffs_test_write(arg_temp *args_struct) { char path[200]; char message[200]; - int output=0; + int output=0,output2=0; int handle; + struct yaffs_stat yaffs_stat_struct; join_paths(yaffs_struct.root_path,args_struct->string1, path ); sprintf(message,"trying to write to: %s\nwith mode set to %o \n",path,args_struct->char1); print_message(3,message); - handle=yaffs_open(path,args_struct->char1 &(O_TRUNC|O_EXCL|O_CREAT|O_APPEND),args_struct->char2&(S_IREAD|S_IWRITE)); + printf("mode S_IREAD %d S_IWRITE %d\n",(args_struct->char2 & S_IREAD),(args_struct->char2 & S_IWRITE)); + handle=yaffs_open(path,(args_struct->char1 &(O_TRUNC|O_EXCL|O_CREAT|O_APPEND)),(args_struct->char2&(S_IREAD|S_IWRITE))); + printf("handle %d\n",handle); if (handle<0){ print_message(3,"failed to open a handle\n"); return -1; //handle failed to open } + output=yaffs_fstat(handle,&yaffs_stat_struct); + if (output < 0){ + sprintf(message,"failed to stat the file\n"); + print_message(3,message); + get_error_yaffs(); + } else { + sprintf(message,"stated the file\n"); + print_message(3,message); + sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + } + sprintf(message,"trying to write: %d bytes into the file\n",strlen(args_struct->string2)); print_message(3,message); output=yaffs_write(handle,args_struct->string2,strlen(args_struct->string2)); + + print_message(3,"\n wrote to the file\n"); + output2=yaffs_fstat(handle,&yaffs_stat_struct); + if (output2 < 0){ + sprintf(message,"failed to stat the file\n"); + print_message(3,message); + get_error_yaffs(); + } else { + sprintf(message,"stated the file\n"); + print_message(3,message); + sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + } yaffs_close(handle); + print_message(3,"\n closing the file\n"); + output2=yaffs_stat(path,&yaffs_stat_struct); + if (output2 < 0){ + sprintf(message,"failed to stat the file\n"); + print_message(3,message); + get_error_yaffs(); + } else { + sprintf(message,"stated the file\n"); + print_message(3,message); + sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + } + + return output; } -- 2.30.2