}
}
+
+void fill_files(char *path,int flags, int maxIterations,int siz)
+{
+ int i;
+ int j;
+ char str[50];
+ int h;
+
+ i = 0;
+
+ do{
+ sprintf(str,"%s/%d",path,i);
+ h = yaffs_open(str, O_CREAT | O_TRUNC | O_RDWR,S_IREAD | S_IWRITE);
+ yaffs_close(h);
+
+ if(h >= 0)
+ {
+ for(j = 0; j < siz; j++)
+ {
+ yaffs_write(h,str,1);
+ }
+ }
+
+ if( flags & 1)
+ {
+ yaffs_unlink(str);
+ }
+ i++;
+ } while(h >= 0 && i < maxIterations);
+
+ if(flags & 2)
+ {
+ i = 0;
+ do{
+ sprintf(str,"%s/%d",path,i);
+ printf("unlink %s\n",str);
+ i++;
+ } while(yaffs_unlink(str) >= 0);
+ }
+}
+
+void leave_unlinked_file(char *path,int maxIterations,int siz)
+{
+ int i;
+ char str[50];
+ int h;
+
+ i = 0;
+
+ do{
+ sprintf(str,"%s/%d",path,i);
+ printf("create %s\n",str);
+ h = yaffs_open(str, O_CREAT | O_TRUNC | O_RDWR,S_IREAD | S_IWRITE);
+ if(h >= 0)
+ {
+ yaffs_unlink(str);
+ }
+ i++;
+ } while(h < 0 && i < maxIterations);
+
+ if(h >= 0)
+ {
+ for(i = 0; i < siz; i++)
+ {
+ yaffs_write(h,str,1);
+ }
+ }
+
+ printf("Leaving file %s open\n",str);
+
+}
+
void dumpDirFollow(const char *dname)
{
yaffs_DIR *d;
yaffs_StartUp();
yaffs_mount("/boot");
+ yaffs_mount("/data");
+ yaffs_mount("/flash");
+ yaffs_mount("/ram");
printf("\nDirectory look-up of /boot\n");
dumpDir("/boot");
+ printf("\nDirectory look-up of /data\n");
+ dumpDir("/data");
+ printf("\nDirectory look-up of /flash\n");
+ dumpDir("/flash");
+
+ //leave_unlinked_file("/flash",20000,0);
+ //leave_unlinked_file("/data",20000,0);
+
+ leave_unlinked_file("/ram",20,0);
+
f = yaffs_open("/boot/b1", O_RDONLY,0);
printf("open /boot/b1 readonly, f=%d\n",f);
- f = yaffs_open("/boot/b1", O_CREAT,0);
+ f = yaffs_open("/boot/b1", O_CREAT,S_IREAD | S_IWRITE);
printf("open /boot/b1 O_CREAT, f=%d\n",f);
r = yaffs_write(f,"world",3);
printf("write %d attempted to write to a writeable file\n",r);
- r= yaffs_lseek(f,SEEK_END,0);
+ 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,SEEK_SET,0);
+ r= yaffs_lseek(f,0,SEEK_SET);
printf("seek set %d\n",r);
memset(buffer,0,20);
r = yaffs_read(f,buffer,10);
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);
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;