diff options
-rw-r--r-- | cmds-receive.c | 15 |
1 files 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; } |