summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2017-09-29 15:23:35 +0200
committerDavid Sterba <dsterba@suse.com>2017-10-06 13:23:44 +0200
commitd07e349800b8a100e049465666b2382613281a8c (patch)
tree2c47c6a59e9bec29e7b8bf0d2cdf56956ba994cb
parentfe667f6e7d0a3215bf671bfd70b0eb18d6e9c1a6 (diff)
btrfs-progs: mkfs: use existing helper for path concatenation
Mkfs uses make_path that is duplicate of path_cat* functions, so we can switch to them and add the error handling. Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--mkfs/main.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/mkfs/main.c b/mkfs/main.c
index 52bb1dad..5987a963 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -47,6 +47,8 @@
#include "mkfs/common.h"
#include "fsfeatures.h"
+int path_cat_out(char *out, const char *p1, const char *p2);
+
static u64 index_cnt = 2;
static int verbose = 1;
@@ -941,14 +943,28 @@ static int traverse_directory(struct btrfs_trans_handle *trans,
}
if (S_ISDIR(st.st_mode)) {
+ char tmp[PATH_MAX];
+
dir_entry = malloc(sizeof(struct directory_name_entry));
if (!dir_entry) {
ret = -ENOMEM;
goto fail;
}
dir_entry->dir_name = cur_file->d_name;
- dir_entry->path = make_path(parent_dir_entry->path,
- cur_file->d_name);
+ if (path_cat_out(tmp, parent_dir_entry->path,
+ cur_file->d_name)) {
+ error("invalid path: %s/%s",
+ parent_dir_entry->path,
+ cur_file->d_name);
+ ret = -EINVAL;
+ goto fail;
+ }
+ dir_entry->path = strdup(tmp);
+ if (!dir_entry->path) {
+ error("not enough memory to store path");
+ ret = -ENOMEM;
+ goto fail;
+ }
dir_entry->inum = cur_inum;
list_add_tail(&dir_entry->list, &dir_head->list);
} else if (S_ISREG(st.st_mode)) {