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 <like.yan@intel.com>
Signed-off-by: Tao Yuhong <yuhong.tao@intel.com>
This commit is contained in:
yuhong.tao@intel.com 2018-12-04 15:48:06 +00:00 committed by wenlingz
parent 9761eede2a
commit 7ee0e2e2a4
2 changed files with 7 additions and 4 deletions

View File

@ -223,6 +223,9 @@ static void _scan_added_vm(void)
char suffix[128]; char suffix[128];
int ret; int ret;
if (check_dir("/opt") || check_dir("/opt/acrn"))
return;
ret = check_dir(ACRNCTL_OPT_ROOT); ret = check_dir(ACRNCTL_OPT_ROOT);
if (ret) { if (ret) {
pdebug(); pdebug();

View File

@ -280,7 +280,7 @@ static int acrnctl_do_add(int argc, char *argv[])
} }
system(cmd); 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)) { args, argv[1]) >= sizeof(cmd)) {
printf("ERROR: cmd is truncated\n"); printf("ERROR: cmd is truncated\n");
ret = -1 ; ret = -1 ;
@ -290,7 +290,7 @@ static int acrnctl_do_add(int argc, char *argv[])
if (ret < 0) if (ret < 0)
goto get_vmname; 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)) { argv[1]) >= sizeof(cmd)) {
printf("ERROR: cmd is truncated\n"); printf("ERROR: cmd is truncated\n");
ret = -1; ret = -1;
@ -308,7 +308,7 @@ static int acrnctl_do_add(int argc, char *argv[])
ret = _get_vmname(cmd_out, vmname, sizeof(vmname)); ret = _get_vmname(cmd_out, vmname, sizeof(vmname));
if (ret < 0) { if (ret < 0) {
/* failed to get vmname */ /* 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"); printf("ERROR: cmd is truncated\n");
goto get_vmname; goto get_vmname;
} }
@ -365,7 +365,7 @@ static int acrnctl_do_add(int argc, char *argv[])
vm_exist: vm_exist:
get_vmname: 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"); printf("WARN: cmd is truncated\n");
} else } else
system(cmd); system(cmd);