yaffs_DIR *d;
yaffs_dirent *de;
struct yaffs_stat s;
- char str[100];
+ char str[1000];
d = yaffs_opendir(dname);
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;
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);
+ if(1 || i == 0 || i == 5)
+ 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(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);
}
- sprintf(b,"%s/%d",a,i);
-
- write_200k_file(b,"","");
+ yaffs_truncate(h0,0);
+ yaffs_close(h0);
+ yaffs_close(h1);
- printf("######## Iteration %d End\n",i);
+ printf("########### %d\n",i);
dump_directory_tree(mountpt);
-
- yaffs_unmount(mountpt);
+
+ if(1 || i == 4 || i == nmounts -1)
+ yaffs_unmount(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);
printf("deleting file %s\n",a);
yaffs_unlink(a);
}
- printf("\n\n\ done \n\n");
+ printf("\n\n done \n\n");
}
//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);
// 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"
#include "yaffs_fileem2k.h"
#include "yaffs_packedtags2.h"
-
+//#define SIMULATE_FAILURES
typedef struct
{
int pos;
int h;
+ T(YAFFS_TRACE_MTD,(TSTR("write chunk %d data %x tags %x" TENDSTR),chunkInNAND,(unsigned)data, (unsigned)tags));
+
CheckInit();
int pos;
int h;
+ T(YAFFS_TRACE_MTD,(TSTR("read chunk %d data %x tags %x" TENDSTR),chunkInNAND,(unsigned)data, (unsigned)tags));
+
CheckInit();
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;
fail320 = 0;
}
}
+#endif
if(nread != sizeof(pt)) return YAFFS_FAIL;
}
}
#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;
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);