//recursive functions to list filenames and apply filters. void print_dir_entries(const char *pathname, FILTER *filter, int level) { struct dirent **namelist; int number_of_names; if (level == 0) return; if (level > 0) level--; number_of_names = scandir(pathname, &namelist, 0, alphasort); if (number_of_names < 0) { fprintf(stderr, "scandir process %s error:", pathname); perror(""); } else { while (number_of_names--) { char *entry_name = namelist[number_of_names]->d_name; if (strcmp(entry_name, ".") == 0 || strcmp(entry_name, "..") == 0) { continue; } filter_files(pathname, namelist[number_of_names], filter); if (namelist[number_of_names]->d_type == DT_DIR) { print_dir_entries(normalize_path(pathname, entry_name), filter, level); } free(namelist[number_of_names]); } free(namelist); } }
int main(int argc, char **argv) { char * path; char name[256]; if(argc != 3) { fprintf(stderr, "Usage: ext2_ls <image file name> <file path>\n"); exit(1); } if (ext2_init(argv[1]) == -1) return -1; path = malloc(strlen(argv[2])); split_filepath(argv[2],name,path); struct ext2_inode * inode = inode_by_index(find_inode(argv[2])); if (inode) { if (inode->i_mode & EXT2_S_IFDIR) print_dir_entries(inode); else printf("%s\n", name); } else { printf("no such file or diretory\n"); } return 0; }
static int print_dir_entries(struct ghostfs *gfs, int cluster_nr, const char *parent) { struct dir_iter it; char buf[256] = ""; int ret; ret = dir_iter_init(gfs, &it, cluster_nr); if (ret < 0) return ret; do { if (dir_entry_used(it.entry)) { snprintf(buf, sizeof(buf), "%s/%s", parent, it.entry->filename); printf("%s", buf); if (dir_entry_is_directory(it.entry)) { printf("/\n"); ret = print_dir_entries(gfs, it.entry->cluster, buf); if (ret < 0) return ret; } else { printf(" {%d}\n", it.entry->size); } } } while ((ret = dir_iter_next_used(&it)) == 0); if (ret != -ENOENT) return ret; return 0; }
/* Program */ int main(int argc, char **argv) { int err = 0; int i; int len; /* Set default applications to open bookmarks */ g_cmd_name = argv[0]; g_dir_name = getenv("HOME"); g_browser_name = "firefox"; g_filer_name = "rox"; g_icon_dir = "/usr/share/icons/hicolor/32x32/apps"; /* If applications is specified. */ for (i = 1; i < argc; i++) { len = strlen(argv[i]); if (len > 2 && argv[i][0] == '-') { switch (argv[i][1]) { case 'd': g_dir_name = get_full_path(argv[i] + 2); break; case 'b': g_browser_name = argv[i] + 2; break; case 'f': g_filer_name = argv[i] + 2; break; case 'i': g_icon_dir = get_full_path(argv[i] + 2); break; default: exit(1); } } } printf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); printf("<openbox_pipe_menu>\n"); err = print_dir_entries(g_dir_name); if (err) { printf(ERR_MSG_DIR); } printf( "<separator label=\"編集\" />\n" "<item label=\"Open the location with %s\" icon=\"%s/%s.png\">\n" " <action name=\"Execute\"><execute>%s "%s"</execute></action>\n" "</item>\n", g_filer_name, g_icon_dir, g_filer_name, g_filer_name, g_dir_name ); printf("</openbox_pipe_menu>\n"); if (g_dir_name != NULL) { free(g_dir_name); } if (g_icon_dir != NULL) { free(g_icon_dir); } return 0; }
// Our version of LS. Gets the needed i node then goes to its i blocks and prints its directory entries int list_dir(char input[]) { int ino, dev = running->cwd->dev; MINODE *mip = running->cwd; printf(YELLOW "\t...LIST_DIR(%s)" RESET ": Listing entries...\n", input); if (strlen(input)>0) // if we have a path name find it it else use cwd { //if (input[0]=='/')// why do we do this <======= //{dev = root->dev;} ino = getino(dev, input); MINODE *mip = iget(dev, ino); print_dir_entries(mip); iput(mip); //iput now since theres nothing refrencing this? <============= } else { print_dir_entries(mip); } return 0; }
int ghostfs_debug(struct ghostfs *gfs) { return print_dir_entries(gfs, 0, ""); }