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];
int ret;
if (check_dir("/opt") || check_dir("/opt/acrn"))
return;
ret = check_dir(ACRNCTL_OPT_ROOT);
if (ret) {
pdebug();

View File

@ -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);