From 7ee0e2e2a464fa8035f7ccf92e325a20e24b8ddb Mon Sep 17 00:00:00 2001 From: "yuhong.tao@intel.com" Date: Tue, 4 Dec 2018 15:48:06 +0000 Subject: [PATCH] tools: acrnctl: Fix path error when run "acrnctl add" cmd There is a bug to run 'acrnctl add /[path]/script.sh', when the launch script has an absolute path. Acrnctl will generate wrong path for temp files and fail to add VM. And message '/opt/acrn/conf: No such file or directory' always comes out, until user once successfully run 'acrnctl add' cmd. That is reported by _scan_added_vm(), because 'opt/acrn' is missing, only 'acrnctl add' can create it, we should also check it in _scan_added_vm(). Tracked-On: #2013 Acked-by: Yan, Like Signed-off-by: Tao Yuhong --- tools/acrn-manager/acrn_vm_ops.c | 3 +++ tools/acrn-manager/acrnctl.c | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/acrn-manager/acrn_vm_ops.c b/tools/acrn-manager/acrn_vm_ops.c index 0bcb9a8a2..296503d3f 100644 --- a/tools/acrn-manager/acrn_vm_ops.c +++ b/tools/acrn-manager/acrn_vm_ops.c @@ -223,6 +223,9 @@ static void _scan_added_vm(void) char suffix[128]; int ret; + if (check_dir("/opt") || check_dir("/opt/acrn")) + return; + ret = check_dir(ACRNCTL_OPT_ROOT); if (ret) { pdebug(); diff --git a/tools/acrn-manager/acrnctl.c b/tools/acrn-manager/acrnctl.c index 6391ca09f..5b3bef7c2 100644 --- a/tools/acrn-manager/acrnctl.c +++ b/tools/acrn-manager/acrnctl.c @@ -280,7 +280,7 @@ static int acrnctl_do_add(int argc, char *argv[]) } system(cmd); - if (snprintf(cmd, sizeof(cmd), "bash %s%s >./%s.result", argv[1], + if (snprintf(cmd, sizeof(cmd), "bash %s%s > %s.result", argv[1], args, argv[1]) >= sizeof(cmd)) { printf("ERROR: cmd is truncated\n"); ret = -1 ; @@ -290,7 +290,7 @@ static int acrnctl_do_add(int argc, char *argv[]) if (ret < 0) goto get_vmname; - if (snprintf(cmd, sizeof(cmd), "grep -a \"acrnctl: \" ./%s.result", + if (snprintf(cmd, sizeof(cmd), "grep -a \"acrnctl: \" %s.result", argv[1]) >= sizeof(cmd)) { printf("ERROR: cmd is truncated\n"); ret = -1; @@ -308,7 +308,7 @@ static int acrnctl_do_add(int argc, char *argv[]) ret = _get_vmname(cmd_out, vmname, sizeof(vmname)); if (ret < 0) { /* failed to get vmname */ - if (snprintf(cmd, sizeof(cmd), "cat ./%s.result", argv[1]) >= sizeof(cmd)) { + if (snprintf(cmd, sizeof(cmd), "cat %s.result", argv[1]) >= sizeof(cmd)) { printf("ERROR: cmd is truncated\n"); goto get_vmname; } @@ -365,7 +365,7 @@ static int acrnctl_do_add(int argc, char *argv[]) vm_exist: get_vmname: - if (snprintf(cmd, sizeof(cmd), "rm -f ./%s.result", argv[1]) >= sizeof(cmd)) { + if (snprintf(cmd, sizeof(cmd), "rm -f %s.result", argv[1]) >= sizeof(cmd)) { printf("WARN: cmd is truncated\n"); } else system(cmd);