📄 dtest.c
字号:
int r;
char buffer[20];
char str[100];
char name[100];
char name2[100];
int h;
mode_t temp_mode;
struct yaffs_stat ystat;
yaffs_StartUp();
yaffs_mount(path);
printf("\nDirectory look-up of %s\n",path);
dumpDir(path);
//leave_unlinked_file("/flash",20000,0);
//leave_unlinked_file("/data",20000,0);
leave_unlinked_file(path,20,0);
sprintf(name,"%s/%s",path,"b1");
f = yaffs_open(name, O_RDONLY,0);
printf("open %s readonly, f=%d\n",name,f);
f = yaffs_open(name, O_CREAT,S_IREAD | S_IWRITE);
printf("open %s O_CREAT, f=%d\n",name,f);
r = yaffs_write(f,"hello",1);
printf("write %d attempted to write to a read-only file\n",r);
r = yaffs_close(f);
printf("close %d\n",r);
f = yaffs_open(name, O_RDWR,0);
printf("open %s O_RDWR,f=%d\n",name,f);
r = yaffs_write(f,"hello",2);
printf("write %d attempted to write to a writeable file\n",r);
r = yaffs_write(f,"world",3);
printf("write %d attempted to write to a writeable file\n",r);
r= yaffs_lseek(f,0,SEEK_END);
printf("seek end %d\n",r);
memset(buffer,0,20);
r = yaffs_read(f,buffer,10);
printf("read %d \"%s\"\n",r,buffer);
r= yaffs_lseek(f,0,SEEK_SET);
printf("seek set %d\n",r);
memset(buffer,0,20);
r = yaffs_read(f,buffer,10);
printf("read %d \"%s\"\n",r,buffer);
memset(buffer,0,20);
r = yaffs_read(f,buffer,10);
printf("read %d \"%s\"\n",r,buffer);
// Check values reading at end.
// A read past end of file should return 0 for 0 bytes read.
r= yaffs_lseek(f,0,SEEK_END);
r = yaffs_read(f,buffer,10);
printf("read at end returned %d\n",r);
r= yaffs_lseek(f,500,SEEK_END);
r = yaffs_read(f,buffer,10);
printf("read past end returned %d\n",r);
r = yaffs_close(f);
printf("close %d\n",r);
sprintf(name,"%s/%s",path,"yyfile");
copy_in_a_file(name,"xxx");
// Create a file with a long name
sprintf(name,"%s/%s",path,"file with a long name");
copy_in_a_file(name,"xxx");
printf("\nDirectory look-up of %s\n",path);
dumpDir(path);
// Check stat
r = yaffs_stat(name,&ystat);
// Check rename
sprintf(name2,"%s/%s",path,"r1");
r = yaffs_rename(name,name2);
printf("\nDirectory look-up of %s\n",path);
dumpDir(path);
// Check unlink
r = yaffs_unlink(name2);
printf("\nDirectory look-up of %s\n",path);
dumpDir(path);
// Check mkdir
sprintf(name,"%s/%s",path,"directory1");
r = yaffs_mkdir(name,0);
printf("\nDirectory look-up of %s\n",path);
dumpDir(path);
printf("\nDirectory look-up of %s\n",name);
dumpDir(name);
// add a file to the directory
sprintf(name2,"%s/%s",name,"/file in dir with a long name");
copy_in_a_file(name2,"xxx");
printf("\nDirectory look-up of %s\n",path);
dumpDir(path);
printf("\nDirectory look-up of %s\n",name);
dumpDir(name);
// Attempt to delete directory (should fail)
r = yaffs_rmdir(name);
printf("\nDirectory look-up of %s\n",path);
dumpDir(path);
printf("\nDirectory look-up of %s\n",name);
dumpDir(name);
yaffs_unmount(path);
return 0;
// Delete file first, then rmdir should work
r = yaffs_unlink(name2);
r = yaffs_rmdir(name);
printf("\nDirectory look-up of %s\n",path);
dumpDir(path);
printf("\nDirectory look-up of %s\n",name);
dumpDir(name);
#if 0
fill_disk_and_delete(path,20,20);
printf("\nDirectory look-up of %s\n",path);
dumpDir(path);
#endif
yaffs_unmount(path);
return 0;
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 yaffs_scan_test(const char *path)
{
}
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_complex(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;
}
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;
}
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 *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;
}
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 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 main(int argc, char *argv[])
{
//return long_test(argc,argv);
//return cache_read_test();
//return resize_stress_test_no_grow("/flash",2);
scan_pattern_test("/boot",40000,10);
//short_scan_test("/flash",40000,200);
return 0;
long_test_on_path("/flash");
long_test_on_path("/flash");
// cache_bypass_bug_test();
free_space_check();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -