X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=yaffsdev.c;h=ba1353f823a53d796614eb9a62beb52fb0e019e5;hb=0c0639ff1c8a2d8fe5b03ad0284bb400ec78e7cb;hp=0f40974d531c5505cdc68d2692e91b2d0bbad69e;hpb=aa39fbf7616e8b26833a09cb64c6a40859494599;p=yaffs%2F.git diff --git a/yaffsdev.c b/yaffsdev.c index 0f40974..ba1353f 100644 --- a/yaffsdev.c +++ b/yaffsdev.c @@ -131,7 +131,7 @@ void TestTimeasasas(yaffs_Device *dev) } -void TestTime(yaffs_Device *dev) +void TestTimeBigDeletes(yaffs_Device *dev) { yaffs_Object *f; yaffs_Object *sl; @@ -160,7 +160,30 @@ void TestTime(yaffs_Device *dev) 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) @@ -173,8 +196,29 @@ void TestTime(yaffs_Device *dev) printf("Created\n"); } + for(i = 0; i < 100000; i+=20) + { - x = yaffs_RenameObject(yaffs_Root(dev),"Name1",NULL,"Rename"); + 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) { @@ -186,6 +230,108 @@ void TestTime(yaffs_Device *dev) written = yaffs_WriteDataToFile(f,testStr2,i,strlen(testStr2)); } + yaffs_FlushFile(f); + yaffs_DeleteFile(f); + +} + +void TestTime(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"); + + + // Test the problem of: + // Create file + // Delete file + // Create file with same name + // Delete file <== crash + + 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"); + } + yaffs_Unlink(yaffs_Root(dev),"Name1"); + + + 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"); + } + yaffs_Unlink(yaffs_Root(dev),"Name1"); + + + + // Other tests + + 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"); + } + + + x = yaffs_RenameObject(yaffs_Root(dev),"Name1",NULL,"Rename"); + + for(i = 0; i < 100000; i+=64) + { + + b++; + if(b & 1) + written = yaffs_WriteDataToFile(f,testStr,i,64); + else + written = yaffs_WriteDataToFile(f,testStr2,i,64); + + written = yaffs_WriteDataToFile(f,testStr2,1,20); + + } + // some short reads + for(i = 1000; i < 50000; i+=2) + { + yaffs_ReadDataFromFile(f,data,i,20); + } + + yaffs_ReadDataFromFile(f,data,1000,50); data[50] = 0; @@ -255,14 +401,19 @@ 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 - printf("Create directory and play with it\n"); - - d = yaffs_MknodDirectory(yaffs_Root(dev),"direct",0,0,0); + printf("Find or Create directory and play with it\n"); + d = yaffs_FindObjectByName(yaffs_Root(dev),"direct"); + if(!d) + { + d = yaffs_MknodDirectory(yaffs_Root(dev),"direct",0,0,0); + } yaffs_ApplyToDirectoryChildren(yaffs_Root(dev),yaffs_DumpObject); yaffs_ApplyToDirectoryChildren(d,yaffs_DumpObject); @@ -318,7 +469,10 @@ void TestTime(yaffs_Device *dev) yaffs_ApplyToDirectoryChildren(yaffs_Root(dev),yaffs_DumpObject); f = yaffs_MknodFile(yaffs_Root(dev),"pfile",0,0,0); - yaffs_WriteDataToFile(f,testStr,0,strlen(testStr)); + if(f) + { + yaffs_WriteDataToFile(f,testStr,0,strlen(testStr)); + } yaffs_Link(yaffs_Root(dev),"phl4",f); } @@ -433,8 +587,10 @@ void TestTimeTnodeFocussed(yaffs_Device *dev) int main(int argc,char *argv[]) { + int nBlocks; + #if YAFFS_FILEEM - device.nBlocks = (64 * 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; @@ -442,7 +598,7 @@ int main(int argc,char *argv[]) printf("Testing on file emulation\n"); #else - device.nBlocks = (2 * 1024 * 1024) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK); + nBlocks = (2 * 1024 * 1024) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK); device.writeChunkToNAND = nandemul_WriteChunkToNAND; device.readChunkFromNAND = nandemul_ReadChunkFromNAND; device.eraseBlockInNAND = nandemul_EraseBlockInNAND; @@ -451,8 +607,13 @@ int main(int argc,char *argv[]) printf("Testing on RAM emulation\n"); #endif +#ifdef YAFFS_START + device.startBlock = YAFFS_START; // Don't use block 0 + device.endBlock = YAFFS_END; +#else device.startBlock = 1; // Don't use block 0 - device.endBlock = device.nBlocks - 1; + device.endBlock = nBlocks; +#endif yaffs_GutsInitialise(&device); @@ -460,5 +621,8 @@ int main(int argc,char *argv[]) TestTime(&device); + printf("Cache hits %d\n",device.cacheHits); + printf("Retired blocks %d\n",device.nRetiredBlocks); + exit(0); }