*** empty log message ***
[yaffs/.git] / yaffsdev.c
index afb9354bc17537a5d51263e1f1d8cb1ccf4aebad..c44715b32f9d062b2bf69578ef37a0c8666d0a10 100644 (file)
 
 #include <stdio.h>
 #include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
 
 
+
+unsigned yaffs_traceMask = 0xFFFFFFFF;
+
 yaffs_Device device;
 
 
@@ -129,6 +134,110 @@ void TestTimeasasas(yaffs_Device *dev)
        
                
 
+}
+
+void TestTimeBigDeletes(yaffs_Device *dev)
+{
+       yaffs_Object *f;
+       yaffs_Object *sl;
+       yaffs_Object *lnf;
+       
+       yaffs_Object *hl1;
+       yaffs_Object *hl2;
+       yaffs_Object *hl3;
+       yaffs_Object *d, *df;
+       
+       int x;
+       int i;
+       int b;
+       char data[200];
+       
+       char * alias;
+       int written;
+       
+       
+       printf("Exisiting objects\n");
+       yaffs_ApplyToDirectoryChildren(yaffs_Root(dev),yaffs_DumpObject);
+       printf("Exisiting objects in lost+found\n");
+       lnf = yaffs_FindObjectByName(yaffs_Root(dev),YAFFS_LOSTNFOUND_NAME);
+       yaffs_ApplyToDirectoryChildren(lnf,yaffs_DumpObject);
+
+       printf("Start\n");
+       
+       
+
+       f = yaffs_FindObjectByName(yaffs_Root(dev),"Name1");
+       if(f)
+       {
+               printf("Found\n");
+       }
+       else
+       {
+               f = yaffs_MknodFile(yaffs_Root(dev),"Name1",0,0,0);
+               printf("Created\n");
+       }
+       
+       for(i = 0; i < 100000; i+=20)
+       { 
+       
+               b++;
+               if(b & 1)
+                       written = yaffs_WriteDataToFile(f,testStr,i,strlen(testStr));
+               else
+                       written = yaffs_WriteDataToFile(f,testStr2,i,strlen(testStr2));
+       }
+       
+       yaffs_FlushFile(f);
+       yaffs_DeleteFile(f);
+
+       f = yaffs_FindObjectByName(yaffs_Root(dev),"Name1");
+       if(f)
+       {
+               printf("Found\n");
+       }
+       else
+       {
+               f = yaffs_MknodFile(yaffs_Root(dev),"Name1",0,0,0);
+               printf("Created\n");
+       }
+       
+       for(i = 0; i < 100000; i+=20)
+       { 
+       
+               b++;
+               if(b & 1)
+                       written = yaffs_WriteDataToFile(f,testStr,i,strlen(testStr));
+               else
+                       written = yaffs_WriteDataToFile(f,testStr2,i,strlen(testStr2));
+       }
+       
+       yaffs_FlushFile(f);
+       yaffs_DeleteFile(f);
+
+       f = yaffs_FindObjectByName(yaffs_Root(dev),"Name1");
+       if(f)
+       {
+               printf("Found\n");
+       }
+       else
+       {
+               f = yaffs_MknodFile(yaffs_Root(dev),"Name1",0,0,0);
+               printf("Created\n");
+       }
+       
+       for(i = 0; i < 100000; i+=20)
+       { 
+       
+               b++;
+               if(b & 1)
+                       written = yaffs_WriteDataToFile(f,testStr,i,strlen(testStr));
+               else
+                       written = yaffs_WriteDataToFile(f,testStr2,i,strlen(testStr2));
+       }
+       
+       yaffs_FlushFile(f);
+       yaffs_DeleteFile(f);
+       
 }
 
 void TestTime(yaffs_Device *dev)
@@ -209,15 +318,60 @@ void TestTime(yaffs_Device *dev)
        
        x = yaffs_RenameObject(yaffs_Root(dev),"Name1",NULL,"Rename");
        
-       for(i = 0; i < 100000; i+=20)
+// Write a file with overwrite, then read it back and save outside yaffs
+// This is to test that write caching works.
+
+       for(i = 0; i < 100; i++)
        { 
+               unsigned char x[500];
        
-               b++;
-               if(b & 1)
-                       written = yaffs_WriteDataToFile(f,testStr,i,strlen(testStr));
-               else
-                       written = yaffs_WriteDataToFile(f,testStr2,i,strlen(testStr2));
+               memset(x,i,500);
+               
+               written = yaffs_WriteDataToFile(f,x,i*500,500);         
+       }
+
+       for(i = 0; i < 100; i++)
+       { 
+               unsigned char x;
+       
+               x = i+5;
+               
+               written = yaffs_WriteDataToFile(f,&x,i*500 + 2,1);              
        }
+       
+       
+       {
+               int h;
+               
+               h = open("bork",O_RDWR | O_CREAT | O_TRUNC,0666);
+               for(i = 0; i < 100; i++)
+               { 
+                       unsigned char x[500];
+       
+                       yaffs_ReadDataFromFile(f,x,i*500,500);
+                       write(h,x,500);
+               }
+               close(h);
+               
+               
+       }
+       
+// Big write to fill disk
+
+       written = 1;
+       for(i = 0; i < 1000000 && written > 0; i++)
+       { 
+               unsigned char x[500];
+       
+               memset(x,i,500);
+               
+               written = yaffs_WriteDataToFile(f,x,i*500,500);         
+       }
+       if(written <= 0)
+       {
+               printf("YAFFS full\n");
+       }
+       
        // some short reads
        for(i = 1000; i < 50000; i+=2)
        { 
@@ -294,6 +448,8 @@ void TestTime(yaffs_Device *dev)
 
        printf("Unlink file: %d\n",yaffs_Unlink(yaffs_Root(dev),"Rename"));
        
+       yaffs_DeleteFile(f);
+       
        yaffs_ApplyToDirectoryChildren(yaffs_Root(dev),yaffs_DumpObject);
        
        // Create a directory and play with it
@@ -481,7 +637,7 @@ int main(int argc,char *argv[])
        int nBlocks;
        
 #if YAFFS_FILEEM       
-       nBlocks =(32 * 1024 * 1024) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK) ;
+       nBlocks =(4 * 1024 * 1024) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK) ;
        device.writeChunkToNAND = yaffs_FEWriteChunkToNAND;
        device.readChunkFromNAND = yaffs_FEReadChunkFromNAND;
        device.eraseBlockInNAND = yaffs_FEEraseBlockInNAND;