int cache_read_test(void) { int a,b,c; int i; int sizeOfFiles = 500000; char buffer[100]; yaffs_StartUp(); yaffs_mount("/boot"); make_a_file("/boot/a",'a',sizeOfFiles); make_a_file("/boot/b",'b',sizeOfFiles); a = yaffs_open("/boot/a",O_RDONLY,0); b = yaffs_open("/boot/b",O_RDONLY,0); c = yaffs_open("/boot/c", O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE); do{ i = sizeOfFiles; if (i > 100) i = 100; sizeOfFiles -= i; yaffs_read(a,buffer,i); yaffs_read(b,buffer,i); yaffs_write(c,buffer,i); } while(sizeOfFiles > 0); return 1; }
int cache_bypass_bug_test(void) { // This test reporoduces a bug whereby YAFFS caching *was* buypassed // resulting in erroneous reads after writes. // This bug has been fixed. int a; int i; char buffer1[1000]; char buffer2[1000]; memset(buffer1,0,sizeof(buffer1)); memset(buffer2,0,sizeof(buffer2)); yaffs_StartUp(); yaffs_mount("/boot"); // Create a file of 2000 bytes. make_a_file("/boot/a",'X',2000); a = yaffs_open("/boot/a",O_RDWR, S_IREAD | S_IWRITE); // Write a short sequence to the file. // This will go into the cache. yaffs_lseek(a,0,SEEK_SET); yaffs_write(a,"abcdefghijklmnopqrstuvwxyz",20); // Read a short sequence from the file. // This will come from the cache. yaffs_lseek(a,0,SEEK_SET); yaffs_read(a,buffer1,30); // Read a page size sequence from the file. yaffs_lseek(a,0,SEEK_SET); yaffs_read(a,buffer2,512); printf("buffer 1 %s\n",buffer1); printf("buffer 2 %s\n",buffer2); if(strncmp(buffer1,buffer2,20)) { printf("Cache bypass bug detected!!!!!\n"); } return 1; }
void short_scan_test(const char *path, int fsize, int niterations) { int i; char fn[100]; sprintf(fn,"%s/%s",path,"f1"); yaffs_StartUp(); for(i = 0; i < niterations; i++) { printf("\n*****************\nIteration %d\n",i); yaffs_mount(path); printf("\nmount: Directory look-up of %s\n",path); dumpDir(path); make_a_file(fn,1,fsize); yaffs_unmount(path); } }
void cmd_yaffs_write_file(char *yaffsName, char bval, int sizeOfFile) { make_a_file(yaffsName, bval, sizeOfFile); }