diff options
Diffstat (limited to 'dir.c')
-rw-r--r-- | dir.c | 83 |
1 files changed, 42 insertions, 41 deletions
@@ -51,16 +51,16 @@ uint16_t dir_add_direntry(const char *disk_mem, dir *d, const char *name, assert (strlen(name) < NAME_LENGTH); walker = bwalker_create(disk_mem, d->size, &(d->indirect)); - - if(bwalker_direct_length(walker)*BLOCK_SIZE<d->size+32){ + + if(bwalker_direct_length(walker)*BLOCK_SIZE<d->size+32){ block = bwalker_allocate_block(walker); }else{ block = bwalker_last_block(walker); - if(!block) + if(!block) goto CLEAN; - } - + } + dentry = (direntry *) disk_mem + BLOCKPOOL_OFFSET + (block * BLOCK_SIZE); for(i = 0; i < 16; i++){ @@ -73,7 +73,7 @@ uint16_t dir_add_direntry(const char *disk_mem, dir *d, const char *name, result = 1; goto CLEAN; } - } + } CLEAN: bwalker_destroy(walker); @@ -96,12 +96,12 @@ uint16_t dir_remove_direntry(const char *disk_mem, dir *d, const char *name) assert(strlen(name) < NAME_LENGTH); walker = bwalker_create(disk_mem, d->size, &(d->indirect)); - + /* Conseguimos el ultimo direntry */ block = bwalker_last_block(walker); assert(block != 0); last_dentry = (direntry *) disk_mem + BLOCKPOOL_OFFSET + - (block * BLOCK_SIZE); + (block * BLOCK_SIZE); assert(last_dentry[0].inum != 0); for(i = 0; i < 16; i++){ if(last_dentry[i].inum == 0) @@ -113,7 +113,7 @@ uint16_t dir_remove_direntry(const char *disk_mem, dir *d, const char *name) while((block = bwalker_next(walker))) { rm_dentry = (direntry *) disk_mem + BLOCKPOOL_OFFSET + - (block * BLOCK_SIZE); + (block * BLOCK_SIZE); for(i = 0; i < 16; i++) if(strcmp(name, rm_dentry[i].name) == 0) { @@ -129,13 +129,13 @@ uint16_t dir_remove_direntry(const char *disk_mem, dir *d, const char *name) last_dentry->name[0] = '\0'; last_dentry->inum = 0; last_dentry->symlink = 0; - + goto END; } if(bwalker_block_is_last(walker)) break; - } + } END: bwalker_destroy(walker); return result; @@ -144,27 +144,27 @@ END: dir *dir_get_from_path(const char *disk_mem, const char *path) { - uint16_t inum = 0; + uint16_t inum = 0; char *dir_name = NULL; - + assert (disk_mem != NULL); assert (path != NULL); dir_name = calloc(strlen(path) + 1, sizeof(char)); strcpy(dir_name, path); inum = get_inode_from_path(disk_mem, dirname(dir_name), 1); - free(dir_name); + free(dir_name); if(inum==0){ - return NULL; - } - return ((dir *)disk_mem+INODEPOOL_OFFSET+INODE_SIZE*inum); - + return NULL; + } + return ((dir *)disk_mem+INODEPOOL_OFFSET+INODE_SIZE*inum); + } uint16_t dir_search(const char *disk_mem, dir *idir,const char *name) { - bwalker *bw = NULL; - direntry *dentry; - uint16_t bnum, i; + bwalker *bw = NULL; + direntry *dentry; + uint16_t bnum, i; assert(disk_mem != NULL); @@ -176,24 +176,24 @@ uint16_t dir_search(const char *disk_mem, dir *idir,const char *name) /* Salimos si esto esta vacio obviamente. */ if(idir->size == 0){ return 0; - } - + } + bw = bwalker_create(disk_mem, idir->size, &(idir->indirect)); - while ((bnum = bwalker_next(bw))) + while ((bnum = bwalker_next(bw))) { - dentry=(direntry *) disk_mem + BLOCKPOOL_OFFSET + (bnum*BLOCK_SIZE); - for(i=0; i<16; i++){ - if(strcmp(name, dentry[i].name) == 0){ + dentry=(direntry *) disk_mem + BLOCKPOOL_OFFSET + (bnum*BLOCK_SIZE); + for(i=0; i<16; i++){ + if(strcmp(name, dentry[i].name) == 0){ bwalker_destroy(bw); - return dentry[i].inum; - } - } + return dentry[i].inum; + } + } if(bwalker_block_is_last(bw)) break; } bwalker_destroy(bw); - return 0; + return 0; } int dir_rename_inode(const char *disk_mem, dir *d, @@ -214,28 +214,29 @@ int dir_rename_inode(const char *disk_mem, dir *d, /* Salimos si esto esta vacio obviamente. */ if(d->size == 0){ return 0; - } - + } + bw = bwalker_create(disk_mem, d->size, &(d->indirect)); - while ((bnum = bwalker_next(bw))) + while ((bnum = bwalker_next(bw))) { - dentry=(direntry *) disk_mem + BLOCKPOOL_OFFSET + (bnum*BLOCK_SIZE); - for(i=0; i<16; i++){ - if(strcmp(old_name, dentry[i].name) == 0){ + dentry=(direntry *) disk_mem + BLOCKPOOL_OFFSET + (bnum*BLOCK_SIZE); + for(i=0; i<16; i++){ + if(strcmp(old_name, dentry[i].name) == 0){ bwalker_destroy(bw); strcpy(dentry[i].name,new_name); return 1; - } - } + } + } if(bwalker_block_is_last(bw)) break; } bwalker_destroy(bw); - return 0; + return 0; } -uint16_t dir_readdir(const char *disk_mem, dir *d, void *buf, fuse_fill_dir_t filler) +uint16_t dir_readdir(const char *disk_mem, dir *d, void *buf, + fuse_fill_dir_t filler) { bwalker *bw = NULL; |