The VMware driver supports multiple backends for the VMware Player and
VMware Workstation, convert this logic into enum and use VIR_ENUM_IMPL()
to provide conversions to and from strings.
---
src/vmware/vmware_conf.c | 11 ++++++++---
src/vmware/vmware_conf.h | 11 +++++++++--
src/vmware/vmware_driver.c | 21 ++++++++++-----------
3 files changed, 27 insertions(+), 16 deletions(-)
diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c
index e00c66c..3bb5610 100644
--- a/src/vmware/vmware_conf.c
+++ b/src/vmware/vmware_conf.c
@@ -35,6 +35,10 @@
#include "vmware_conf.h"
#include "virstring.h"
+VIR_ENUM_IMPL(vmwareDriver, VMWARE_DRIVER_LAST,
+ "player",
+ "ws");
+
/* Free all memory associated with a vmware_driver structure */
void
vmwareFreeDriver(struct vmware_driver *driver)
@@ -141,7 +145,7 @@ vmwareLoadDomains(struct vmware_driver *driver)
ctx.parseFileName = vmwareCopyVMXFileName;
cmd = virCommandNewArgList(VMRUN, "-T",
- driver->type == TYPE_PLAYER ? "player" :
"ws",
+ vmwareDriverTypeToString(driver->type),
"list", NULL);
virCommandSetOutputBuffer(cmd, &outbuf);
if (virCommandRun(cmd, NULL) < 0)
@@ -221,8 +225,9 @@ vmwareExtractVersion(struct vmware_driver *driver)
int ret = -1;
virCommandPtr cmd;
char * outbuf = NULL;
- const char * bin = (driver->type == TYPE_PLAYER) ? "vmplayer" :
"vmware";
- const char * pattern = (driver->type == TYPE_PLAYER) ?
+ const char * bin = (driver->type == VMWARE_DRIVER_PLAYER) ?
+ "vmplayer" : "vmware";
+ const char * pattern = (driver->type == VMWARE_DRIVER_PLAYER) ?
"VMware Player " : "VMware Workstation ";
cmd = virCommandNewArgList(bin, "-v", NULL);
diff --git a/src/vmware/vmware_conf.h b/src/vmware/vmware_conf.h
index 6666eaf..978f22b 100644
--- a/src/vmware/vmware_conf.h
+++ b/src/vmware/vmware_conf.h
@@ -1,5 +1,6 @@
/*---------------------------------------------------------------------------*/
/* Copyright 2010, diateam (
www.diateam.net)
+ * Copyright (c) 2013, Doug Goldstein (cardoe(a)cardoe.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -30,8 +31,14 @@
# define VIR_FROM_THIS VIR_FROM_VMWARE
# define PROGRAM_SENTINEL ((char *)0x1)
-# define TYPE_PLAYER 0
-# define TYPE_WORKSTATION 1
+enum vmwareDriverType {
+ VMWARE_DRIVER_PLAYER = 0, /* VMware Player */
+ VMWARE_DRIVER_WORKSTATION = 1, /* VMware Workstation */
+
+ VMWARE_DRIVER_LAST, /* required last item */
+};
+
+VIR_ENUM_DECL(vmwareDriver)
struct vmware_driver {
virMutex lock;
diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c
index 74591d6..9d674b6 100644
--- a/src/vmware/vmware_driver.c
+++ b/src/vmware/vmware_driver.c
@@ -35,8 +35,6 @@
#include "vmware_driver.h"
#include "virstring.h"
-static const char *vmw_types[] = { "player", "ws" };
-
static void
vmwareDriverLock(struct vmware_driver *driver)
{
@@ -133,7 +131,7 @@ vmwareConnectOpen(virConnectPtr conn,
goto cleanup;
driver->type = STRNEQ(conn->uri->scheme, "vmwareplayer") ?
- TYPE_WORKSTATION : TYPE_PLAYER;
+ VMWARE_DRIVER_WORKSTATION : VMWARE_DRIVER_PLAYER;
if (!(driver->domains = virDomainObjListNew()))
goto cleanup;
@@ -202,7 +200,8 @@ vmwareUpdateVMStatus(struct vmware_driver *driver, virDomainObjPtr
vm)
int newState;
int ret = -1;
- cmd = virCommandNewArgList(VMRUN, "-T", vmw_types[driver->type],
+ cmd = virCommandNewArgList(VMRUN, "-T",
+ vmwareDriverTypeToString(driver->type),
"list", NULL);
virCommandSetOutputBuffer(cmd, &outbuf);
if (virCommandRun(cmd, NULL) < 0)
@@ -256,7 +255,7 @@ vmwareStopVM(struct vmware_driver *driver,
PROGRAM_SENTINEL, "soft", NULL
};
- vmwareSetSentinal(cmd, vmw_types[driver->type]);
+ vmwareSetSentinal(cmd, vmwareDriverTypeToString(driver->type));
vmwareSetSentinal(cmd, ((vmwareDomainPtr) vm->privateData)->vmxPath);
if (virRun(cmd, NULL) < 0) {
@@ -284,7 +283,7 @@ vmwareStartVM(struct vmware_driver *driver, virDomainObjPtr vm)
return -1;
}
- vmwareSetSentinal(cmd, vmw_types[driver->type]);
+ vmwareSetSentinal(cmd, vmwareDriverTypeToString(driver->type));
vmwareSetSentinal(cmd, vmxPath);
if (!((vmwareDomainPtr) vm->privateData)->gui)
vmwareSetSentinal(cmd, NOGUI);
@@ -451,7 +450,7 @@ vmwareDomainSuspend(virDomainPtr dom)
};
int ret = -1;
- if (driver->type == TYPE_PLAYER) {
+ if (driver->type == VMWARE_DRIVER_PLAYER) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("vmplayer does not support libvirt suspend/resume"
" (vmware pause/unpause) operation "));
@@ -468,7 +467,7 @@ vmwareDomainSuspend(virDomainPtr dom)
goto cleanup;
}
- vmwareSetSentinal(cmd, vmw_types[driver->type]);
+ vmwareSetSentinal(cmd, vmwareDriverTypeToString(driver->type));
vmwareSetSentinal(cmd, ((vmwareDomainPtr) vm->privateData)->vmxPath);
if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_RUNNING) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -500,7 +499,7 @@ vmwareDomainResume(virDomainPtr dom)
};
int ret = -1;
- if (driver->type == TYPE_PLAYER) {
+ if (driver->type == VMWARE_DRIVER_PLAYER) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("vmplayer does not support libvirt suspend/resume "
"(vmware pause/unpause) operation "));
@@ -517,7 +516,7 @@ vmwareDomainResume(virDomainPtr dom)
goto cleanup;
}
- vmwareSetSentinal(cmd, vmw_types[driver->type]);
+ vmwareSetSentinal(cmd, vmwareDriverTypeToString(driver->type));
vmwareSetSentinal(cmd, ((vmwareDomainPtr) vm->privateData)->vmxPath);
if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_PAUSED) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -562,7 +561,7 @@ vmwareDomainReboot(virDomainPtr dom, unsigned int flags)
}
vmxPath = ((vmwareDomainPtr) vm->privateData)->vmxPath;
- vmwareSetSentinal(cmd, vmw_types[driver->type]);
+ vmwareSetSentinal(cmd, vmwareDriverTypeToString(driver->type));
vmwareSetSentinal(cmd, vmxPath);
if (vmwareUpdateVMStatus(driver, vm) < 0)
--
1.8.1.5