changeset 151:583760db2c69

Add more test stuff
author charles <charles>
date Tue, 07 Nov 2006 23:37:43 +0000
parents 62e545f21b36
children 043b849c6ea3
files direct/Makefile direct/dtest.c direct/yaffs_fileem2k.c direct/yaffsfs.c direct/yaffsfs.h
diffstat 5 files changed, 54 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/direct/Makefile
+++ b/direct/Makefile
@@ -10,11 +10,13 @@
 #
 # NB Warning this Makefile does not include header dependencies.
 #
-# $Id: Makefile,v 1.12 2006-10-03 10:13:03 charles Exp $
+# $Id: Makefile,v 1.13 2006-11-07 23:37:43 charles Exp $
 
 #EXTRA_COMPILE_FLAGS = -DYAFFS_IGNORE_TAGS_ECC
 
 CFLAGS =    -Wall -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM -DCONFIG_YAFFS_YAFFS2 -g $(EXTRA_COMPILE_FLAGS) -DNO_Y_INLINE
+CFLAGS+=    -fstack-check -O0
+
 #CFLAGS+=   -Wshadow -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-declarations
 #CFLAGS+=   -Wmissing-prototypes -Wredundant-decls -Wnested-externs -Winline
 
--- a/direct/dtest.c
+++ b/direct/dtest.c
@@ -532,7 +532,7 @@ void dump_directory_tree_worker(const ch
 	yaffs_DIR *d;
 	yaffs_dirent *de;
 	struct yaffs_stat s;
-	char str[100];
+	char str[1000];
 			
 	d = yaffs_opendir(dname);
 	
@@ -548,7 +548,7 @@ void dump_directory_tree_worker(const ch
 			
 			yaffs_lstat(str,&s);
 			
-			printf("%s length %d mode %X ",str,(int)s.st_size,s.st_mode);
+			printf("%s inode %d obj %x length %d mode %X ",str,s.st_ino,de->d_dont_use,(int)s.st_size,s.st_mode);
 			switch(s.st_mode & S_IFMT)
 			{
 				case S_IFREG: printf("data file"); break;
@@ -1735,29 +1735,42 @@ void multi_mount_test(const char *mountp
 	int j;
 	
 	sprintf(a,"%s/a",mountpt);
-	
 
-	
-	
 	yaffs_StartUp();
 	
 	for(i = 0; i < nmounts; i++){
+		int h0;
+		int h1;
+		static char xx[1000];
+		
 		printf("############### Iteration %d   Start\n",i);
-		yaffs_mount(mountpt);
-		dump_directory_tree(mountpt);
-		yaffs_mkdir(a,0);
-		for(j = 0; j < i; j++){
-			sprintf(b,"%s/%d",a,j);
-			verify_200k_file(b);
-		}
-		sprintf(b,"%s/%d",a,i);
+		if(1 || i == 0 || i == 5) 
+			yaffs_mount(mountpt);
 
-		write_200k_file(b,"","");
-		
-		printf("######## Iteration %d   End\n",i);
 		dump_directory_tree(mountpt);
 		
-		yaffs_unmount(mountpt);
+		
+		yaffs_mkdir(a,0);
+		
+		sprintf(xx,"%s/0",a);
+		h0 = yaffs_open(xx, O_RDWR | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
+		
+		sprintf(xx,"%s/1",a);
+		h1 = yaffs_open(xx, O_RDWR | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
+		
+		for(j = 0; j < 200; j++){
+		   yaffs_write(h0,xx,1000);
+		   yaffs_write(h1,xx,1000);
+		}
+		yaffs_truncate(h0,0);
+		yaffs_close(h0);
+		yaffs_close(h1);
+		
+		printf("########### %d\n",i);
+		dump_directory_tree(mountpt);
+
+		if(1 || i == 4 || i == nmounts -1)
+			yaffs_unmount(mountpt);
 	}
 }
 
@@ -1934,7 +1947,7 @@ void huge_array_test(const char *mountpt
 			verify_file_of_size(a,10000000);
 		}
 		
-		printf("\n\n\ verification/deletion\n\n");
+		printf("\n\n verification/deletion\n\n");
 		
 		for(i = 0; i < fnum; i++){
 			sprintf(a,"%s/file%d",mountpt,i);
@@ -1943,7 +1956,7 @@ void huge_array_test(const char *mountpt
 			printf("deleting file %s\n",a);
 			yaffs_unlink(a);
 		}
-		printf("\n\n\ done \n\n");
+		printf("\n\n done \n\n");
 			
 		   
 	}
@@ -1967,10 +1980,10 @@ int main(int argc, char *argv[])
 	 
 	 //scan_pattern_test("/flash",10000,10);
 	//short_scan_test("/flash/flash",40000,200);
-	 //multi_mount_test("/flash/flash",20);
+	  multi_mount_test("/flash/flash",20);
 	 //checkpoint_fill_test("/flash/flash",20);
 	 //checkpoint_upgrade_test("/flash/flash",20);
-	  huge_array_test("/flash/flash",10);
+	 // huge_array_test("/flash/flash",10);
 
 
 
--- a/direct/yaffs_fileem2k.c
+++ b/direct/yaffs_fileem2k.c
@@ -15,7 +15,7 @@
 // This provides a YAFFS nand emulation on a file for emulating 2kB pages.
 // THis is only intended as test code to test persistence etc.
 
-const char *yaffs_flashif_c_version = "$Id: yaffs_fileem2k.c,v 1.7 2006-10-13 08:52:49 charles Exp $";
+const char *yaffs_flashif_c_version = "$Id: yaffs_fileem2k.c,v 1.8 2006-11-07 23:37:43 charles Exp $";
 
 
 #include "yportenv.h"
@@ -32,7 +32,7 @@ const char *yaffs_flashif_c_version = "$
 #include "yaffs_fileem2k.h"
 #include "yaffs_packedtags2.h"
 
-
+//#define SIMULATE_FAILURES
 
 typedef struct 
 {
@@ -145,6 +145,8 @@ int yflash_WriteChunkWithTagsToNAND(yaff
 	int pos;
 	int h;
 	
+	T(YAFFS_TRACE_MTD,(TSTR("write chunk %d data %x tags %x" TENDSTR),chunkInNAND,(unsigned)data, (unsigned)tags));
+
 	CheckInit();
 	
 	
@@ -213,6 +215,8 @@ int yflash_ReadChunkWithTagsFromNAND(yaf
 	int pos;
 	int h;
 	
+	T(YAFFS_TRACE_MTD,(TSTR("read chunk %d data %x tags %x" TENDSTR),chunkInNAND,(unsigned)data, (unsigned)tags));
+	
 	CheckInit();
 	
 	
@@ -252,6 +256,7 @@ int yflash_ReadChunkWithTagsFromNAND(yaf
 			yaffs_PackedTags2 pt;
 			nread= read(h,&pt,sizeof(pt));
 			yaffs_UnpackTags2(tags,&pt);
+#ifdef SIMULATE_FAILURES
 			if((chunkInNAND >> 6) == 300) {
 			    if(fail300 && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR){
 			       tags->eccResult = YAFFS_ECC_RESULT_FIXED;
@@ -265,6 +270,7 @@ int yflash_ReadChunkWithTagsFromNAND(yaf
 			       fail320 = 0;
 			    }
 			}
+#endif
 			if(nread != sizeof(pt)) return YAFFS_FAIL;
 		}
 	}
--- a/direct/yaffsfs.c
+++ b/direct/yaffsfs.c
@@ -25,7 +25,7 @@
 #endif
 
 
-const char *yaffsfs_c_version="$Id: yaffsfs.c,v 1.13 2006-10-03 10:13:03 charles Exp $";
+const char *yaffsfs_c_version="$Id: yaffsfs.c,v 1.14 2006-11-07 23:37:43 charles Exp $";
 
 // configurationList is the list of devices that are supported
 static yaffsfs_DeviceConfiguration *yaffsfs_configurationList;
@@ -1302,8 +1302,14 @@ struct yaffs_dirent *yaffs_readdir(yaffs
 		yaffsfs_SetError(0);
 		if(dsc->nextReturn){
 			dsc->de.d_ino = yaffs_GetEquivalentObject(dsc->nextReturn)->objectId;
+			dsc->de.d_dont_use = (unsigned)dsc->nextReturn;
 			dsc->de.d_off = dsc->offset++;
-			yaffs_GetObjectName(dsc->nextReturn,dsc->de.d_name,NAME_MAX+1);
+			yaffs_GetObjectName(dsc->nextReturn,dsc->de.d_name,NAME_MAX);
+			if(strlen(dsc->de.d_name) == 0)
+			{
+				// this should not happen!
+				strcpy(dsc->de.d_name,"zz");
+			}
 			dsc->de.d_reclen = sizeof(struct yaffs_dirent);
 			retVal = &dsc->de;
 			yaffsfs_DirAdvance(dsc);
--- a/direct/yaffsfs.h
+++ b/direct/yaffsfs.h
@@ -147,6 +147,7 @@ struct yaffs_dirent{
     off_t d_off;                /* offset to this dirent */
     unsigned short d_reclen;    /* length of this d_name */
     char d_name [NAME_MAX+1];   /* file name (null-terminated) */
+    unsigned d_dont_use;	/* debug pointer, not for public consumption */
 };
 
 typedef struct yaffs_dirent yaffs_dirent;