void create_resized_file_of_size(const char *fn,int syze1,int reSyze, int syze2) { int h; int n; int iterations; h = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE); iterations = (syze1 + strlen(fn) -1)/ strlen(fn); while (iterations > 0) { yaffs_write(h,fn,strlen(fn)); iterations--; } yaffs_truncate(h,reSyze); yaffs_lseek(h,0,SEEK_SET); iterations = (syze2 + strlen(fn) -1)/ strlen(fn); while (iterations > 0) { yaffs_write(h,fn,strlen(fn)); iterations--; } yaffs_close (h); }
int test_yaffs_read_EINVAL_clean(void) { int output=0; if (handle>=0){ if(file_name){ free(file_name); file_name = NULL; } output= yaffs_truncate(FILE_PATH,FILE_SIZE ); if (output>=0){ output=test_yaffs_write(); if (output<0){ print_message("failed to write to file\n",2); return -1; } else { output=test_yaffs_write_clean(); if (output<0){ print_message("failed to clean the write_to_file function\n",2); } } } else { print_message("failed to truncate file\n",2); return -1; } if(output>=0){ output=yaffs_close(handle); if (output>=0){ return 1; } else { print_message("could not close the handle\n",2); return -1; } } else { print_message("failed to fix the file\n",2); return -1; } } else { print_message("no open handle\n",2); return -1; } }
int test_yaffs_truncate_ENOENT2(void) { int error=0; int output=0; output= yaffs_truncate("/non_existing_dir/foo",FILE_SIZE_TRUNCATED ); if (output<0){ error=yaffs_get_error(); if (abs(error)==ENOENT){ return 1; } else { print_message("received a different error than expected\n",2); return -1; } } else{ print_message("truncated a nonexisting file\n",2); return -1; } }
int truncate_test(void) { int a; int r; int i; int l; char y[10]; yaffs_StartUp(); yaffs_mount("/boot"); yaffs_unlink("/boot/trunctest"); a = yaffs_open("/boot/trunctest", O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE); yaffs_write(a,"abcdefghijklmnopqrstuvwzyz",26); yaffs_truncate(a,3); l= yaffs_lseek(a,0,SEEK_END); printf("truncated length is %d\n",l); yaffs_lseek(a,5,SEEK_SET); yaffs_write(a,"1",1); yaffs_lseek(a,0,SEEK_SET); r = yaffs_read(a,y,10); printf("read %d bytes:",r); for(i = 0; i < r; i++) printf("[%02X]",y[i]); printf("\n"); return 0; }
int test_yaffs_truncate_ELOOP(void) { int error=0; int output=0; if (set_up_ELOOP()<0){ print_message("failed to setup symlinks\n",2); return -1; } output= yaffs_truncate(ELOOP_PATH,FILE_SIZE_TRUNCATED ); if (output<0){ error=yaffs_get_error(); if (abs(error)==ELOOP){ return 1; } else { print_message("received a different error than expected\n",2); return -1; } } else{ print_message("truncated a nonexisting file\n",2); return -1; } }
int resize_stress_test(const char *path) { int a,b,i,j; int x; int r; char aname[100]; char bname[100]; char abuffer[1000]; char bbuffer[1000]; yaffs_StartUp(); yaffs_mount(path); sprintf(aname,"%s%s",path,"/a"); sprintf(bname,"%s%s",path,"/b"); memset(abuffer,'a',1000); memset(bbuffer,'b',1000); a = yaffs_open(aname, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE); b = yaffs_open(bname, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE); printf(" %s %d %s %d\n",aname,a,bname,b); x = 0; for(j = 0; j < 100; j++) { yaffs_lseek(a,0,SEEK_END); for(i = 0; i <20000; i++) { //r = yaffs_lseek(b,i,SEEK_SET); //r = yaffs_write(b,bbuffer,1000); if(x & 0x16) { // shrink int syz = yaffs_lseek(a,0,SEEK_END); syz -= 500; if(syz < 0) syz = 0; yaffs_truncate(a,syz); } else { //expand r = yaffs_lseek(a,i * 500,SEEK_SET); r = yaffs_write(a,abuffer,1000); } x++; } } return 0; }
int resize_stress_test_no_grow(const char *path,int iters) { int a,b,i,j; int x; int r; char aname[100]; char bname[100]; char abuffer[1000]; char bbuffer[1000]; yaffs_StartUp(); yaffs_mount(path); sprintf(aname,"%s%s",path,"/a"); sprintf(bname,"%s%s",path,"/b"); memset(abuffer,'a',1000); memset(bbuffer,'b',1000); a = yaffs_open(aname, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE); b = yaffs_open(bname, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE); printf(" %s %d %s %d\n",aname,a,bname,b); x = 0; for(j = 0; j < iters; j++) { yaffs_lseek(a,0,SEEK_END); for(i = 0; i <20000; i++) { //r = yaffs_lseek(b,i,SEEK_SET); //r = yaffs_write(b,bbuffer,1000); if(!(x%20)) { // shrink int syz = yaffs_lseek(a,0,SEEK_END); while(syz > 4000) { syz -= 2050; if(syz < 0) syz = 0; yaffs_truncate(a,syz); syz = yaffs_lseek(a,0,SEEK_END); printf("shrink to %d\n",syz); } } else { //expand r = yaffs_lseek(a,-500,SEEK_END); r = yaffs_write(a,abuffer,1000); } x++; } printf("file size is %d\n",yaffs_lseek(a,0,SEEK_END)); } return 0; }