void cmd_yaffs_ls(const char *mountpt, int longlist) { int i; yaffs_DIR *d; struct yaffs_dirent *de; struct yaffs_stat stat; char tempstr[255]; d = yaffs_opendir(mountpt); if (!d) { printf("opendir failed, %s\n", yaffs_error_str()); return; } for (i = 0; (de = yaffs_readdir(d)) != NULL; i++) { if (longlist) { sprintf(tempstr, "%s/%s", mountpt, de->d_name); yaffs_lstat(tempstr, &stat); printf("%-25s\t%7ld", de->d_name, (long)stat.st_size); printf(" %5d %s\n", stat.st_ino, yaffs_file_type_str(&stat)); } else { printf("%s\n", de->d_name); } } yaffs_closedir(d); }
int test_yaffs_lstat_ENAMETOOLONG(void) { int output = -1; int error_code = -1; struct yaffs_stat stat; int file_name_length=1000000; char file_name[file_name_length]; int x=0; for (x=0; x<file_name_length -1; x++){ file_name[x]='a'; } file_name[file_name_length-2]='\0'; output =yaffs_lstat(file_name,&stat); if (output<0){ error_code=yaffs_get_error(); if (abs(error_code)==ENAMETOOLONG){ return 1; } else { print_message("different error than expected\n", 2); return -1; } } else { print_message("lstatted a non-existing file\n", 2); return -1; } }
int huge_directory_test_on_path(char *path) { yaffs_DIR *d; yaffs_dirent *de; struct yaffs_stat s; int f; int i; int total = 0; int lastTotal = 0; char str[100]; yaffs_StartUp(); yaffs_mount(path); // Create a large number of files for(i = 0; i < 2000; i++) { sprintf(str,"%s/%d",path,i); f = yaffs_open(str,O_CREAT,S_IREAD | S_IWRITE); yaffs_close(f); } d = yaffs_opendir(path); i = 0; if (d) { while((de = yaffs_readdir(d)) != NULL) { if (total >lastTotal+100*9*1024||(i & 1023)==0){ printf("files = %d, total = %d\n",i, total); lastTotal = total; } i++; sprintf(str,"%s/%s",path,de->d_name); yaffs_lstat(str,&s); switch(s.st_mode & S_IFMT){ case S_IFREG: //printf("data file"); total += s.st_size; break; } } yaffs_closedir(d); } return 0; }
static void dump_directory_tree_worker(const char *dname,int recursive) { yaffs_DIR *d; yaffs_dirent *de; struct yaffs_stat s; char str[1000]; d = yaffs_opendir(dname); if(!d) { printf("opendir failed\n"); } else { while((de = yaffs_readdir(d)) != NULL) { strcpy(str,dname); strcat(str,"/"); strcat(str,de->d_name); yaffs_lstat(str,&s); 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; case S_IFDIR: printf("directory"); break; case S_IFLNK: printf("symlink -->"); if(yaffs_readlink(str,str,100) < 0) printf("no alias"); else printf("\"%s\"",str); break; default: printf("unknown"); break; } printf("\n"); if((s.st_mode & S_IFMT) == S_IFDIR && recursive) dump_directory_tree_worker(str,1); if(s.st_ino > 10000) FatalError(); } yaffs_closedir(d); } }
void ListDir(const char *DirName) { yaffs_DIR *d; yaffs_dirent *de; struct yaffs_stat s; char str[100]; d = yaffs_opendir(DirName); if(!d) { printf("opendir failed\n"); } else { printf("%s\n", DirName); while((de = yaffs_readdir(d)) != NULL) { sprintf(str,"%s/%s",DirName,de->d_name); yaffs_lstat(str,&s); printf("%20s %8d %5d ", de->d_name, s.yst_size, s.yst_mode); switch(s.yst_mode & S_IFMT) { case S_IFREG: printf("data file"); break; case S_IFDIR: printf("directory"); break; case S_IFLNK: printf("symlink"); break; default: printf("unknown"); break; } printf("\n"); } yaffs_closedir(d); } printf("FreeSpace: %d\n\n", yaffs_freespace(DirName)); }