return 0;
}
+
+typedef enum {
+ VIR_CPU_ADD_FEATURE_MODE_EXCLUSIVE, /* Fail if feature exists */
+ VIR_CPU_ADD_FEATURE_MODE_UPDATE, /* Add feature or update policy */
+} virCPUDefAddFeatureMode;
+
static int
virCPUDefAddFeatureInternal(virCPUDefPtr def,
const char *name,
int policy,
- bool update)
+ virCPUDefAddFeatureMode mode)
{
virCPUFeatureDefPtr feat;
policy = -1;
if ((feat = virCPUDefFindFeature(def, name))) {
- if (update) {
+ switch (mode) {
+ case VIR_CPU_ADD_FEATURE_MODE_UPDATE:
feat->policy = policy;
return 0;
- }
-
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("CPU feature '%s' specified more than once"),
- name);
- return -1;
+ case VIR_CPU_ADD_FEATURE_MODE_EXCLUSIVE:
+ default:
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("CPU feature '%s' specified more than once"),
+ name);
+ return -1;
+ }
}
if (VIR_RESIZE_N(def->features, def->nfeatures_max,
const char *name,
int policy)
{
- return virCPUDefAddFeatureInternal(def, name, policy, true);
+ return virCPUDefAddFeatureInternal(def, name, policy,
+ VIR_CPU_ADD_FEATURE_MODE_UPDATE);
}
int
const char *name,
int policy)
{
- return virCPUDefAddFeatureInternal(def, name, policy, false);
+ return virCPUDefAddFeatureInternal(def, name, policy,
+ VIR_CPU_ADD_FEATURE_MODE_EXCLUSIVE);
}