unsigned int get_directory_inode_from_path_parts(struct unsigned_char_ptr_list * path_components){ unsigned int current_inode = 0; /* 0 is root inode */ unsigned char * root_component = unsigned_char_ptr_list_get(path_components, 0); unsigned int i; /* The first component represents the root inode, which is constant */ unsigned_char_ptr_list_remove_all(path_components, root_component); free(root_component); for(i = 0; i < unsigned_char_ptr_list_size(path_components); i++){ current_inode = get_directory_entry_inode(unsigned_char_ptr_list_get(path_components, i), current_inode, 1); } return current_inode; }
void create_directory(unsigned char * d){ struct unsigned_char_ptr_list components; unsigned int parent_directory_inode; unsigned char * directory_name; unsigned int i; unsigned_char_ptr_list_create(&components); resolve_path_components(d, &components); /* Last path component is directory to create */ directory_name = unsigned_char_ptr_list_get(&components, unsigned_char_ptr_list_size(&components) -1); unsigned_char_ptr_list_remove_all(&components, directory_name); /* Last component is new directory to create */ parent_directory_inode = get_directory_inode_from_path_parts(&components); printf("Creating directory %s with full path %s\n", directory_name, d); create_file_given_parent_inode(parent_directory_inode, directory_name, 1); for(i = 0; i < unsigned_char_ptr_list_size(&components);i++){ free(unsigned_char_ptr_list_get(&components, i)); } unsigned_char_ptr_list_destroy(&components); free(directory_name); }
void load_file(unsigned char * d, FILE * f, struct memory_pool_collection * m){ struct unsigned_char_ptr_list components; unsigned int parent_directory_inode; unsigned int new_file_inode; unsigned char * file_name; unsigned int i; unsigned_char_ptr_list_create(&components); resolve_path_components(d, &components, m); /* Last path component is file to create */ file_name = unsigned_char_ptr_list_get(&components, unsigned_char_ptr_list_size(&components) -1); unsigned_char_ptr_list_remove_all(&components, file_name, unsigned_char_ptr_cmp); /* Last component is new file to create */ parent_directory_inode = get_directory_inode_from_path_parts(m, &components); printf("Creating file %s with full path %s\n", file_name, d); new_file_inode = create_file_given_parent_inode(parent_directory_inode, file_name, 0); load_file_given_new_inode(new_file_inode, f); for(i = 0; i < unsigned_char_ptr_list_size(&components);i++){ heap_memory_pool_free(m->heap_pool, unsigned_char_ptr_list_get(&components, i)); } unsigned_char_ptr_list_destroy(&components); heap_memory_pool_free(m->heap_pool, file_name); }