* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
- *
*/
-
-
#include <stdio.h>
#include <string.h>
#include <unistd.h>
}
+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);
+
+}
+void case_insensitive_test(const char *mountpt)
+{
+ char fn[100];
+ char fn2[100];
+ char buffer[100];
+ int ret;
+ struct yaffs_stat s;
+ int h;
+ char *x;
+
+ yaffs_trace_mask = 0;
+
+ yaffs_start_up();
+
+ yaffs_mount(mountpt);
+ dump_directory_tree(mountpt);
+
+ sprintf(fn,"%s/Abc.Txt",mountpt);
+ yaffs_unlink(fn);
+ h = yaffs_open(fn, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
+
+ ret = yaffs_write(h,fn, strlen(fn) + 1);
+
+ ret = yaffs_close(h);
+
+ dump_directory_tree(mountpt);
+
+
+ strcpy(fn2, fn);
+ x = fn2;
+ while(*x) {
+ *x = toupper(*x);
+ x++;
+ }
+
+ h = yaffs_open(fn2, O_RDONLY, 0);
+ ret = yaffs_read(h, buffer, 100);
+
+ if (ret != strlen(fn) + 1 || memcmp(buffer, fn, ret)){
+ printf("wrong file read\n");
+ } else {
+ printf("File %s is the same as file %s\n", fn, fn2);
+ }
+
+ ret = yaffs_stat(fn2, &s);
+
+ printf("renaming\n");
+
+ ret = yaffs_rename(fn, fn2);
+ dump_directory_tree(mountpt);
+
+}
+
+void start_twice(const char *mountpt)
+{
+ printf("About to do first yaffs_start\n");
+ yaffs_start_up();
+ printf("started\n");
+ printf("First mount returns %d\n", yaffs_mount(mountpt));
+ printf("About to do second yaffs_start\n");
+ yaffs_start_up();
+ printf("started\n");
+ printf("Second mount returns %d\n", yaffs_mount(mountpt));
+}
#define N_WRITES 2000
#define STRIDE 2000
check_type = "buffer";
set_buffer(i/STRIDE);
}
- printf("%s checking %lld\n", check_type, offset);
+ //printf("%s checking %lld\n", check_type, offset);
pos = yaffs_lseek(h, offset, SEEK_SET);
if(pos != offset) {
printf("mismatched seek pos %lld offset %lld\n",
void large_file_test(const char *mountpt)
{
+ char xx_buffer[1000];
+ int i;
int handle;
char fullname[100];
+ loff_t file_end;
yaffs_trace_mask = 0;
dumpDir(mountpt);
sprintf(fullname, "%s/%s", mountpt, "big-test-file");
+
+ handle = yaffs_open(fullname, O_RDONLY, 0);
+
handle = yaffs_open(fullname, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
if(handle < 0) {
write_big_sparse_file(handle);
verify_big_sparse_file(handle);
+ yaffs_close(handle);
+
printf("Job done\n");
yaffs_unmount(mountpt);
+ yaffs_mount(mountpt);
+ printf("mounted again\n");
+ dumpDir(mountpt);
+ handle = yaffs_open(fullname, O_RDONLY, 0);
+ verify_big_sparse_file(handle);
+ yaffs_unmount(mountpt);
+
+
+ yaffs_mount_common(mountpt, 0, 1);
+ printf("mounted with no checkpt\n");
+ dumpDir(mountpt);
+ handle = yaffs_open(fullname, O_RDONLY, 0);
+ verify_big_sparse_file(handle);
+ yaffs_unmount(mountpt);
+
+ /* Check resize by adding to the end, resizing back and verifying. */
+ yaffs_mount_common(mountpt, 0, 1);
+ printf("checking resize\n");
+ dumpDir(mountpt);
+ handle = yaffs_open(fullname, O_RDWR, 0);
+
+ file_end = yaffs_lseek(handle, 0, SEEK_END);
+ printf("file_end %lld\n", file_end);
+ for(i = 0; i < 10000; i++)
+ yaffs_write(handle, xx_buffer, sizeof(xx_buffer));
+ yaffs_ftruncate(handle, file_end);
+
+ verify_big_sparse_file(handle);
+ yaffs_unmount(mountpt);
+
+}
+
+
+void readdir_test(const char *mountpt)
+{
+ char xx_buffer[1000];
+ int i;
+ int handle;
+ char fullname[100];
+
+ yaffs_DIR *dirs[100];
+
+
+ yaffs_trace_mask = 0;
+
+ yaffs_start_up();
+
+ yaffs_mount(mountpt);
+
+ for(i = 0; i < 100; i++) {
+ dirs[i] = yaffs_opendir(mountpt);
+ printf("%2d %p,", i, dirs[i]);
+ }
+
+ printf("\n");
+
+ for(i = 0; i < 100; i++) {
+ if(dirs[i])
+ yaffs_closedir(dirs[i]);
+ }
+
+
+ for(i = 0; i < 100; i++) {
+ dirs[i] = yaffs_opendir(mountpt);
+ printf("%2d %p,", i, dirs[i]);
+ }
+
}
//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");
+
+ //max_files_test("/yaffs2");
+
+ //start_twice("/yaffs2");
- large_file_test("/yaffs2");
+ //large_file_test("/yaffs2");
+ readdir_test("/yaffs2");
//basic_utime_test("/yaffs2");
+ //case_insensitive_test("/yaffs2");
return 0;