static inline void print_nnn(char *number, bool *escaped) { char *dec_number = NULL; int dec_number_int; if (is_octal(number)) { dec_number = oct_to_dec(number); dec_number_int = atoi(dec_number); if (dec_number_int < 128 && dec_number_int > 0) printf("%c", dec_number_int); else printf("\\%s", number); mfree(dec_number); } else printf("%s%s", *escaped ? "\\" : "", number); bzero(number, 4); *escaped = false; }
void* init_tarfs() { HEADER *header = (HEADER*) &_binary_tarfs_start; int size_of_file = 0; fnode_t *temp_node; root_node = (fnode_t *)kmalloc(sizeof(struct file)); make_node(root_node, root_node, "/", 0, 2, DIRECTORY, 0); temp_node = (fnode_t *)kmalloc(sizeof(struct file)); make_node(temp_node, root_node, "rootfs", 0, 2, DIRECTORY, 0); root_node->f_child[2] = temp_node; root_node->end += 1; temp_node = (fnode_t *)kmalloc(sizeof(struct file)); make_node(temp_node, root_node, "Disk", 0, 2, DIRECTORY, 0); root_node->f_child[3] = temp_node; root_node->end += 1; do { size_of_file = oct_to_dec(atoi(header->size)); if (kstrcmp(header->typeflag, "5") == 0) { parse(header->name, DIRECTORY, 0, 2); } else { parse(header->name, FILE, (uint64_t)(header + 1), (uint64_t)((void *)header + 512 + size_of_file)); } if (size_of_file > 0) { header = header + size_of_file / (sizeof(HEADER) + 1) + 2; } else { header = header + 1; } } while(header < (HEADER*)&_binary_tarfs_end); return (void *)&root_node; }