From 210bd3a693d92f3327ad42f98c3faba100cec4e3 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Fri, 12 Jun 2015 15:58:55 +0200 Subject: btrfs-progs: receive: use static buffer for mount point option argument Signed-off-by: David Sterba --- cmds-receive.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/cmds-receive.c b/cmds-receive.c index 8dcdd290..8908f8f7 100644 --- a/cmds-receive.c +++ b/cmds-receive.c @@ -939,7 +939,7 @@ static int do_receive(struct btrfs_receive *r, const char *tomnt, goto out; } - if (realmnt) { + if (realmnt[0]) { r->root_path = realmnt; } else { ret = find_mount_root(dest_dir_full_path, &r->root_path); @@ -1097,7 +1097,7 @@ int cmd_receive(int argc, char **argv) { char *tomnt = NULL; char *fromfile = NULL; - char *realmnt = NULL; + char realmnt[PATH_MAX]; struct btrfs_receive r; int receive_fd = fileno(stdin); u64 max_errors = 1; @@ -1108,6 +1108,7 @@ int cmd_receive(int argc, char **argv) r.write_fd = -1; r.dest_dir_fd = -1; r.dest_dir_chroot = 0; + realmnt[0] = 0; while (1) { int c; @@ -1138,10 +1139,11 @@ int cmd_receive(int argc, char **argv) max_errors = arg_strtou64(optarg); break; case 'm': - free(realmnt); - realmnt = strdup(optarg); - if (!realmnt) { - fprintf(stderr, "ERROR: couldn't allocate realmnt.\n"); + if (arg_copy_path(realmnt, optarg, sizeof(realmnt))) { + fprintf(stderr, + "ERROR: mount point path too long (%zu)\n", + strlen(optarg)); + ret = 1; goto out; } break; @@ -1168,7 +1170,6 @@ int cmd_receive(int argc, char **argv) ret = do_receive(&r, tomnt, realmnt, receive_fd, max_errors); out: - free(realmnt); return !!ret; } -- cgit v1.2.3