}
+void max_files_test(const char *mountpt)
+{
+ char fn[100];
+ char sn[100];
+ char hn[100];
+ int result;
+ int h;
+ int i;
+
+ yaffs_trace_mask = 0;
+
+ yaffs_start_up();
+
+ yaffs_mount(mountpt);
+
+ for(i = 0; i < 5000; i++) {
+ sprintf(fn,"%s/file%d", mountpt, i);
+ yaffs_unlink(fn);
+ h = yaffs_open(fn,O_CREAT| O_RDWR, S_IREAD | S_IWRITE);
+ if(h < 0)
+ printf("File %s not created\n", fn);
+ yaffs_write(h,fn,100);
+ result = yaffs_close(h);
+ }
+ for(i = 0; i < 5; i++){
+ sprintf(fn,"%s/file%d",mountpt, i);
+ yaffs_unlink(fn);
+ }
+
+ for(i = 1000; i < 1010; i++){
+ sprintf(fn,"%s/file%d",mountpt, i);
+ h = yaffs_open(fn,O_CREAT| O_RDWR, S_IREAD | S_IWRITE);
+ yaffs_write(h,fn,100);
+ if(h < 0)
+ printf("File %s not created\n", fn);
+ result = yaffs_close(h);
+ }
+
+ h =yaffs_open(hn,O_RDWR,0);
+
+}
+
int random_seed;
int simulate_power_failure;
//checkpoint_upgrade_test("/flash/flash",20);
//small_overwrite_test("/flash/flash",1000);
//checkpoint_fill_test("/flash/flash",20);
- // random_small_file_test("/flash/flash",10000);
+ //random_small_file_test("/flash/flash",10000);
// huge_array_test("/flash/flash",10);
//test_flash_traffic("yaffs2");
// link_follow_test("/yaffs2");
- basic_utime_test("/yaffs2");
+ //basic_utime_test("/yaffs2");
+
+ max_files_test("/yaffs2");
+
return 0;
}
+static int yaffsfs_TooManyObjects(struct yaffs_dev *dev)
+{
+ int current_objects = dev->n_obj - dev->n_deleted_files;
+ if(dev->param.max_objects && current_objects > dev->param.max_objects)
+ return 1;
+ else
+ return 0;
+}
int yaffs_open_sharing(const YCHAR *path, int oflag, int mode, int sharing)
{
if(dir->my_dev->read_only){
yaffsfs_SetError(-EROFS);
errorReported = 1;
+ } else if(yaffsfs_TooManyObjects(dir->my_dev)) {
+ yaffsfs_SetError(-ENFILE);
+ errorReported = 1;
} else
obj = yaffs_create_file(dir,name,mode,0,0);
yaffsfs_SetError(-ELOOP);
else if(!parent)
yaffsfs_SetError(-ENOENT);
+ else if(yaffsfs_TooManyObjects(parent->my_dev))
+ yaffsfs_SetError(-ENFILE);
else if(strnlen(name,5) == 0){
/* Trying to make the root itself */
yaffsfs_SetError(-EEXIST);
yaffsfs_SetError(-ELOOP);
else if( !parent || strnlen(name,5) < 1)
yaffsfs_SetError(-ENOENT);
+ else if(yaffsfs_TooManyObjects(parent->my_dev))
+ yaffsfs_SetError(-ENFILE);
else if(parent->my_dev->read_only)
yaffsfs_SetError(-EROFS);
else if(parent){
yaffsfs_SetError(-ENOENT);
else if(obj->my_dev->read_only)
yaffsfs_SetError(-EROFS);
+ else if(yaffsfs_TooManyObjects(obj->my_dev))
+ yaffsfs_SetError(-ENFILE);
else if(lnk)
yaffsfs_SetError(-EEXIST);
else if(lnk_dir->my_dev != obj->my_dev)
int always_check_erased; /* Force chunk erased check always on */
int disable_summary;
+
+ int max_objects; /*
+ * Set to limit the number of objects created.
+ * 0 = no limit.
+ */
};
struct yaffs_dev {