int main(int argc, char **argv) { if(argc != 3) { fprintf(stderr, "Usage: ext2_mkdir <image file name> <path to file>\n"); exit(1); } disk_initialization(argv[1]); /* initialize disk */ /* retrieve the inode index for parent directory */ unsigned int inode_dir = inode_from_path(extract_parent_path(argv[2])); /* get filename for new directory */ char *filename = extract_filename(argv[2]); if (dir_find(inode_dir, filename)) { // Case: filename already exists fprintf(stderr, "%s: already exists\n", argv[2]); exit(EEXIST); } /* allocate inode for new directory */ unsigned int new_inode = allocate_inode(); /* initialize the new directory inode and add as entry to parent directory */ init_dir_inode(new_inode, inode_dir, filename); return 0; }
int main(int argc, char **argv) { if(argc != 3) { fprintf(stderr, "Usage: ext2_rm <image file name> <path to file>\n"); exit(1); } disk_initialization(argv[1]); /* initialize disk */ unsigned int dir_inode = inode_from_path(extract_parent_path(argv[2])); /* get inode index from path */ struct ext2_dir_entry_2 *de = dir_find(dir_inode, extract_filename(argv[2])); if (de == NULL) { fprintf(stderr, "No such file or directory\n"); exit(ENOENT); } unsigned int inode_index = de->inode; if (has_file_type(EXT2_INODE_FT_DIR, inode_index)) { fprintf(stderr, "%s: is a directory\n", argv[2]); exit(EISDIR); } else { /* remove directory entry associated with file */ delete_entry(dir_inode, extract_filename(argv[2])); } return 0; }
static int msfs_getattr(const char *path, struct stat *stbuf) { printf("msfs_getattr(%s)\n", path); reset_error(); inode_t inode = inode_from_path(path); if(msfs_error != 0) return msfs_error; *stbuf = inode.attributes; printf("msfs_getattr(%s), found.\n", path); return 0; }
static int msfs_opendir(const char * path, fuse_file_info * fi) { printf("msfs_opendir(%s)\n", path); reset_error(); inode_t inode = inode_from_path(path); if(msfs_error != 0) return msfs_error; if(!is_directory(&inode)) return -ENOTDIR; if(!check_access(&inode, fi->flags)) return -EPERM; fi->fh = (uint64_t) inode.attributes.st_ino; printf("msfs_opendir(%s) found inode %lu\n", path, inode.attributes.st_ino); return 0; }
static int msfs_open(const char *path, fuse_file_info *fi) { printf("msfs_open(%s)\n", path); reset_error(); inode_t inode = inode_from_path(path); if(msfs_error != 0) return msfs_error; if(is_directory(&inode)) return -EISDIR; if(!check_access(&inode, fi->flags)) return -EPERM; printf("Lock owner: %lu\n", fi->lock_owner); fi->fh = (uint64_t) inode.attributes.st_ino; return msfs_error; }