mufs: locate directory entry properly in mufs_rmpath()
This commit is contained in:
parent
14a93ab881
commit
ab599e7c8b
1 changed files with 24 additions and 5 deletions
|
@ -95,9 +95,12 @@ int mufs_rmpath(struct mufs *fs, const char *path)
|
|||
struct flash_dev *dev = fs->dev;
|
||||
char data[1 << dev->log2_block_size];
|
||||
struct mufs_dentry *entry, *next;
|
||||
struct mufs_dirent ent;
|
||||
struct mufs_tree *tree;
|
||||
struct mufs_dir *dir;
|
||||
char *s, *name;
|
||||
uint32_t va, offset, len;
|
||||
int ret;
|
||||
|
||||
if (!(s = mufs_abspath(path)))
|
||||
return -1;
|
||||
|
@ -105,13 +108,24 @@ int mufs_rmpath(struct mufs *fs, const char *path)
|
|||
name = strrchr(s, '/');
|
||||
*name++ = '\0';
|
||||
|
||||
if (!(tree = resolve_path(fs, s, NULL))) {
|
||||
free(s);
|
||||
return -1;
|
||||
if (!(tree = resolve_path(fs, s, NULL)))
|
||||
goto err_free_s;
|
||||
|
||||
if (!(dir = mufs_opendir(fs, s)))
|
||||
goto err_free_s;
|
||||
|
||||
for (va = dir->va; (ret = mufs_readdir(dir, &ent)) == 0; va = dir->va) {
|
||||
if (strcmp(ent.path, name) == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
offset = tree->va & ((UINT32_C(1) << dev->log2_block_size) - 1);
|
||||
va = align(tree->va, dev->log2_block_size);
|
||||
mufs_closedir(dir);
|
||||
|
||||
if (ret < 0)
|
||||
goto err_free_s;
|
||||
|
||||
offset = va & ((UINT32_C(1) << dev->log2_block_size) - 1);
|
||||
va = align(va, dev->log2_block_size);
|
||||
|
||||
if (mufs_tree_read(tree, data, va, 1 << dev->log2_block_size) == 0)
|
||||
return -1;
|
||||
|
@ -130,7 +144,12 @@ int mufs_rmpath(struct mufs *fs, const char *path)
|
|||
if (mufs_tree_write(tree, data, va, 1 << dev->log2_block_size) == 0)
|
||||
return -1;
|
||||
|
||||
free(s);
|
||||
return 0;
|
||||
|
||||
err_free_s:
|
||||
free(s);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int mufs_stat(struct mufs *fs, const char *path, struct mufs_stat *stat)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue