diff --git a/src/libvirt_openvz.syms b/src/libvirt_openvz.syms index 11c5587f4b..1993eb5f14 100644 --- a/src/libvirt_openvz.syms +++ b/src/libvirt_openvz.syms @@ -1,7 +1,7 @@ # # These symbols are dependent upon --with-openvz via WITH_OPENVZ # - openvzReadConfigParam; openvzReadNetworkConf; openvzLocateConfFile; +openvzVEGetStringParam; diff --git a/src/openvz/openvz_util.c b/src/openvz/openvz_util.c index 1989ec53b1..a878dd6c08 100644 --- a/src/openvz/openvz_util.c +++ b/src/openvz/openvz_util.c @@ -26,6 +26,9 @@ #include "internal.h" #include "virterror_internal.h" +#include "command.h" +#include "datatypes.h" +#include "memory.h" #include "openvz_conf.h" #include "openvz_util.h" @@ -50,3 +53,32 @@ openvzKBPerPages(void) } return kb_per_pages; } + +char* +openvzVEGetStringParam(virDomainPtr domain, const char* param) +{ + int len; + char *output = NULL; + + virCommandPtr cmd = virCommandNewArgList(VZLIST, + "-o", + param, + domain->name, + "-H" , NULL); + + virCommandSetOutputBuffer(cmd, &output); + if (virCommandRun(cmd, NULL) < 0) { + VIR_FREE(output); + /* virCommandRun sets the virError */ + goto cleanup; + } + + /* delete trailing newline */ + len = strlen(output); + if (len && output[len - 1] == '\n') + output[len - 1] = '\0'; + +cleanup: + virCommandFree(cmd); + return output; +} diff --git a/src/openvz/openvz_util.h b/src/openvz/openvz_util.h index a0d9bbbddc..94c527f29e 100644 --- a/src/openvz/openvz_util.h +++ b/src/openvz/openvz_util.h @@ -24,5 +24,6 @@ # define OPENVZ_UTIL_H long openvzKBPerPages(void); +char *openvzVEGetStringParam(virDomainPtr dom, const char *param); #endif