📄 dtest.cpp
字号:
printf("\nDirectory look-up of /boot\n"); dumpDir("/boot"); printf("\nDirectory look-up of /boot/directory1\n"); dumpDir("/boot/directory1"); // Delete file first, then rmdir should work r = yaffs_unlink("/boot/directory1/file with a long name"); r = yaffs_rmdir("/boot/directory1"); printf("\nDirectory look-up of /boot\n"); dumpDir("/boot"); printf("\nDirectory look-up of /boot/directory1\n"); dumpDir("/boot/directory1");#if 0 fill_disk_and_delete("/boot",20,20); printf("\nDirectory look-up of /boot\n"); dumpDir("/boot");#endif yaffs_symlink("yyfile","/boot/slink"); yaffs_readlink("/boot/slink",str,100); printf("symlink alias is %s\n",str); printf("\nDirectory look-up of /boot\n"); dumpDir("/boot"); printf("\nDirectory look-up of /boot (using stat instead of lstat)\n"); dumpDirFollow("/boot"); printf("\nDirectory look-up of /boot/directory1\n"); dumpDir("/boot/directory1"); h = yaffs_open("/boot/slink",O_RDWR,0); printf("file length is %d\n",yaffs_lseek(h,0,SEEK_END)); yaffs_close(h); yaffs_unlink("/boot/slink"); printf("\nDirectory look-up of /boot\n"); dumpDir("/boot"); // Check chmod yaffs_stat("/boot/yyfile",&ystat); temp_mode = ystat.st_mode; yaffs_chmod("/boot/yyfile",0x55555); printf("\nDirectory look-up of /boot\n"); dumpDir("/boot"); yaffs_chmod("/boot/yyfile",temp_mode); printf("\nDirectory look-up of /boot\n"); dumpDir("/boot"); // Permission checks... PermissionsCheck("/boot/yyfile",0, O_WRONLY,0); PermissionsCheck("/boot/yyfile",0, O_RDONLY,0); PermissionsCheck("/boot/yyfile",0, O_RDWR,0); PermissionsCheck("/boot/yyfile",S_IREAD, O_WRONLY,0); PermissionsCheck("/boot/yyfile",S_IREAD, O_RDONLY,1); PermissionsCheck("/boot/yyfile",S_IREAD, O_RDWR,0); PermissionsCheck("/boot/yyfile",S_IWRITE, O_WRONLY,1); PermissionsCheck("/boot/yyfile",S_IWRITE, O_RDONLY,0); PermissionsCheck("/boot/yyfile",S_IWRITE, O_RDWR,0); PermissionsCheck("/boot/yyfile",S_IREAD | S_IWRITE, O_WRONLY,1); PermissionsCheck("/boot/yyfile",S_IREAD | S_IWRITE, O_RDONLY,1); PermissionsCheck("/boot/yyfile",S_IREAD | S_IWRITE, O_RDWR,1); yaffs_chmod("/boot/yyfile",temp_mode); //create a zero-length file and unlink it (test for scan bug) h = yaffs_open("/boot/zlf",O_CREAT | O_TRUNC | O_RDWR,0); yaffs_close(h); yaffs_unlink("/boot/zlf"); yaffs_DumpDevStruct("/boot"); fill_disk_and_delete("/boot",20,20); yaffs_DumpDevStruct("/boot"); fill_files("/boot",1,10000,0); fill_files("/boot",1,10000,5000); fill_files("/boot",2,10000,0); fill_files("/boot",2,10000,5000); leave_unlinked_file("/data",20000,0); leave_unlinked_file("/data",20000,5000); leave_unlinked_file("/data",20000,5000); leave_unlinked_file("/data",20000,5000); leave_unlinked_file("/data",20000,5000); leave_unlinked_file("/data",20000,5000); yaffs_DumpDevStruct("/boot"); yaffs_DumpDevStruct("/data"); return 0;}int directory_rename_test(void){ int r; yaffs_StartUp(); yaffs_mount("/ram"); yaffs_mkdir("/ram/a",0); yaffs_mkdir("/ram/a/b",0); yaffs_mkdir("/ram/c",0); printf("\nDirectory look-up of /ram\n"); dumpDir("/ram"); dumpDir("/ram/a"); dumpDir("/ram/a/b"); printf("Do rename (should fail)\n"); r = yaffs_rename("/ram/a","/ram/a/b/d"); printf("\nDirectory look-up of /ram\n"); dumpDir("/ram"); dumpDir("/ram/a"); dumpDir("/ram/a/b"); printf("Do rename (should not fail)\n"); r = yaffs_rename("/ram/c","/ram/a/b/d"); printf("\nDirectory look-up of /ram\n"); dumpDir("/ram"); dumpDir("/ram/a"); dumpDir("/ram/a/b"); return 1; }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 is buypassed // resulting in erroneous reads after writes. 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;}int free_space_check(void){ int f; yaffs_StartUp(); yaffs_mount("/boot"); fill_disk("/boot/",2); f = yaffs_freespace("/boot"); printf("%d free when disk full\n",f); return 1;}
int rw_test()
{
int i;
int h;
int n;
int result;
int f;
int written = 0;
char str[50];
char wrbuf[700];
char rdbuf[700];
char * path = "/ram";
yaffs_StartUp();
yaffs_mount(path);
n = 0;
do{
sprintf(str,"%s/%d",path, n);
h = yaffs_open(str, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
if (h == -1)
{
printf("fail to create file %s", str);
break;
}
printf("writing file %s handle %d ",str, h);
for (i=0; i<700; i++)
{
wrbuf[i] = (__u8 )(n + i);
}
if (yaffs_write(h, wrbuf, 700) != 700)
{
printf("fail to write file %s", str);
break;
}
if (yaffs_close(h) == -1)
{
printf("fail to close file %s", str);
break;
}
written += 700;
f = yaffs_open(str, O_RDONLY,0);
if (yaffs_read(f, rdbuf, 700) != 700)
{
break;
}
if (memcmp(rdbuf, wrbuf, 700) != 0)
{
break;
}
if (yaffs_close(h) == -1)
{
printf("fail to close file %s", str);
break;
}
n++;
}while(1);
return 0;
}
int create_rw_delete_test()
{
#define FILE_SIZE 900
int i, j;
int h;
unsigned short n, m;
int result;
int f;
int written = 0;
char str[50];
char wrbuf[FILE_SIZE];
char rdbuf[FILE_SIZE];
char * path = "/ram";
yaffs_StartUp();
yaffs_mount(path);
n = 0;
m = 0;
do{
for (j=0; j<60; j++)
{
sprintf(str,"%s/j", path, j);
h = yaffs_open(str, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
if (h == -1)
{
break;
}
for (i=0; i<FILE_SIZE; i++)
{
wrbuf[i] = (__u8 )(n + j + i);
}
if (yaffs_write(h, wrbuf, FILE_SIZE) != FILE_SIZE)
{
break;
}
if (yaffs_close(h) == -1)
{
break;
}
//written += FILE_SIZE;
f = yaffs_open(str, O_RDONLY,0);
if (yaffs_read(f, rdbuf, FILE_SIZE) != FILE_SIZE)
{
break;
}
if (memcmp(rdbuf, wrbuf, FILE_SIZE) != 0)
{
break;
}
//f = yaffs_unlink(str); //读完后删除
if (yaffs_close(h) == -1)
{
printf("fail to close file %s", str);
break;
}
}
n++;
if (n == 0)
m++;
//printf("\n------------------------------------\n", (int)m*0x10000+n);
printf("\ndone %d time\n", (int)m*0x10000+n);
}while(1);
return 0;
}
int main(int argc, char *argv[]){ //return long_test(argc,argv); //return cache_read_test(); //return cache_bypass_bug_test(); //return free_space_check();
//return rw_test();
return create_rw_delete_test();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -