Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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);
}