int vzInitVersion(vzDriverPtr driver) { char *output, *sVer, *tmp; const char *searchStr = "prlsrvctl version "; int ret = -1; output = vzGetOutput(PRLSRVCTL, "--help", NULL); if (!output) { vzParseError(); goto cleanup; } if (!(sVer = strstr(output, searchStr))) { vzParseError(); goto cleanup; } sVer = sVer + strlen(searchStr); /* parallels server has versions number like 6.0.17977.782218 or 7.0.0, * In libvirt we handle only first two numbers. */ if (!(tmp = strchr(sVer, '.'))) { vzParseError(); goto cleanup; } if (!(tmp = strchr(tmp + 1, '.'))) { vzParseError(); goto cleanup; } tmp[0] = '\0'; if (virParseVersionString(sVer, &(driver->vzVersion), true) < 0) { vzParseError(); goto cleanup; } vzInitCaps(driver->vzVersion, &driver->vzCaps); ret = 0; cleanup: VIR_FREE(output); return ret; }
static int dnsmasqCapsSetFromBuffer(dnsmasqCapsPtr caps, const char *buf) { const char *p; caps->noRefresh = true; p = STRSKIP(buf, DNSMASQ_VERSION_STR); if (!p) goto fail; virSkipSpaces(&p); if (virParseVersionString(p, &caps->version, true) < 0) goto fail; if (strstr(buf, "--bind-dynamic")) dnsmasqCapsSet(caps, DNSMASQ_CAPS_BIND_DYNAMIC); /* if this string is a part of the --version output, dnsmasq * has been patched to use SO_BINDTODEVICE when listening, * so that it will only accept requests that arrived on the * listening interface(s) */ if (strstr(buf, "--bind-interfaces with SO_BINDTODEVICE")) dnsmasqCapsSet(caps, DNSMASQ_CAPS_BINDTODEVICE); if (strstr(buf, "--ra-param")) dnsmasqCapsSet(caps, DNSMASQ_CAPS_RA_PARAM); VIR_INFO("dnsmasq version is %d.%d, --bind-dynamic is %spresent, " "SO_BINDTODEVICE is %sin use, --ra-param is %spresent", (int)caps->version / 1000000, (int)(caps->version % 1000000) / 1000, dnsmasqCapsGet(caps, DNSMASQ_CAPS_BIND_DYNAMIC) ? "" : "NOT ", dnsmasqCapsGet(caps, DNSMASQ_CAPS_BINDTODEVICE) ? "" : "NOT ", dnsmasqCapsGet(caps, DNSMASQ_CAPS_RA_PARAM) ? "" : "NOT "); return 0; fail: p = strchrnul(buf, '\n'); virReportError(VIR_ERR_INTERNAL_ERROR, _("cannot parse %s version number in '%.*s'"), caps->binaryPath, (int) (p - buf), buf); return -1; }
static int bhyveConnectGetVersion(virConnectPtr conn ATTRIBUTE_UNUSED, unsigned long *version) { struct utsname ver; if (virConnectGetVersionEnsureACL(conn) < 0) return -1; uname(&ver); if (virParseVersionString(ver.release, version, true) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unknown release: %s"), ver.release); return -1; } return 0; }
int vmwareParseVersionStr(int type, const char *verbuf, unsigned long *version) { const char *pattern; const char *tmp; switch (type) { case VMWARE_DRIVER_PLAYER: pattern = "VMware Player "; break; case VMWARE_DRIVER_WORKSTATION: pattern = "VMware Workstation "; break; case VMWARE_DRIVER_FUSION: pattern = "\nVMware Fusion Information:\nVMware Fusion "; break; default: virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid driver type: %d"), type); return -1; } if ((tmp = strstr(verbuf, pattern)) == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, _("cannot find version pattern \"%s\""), pattern); return -1; } if ((tmp = STRSKIP(tmp, pattern)) == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, _("failed to parse %sversion"), pattern); return -1; } if (virParseVersionString(tmp, version, false) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("version parsing error")); return -1; } return 0; }
int vmwareExtractVersion(struct vmware_driver *driver) { unsigned long version = 0; char *tmp; int ret = -1; virCommandPtr cmd; char * outbuf = NULL; const char * bin = (driver->type == TYPE_PLAYER) ? "vmplayer" : "vmware"; const char * pattern = (driver->type == TYPE_PLAYER) ? "VMware Player " : "VMware Workstation "; cmd = virCommandNewArgList(bin, "-v", NULL); virCommandSetOutputBuffer(cmd, &outbuf); if (virCommandRun(cmd, NULL) < 0) goto cleanup; if ((tmp = STRSKIP(outbuf, pattern)) == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, _("failed to parse %s version"), bin); goto cleanup; } if (virParseVersionString(tmp, &version, false) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("version parsing error")); goto cleanup; } driver->version = version; ret = 0; cleanup: virCommandFree(cmd); VIR_FREE(outbuf); return ret; }
static int openvzExtractVersionInfo(const char *cmdstr, int *retversion) { int ret = -1; unsigned long version; char *help = NULL; char *tmp; virCommandPtr cmd = virCommandNewArgList(cmdstr, "--help", NULL); if (retversion) *retversion = 0; virCommandAddEnvString(cmd, "LC_ALL=C"); virCommandSetOutputBuffer(cmd, &help); if (virCommandRun(cmd, NULL) < 0) goto cleanup; tmp = help; /* expected format: vzctl version <major>.<minor>.<micro> */ if ((tmp = STRSKIP(tmp, "vzctl version ")) == NULL) goto cleanup; if (virParseVersionString(tmp, &version, true) < 0) goto cleanup; if (retversion) *retversion = version; ret = 0; cleanup: virCommandFree(cmd); VIR_FREE(help); return ret; }