void fs_dump(int show_content) { int i = 0; struct dirent *node = 0; while ( (node = readdir_fs(fs_root, i)) != 0) { monitor_write("[Entity] "); monitor_write(node->name); fs_node_t *fsnode = finddir_fs(fs_root, node->name); if ((fsnode->flags&0x7) == FS_DIRECTORY) { monitor_write("[Dir]\n"); } else { monitor_write("[File]\n"); if(show_content) { monitor_write("\n\t Contents: \""); char buf[256]; u32int sz = read_fs(fsnode, 0, 256, buf); int j; for (j = 0; j < sz; j++) putch(buf[j]); monitor_write("\n"); } } i++; } monitor_write("\n"); }
void listDir(struct fs_node* nodeDir,int level){ int i = 0; struct dirent* node = 0; while ((node=readdir_fs(nodeDir,i))!=0){ fs_node* fsnode = finddir_fs(nodeDir,node->name); for(int i = 0;i<level;i++) kprintf(" "); if (fsnode != NULL){ if ((fsnode->flags&0x7)==FS_DIRECTORY){ kprintf("[%s]\n",trim(fsnode->name)); if (fsnode->name[0]!='.') listDir(fsnode,level+1); } else if ((fsnode->flags&0x1)==FS_FILE){ kprintf("%s\n",fsnode->name); char buf[256]; kprintf("----\n"); unsigned x = 0; while(1==1){ unsigned int sz = read_fs(fsnode,0+x,256,buf); x+=256; if (sz != 0){ for(unsigned int i = 0;i<sz;i++) kprint(buf[i]); } else break; } kprintf("\n----\n"); } //kprintf("\n"); } i++; } }
void initrd_list() { u32int i, count; u8int buffer[256]; struct fs_node *node, *root; struct dirent *entry; kprintf("Listing Initial Ramdisk:\n"); i = 1; root = &root_nodes[0]; while((entry = readdir_fs(root, i++)) != NULL) { node = finddir_fs(root, entry->name); ASSERT(node != NULL); if(node->flags & FS_DIRECTORY) { kprintf("Found directory %s\n", node->name); } else { kprintf("Found file %s (%d bytes):\n", node->name, node->length); count = read_fs(node, 0, 255, buffer); buffer[count] = '\0'; kprintf("\t%s\n", buffer); } } }
int ls_cmd(int argc, char **argv) { boolean showHidden = false; int i = 2; if (argc == 1 && strcmp(argv[0], "-a") == 0) { showHidden = true; i = 0; } fs_node_t current, *node; char perm[MASK_STRING_LEN]; fs_getFsNode(¤t, tty_getCurrentTTY()->currDirectory); while ((node = readdir_fs(¤t, i)) != NULL) { // get directory i tty_setFormatToCurrTTY(video_getFormattedColor(LIGHT_BLUE, BLACK)); if (node->name[0] != '.' || (node->name[0] == '.' && showHidden)) { if (showHidden) { if (i == 0) strcpy(node->name, "."); else if (i == 1) strcpy(node->name, ".."); } mask_string(node->mask, perm); printf("%s\t%5s\t%5s", perm, user_getName(node->uid), group_getName(node->gid)); _ls_cmd_setColor(FILE_TYPE(node->mask)); printf("\t%s%s\n", node->name, _ls_cmd_EndingString(FILE_TYPE(node->mask)) ); } i++; } return 0; }
static int sys_readdir(int fd, int index, struct dirent * entry) { if (FD_CHECK(fd)) { PTR_VALIDATE(entry); struct dirent * kentry = readdir_fs(FD_ENTRY(fd), (uint32_t)index); if (kentry) { memcpy(entry, kentry, sizeof *entry); free(kentry); return 0; } else { return 1; } } return -1; }
int main(struct multiboot *mboot_ptr) { // Initialise all the ISRs and segmentation init_descriptor_tables(); // Initialise the screen (by clearing it) monitor_clear(); // Find the location of our initial ramdisk. ASSERT(mboot_ptr->mods_count > 0); u32int initrd_location = *((u32int*)mboot_ptr->mods_addr); u32int initrd_end = *(u32int*)(mboot_ptr->mods_addr+4); // Don't trample our module with placement accesses, please! placement_address = initrd_end; // Start paging. initialise_paging(); // Initialise the initial ramdisk, and set it as the filesystem root. fs_root = initialise_initrd(initrd_location); // list the contents of / int i = 0; struct dirent *node = 0; while ( (node = readdir_fs(fs_root, i)) != 0) { monitor_write("Found file "); monitor_write(node->name); fs_node_t *fsnode = finddir_fs(fs_root, node->name); if ((fsnode->flags&0x7) == FS_DIRECTORY) { monitor_write("\n\t(directory)\n"); } else { monitor_write("\n\t contents: \""); char buf[256]; u32int sz = read_fs(fsnode, 0, 256, buf); int j; for (j = 0; j < sz; j++) monitor_put(buf[j]); monitor_write("\"\n"); } i++; } return 0; }
void traverse_initrd() { int i = 0; struct dirent* node = 0; while ((node = readdir_fs(fs_root, i)) != 0) { printf("Found file %s ", node->name); fs_node_t* fsnode = finddir_fs(fs_root, node->name); if ((fsnode->flags & 0x7) == FS_DIRECTORY) { printf("[directory]\n"); } else { printf("[file of %d bytes]\n", fsnode->length); } i++; } printf("\n"); }
char * load_initrd_app(char *name, char **argv, char **env) { int argc = 0; while (argv[argc]) { ++argc; } struct dirent* node = 0; for (size_t i = 0; (node = readdir_fs(fs_root_initrd, i)) != 0; ++i) { fs_node_t * fsnode = finddir_fs(fs_root_initrd, node->name); if ((fsnode->flags & 0x7) == FS_DIRECTORY) { } else { char * argv_[] = { name, NULL, NULL, NULL }; int argc_ = 0; while (argv_[argc_]) { argc_++; } printk("\nSearching!\n"); char* buf = malloc_( fsnode->length); printk("%d\n",fsnode->length); u32 sz = read_fs(fsnode, 0, fsnode->length, buf); printk("Size: %d bytes\t Name: %s\n", fsnode->length, node->name); if(strcmp(node->name, name) == 0) { return buf; elf_exec__(buf, sz, name,argc,argv); memset(buf,0,400000); } } } return 0; }
// Displays all files in the file system and their contents. void file_disp(fs_node_t *fs_root) { // The next section of code is not reentrant so make sure we aren't interrupted during. //asm volatile("cli"); // list the contents of / int i = 0; struct dirent *node = 0; while ((node = readdir_fs(fs_root, i)) != 0) { printf("Found file "); printf(node->name); fs_node_t *fsnode = finddir_fs(fs_root, node->name); if ((fsnode->flags&0x7) == FS_DIRECTORY) { printf("\n\t(directory)\n"); } else { printf("\n\t contents: \""); char buf[256]; u32int sz = read_fs(fsnode, 0, 256, buf); int j; for (j = 0; j < sz; j++) monitor_put(buf[j]); printf("\"\n"); } i++; } // Enable interrupts //asm volatile("sti"); printf("\n"); }
void listTree() { // list the contents of int i = 0; struct dirent *node = 0; while ((node = readdir_fs(fs_root, i)) != 0) { fs_node_t *fsnode = finddir_fs(fs_root, node->name); if ((fsnode->flags & 0x7) == FS_DIRECTORY) { print("dir \t", 0x0F); print(node->name, 0x0F); printch('/', 0x0F); } else { print("file\t", 0x0F); print(node->name, 0x0F); } newline(); i++; } }
int main(struct multiboot *mboot_ptr, u32int initial_stack) { initial_esp = initial_stack; // Initialise all the ISRs and segmentation init_descriptor_tables(); // Initialise the screen (by clearing it) monitor_clear(); // Initialise the PIT to 100Hz asm volatile("sti"); init_timer(50); // Find the location of our initial ramdisk. ASSERT(mboot_ptr->mods_count > 0); u32int initrd_location = *((u32int*)mboot_ptr->mods_addr); u32int initrd_end = *(u32int*)(mboot_ptr->mods_addr+4); // Don't trample our module with placement accesses, please! placement_address = initrd_end; // Start paging. initialise_paging(); // Start multitasking. initialise_tasking(); // Initialise the initial ramdisk, and set it as the filesystem root. fs_root = initialise_initrd(initrd_location); // Create a new process in a new address space which is a clone of this. int ret = fork(); monitor_write("fork() returned "); monitor_write_hex(ret); monitor_write(", and getpid() returned "); monitor_write_hex(getpid()); monitor_write("\n============================================================================\n"); // The next section of code is not reentrant so make sure we aren't interrupted during. asm volatile("cli"); // list the contents of / int i = 0; struct dirent *node = 0; while ( (node = readdir_fs(fs_root, i)) != 0) { monitor_write("Found file "); monitor_write(node->name); fs_node_t *fsnode = finddir_fs(fs_root, node->name); if ((fsnode->flags&0x7) == FS_DIRECTORY) { monitor_write("\n\t(directory)\n"); } else { monitor_write("\n\t contents: \""); char buf[256]; u32int sz = read_fs(fsnode, 0, 256, buf); int j; for (j = 0; j < sz; j++) monitor_put(buf[j]); monitor_write("\"\n"); } i++; } monitor_write("\n"); asm volatile("sti"); return 0; }