Print the actual unknown type name instead of <other> for AnyType objects.
---
src/esx/esx_vi.c | 2 +-
src/esx/esx_vi_types.c | 36 +++++++++++++++++++++++++-----------
src/esx/esx_vi_types.h | 1 +
3 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c
index b1b5d70..9fa37e1 100644
--- a/src/esx/esx_vi.c
+++ b/src/esx/esx_vi.c
@@ -1481,7 +1481,7 @@ esxVI_Enumeration_CastFromAnyType(const esxVI_Enumeration
*enumeration,
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Expecting type '%s' but found
'%s'"),
esxVI_Type_ToString(enumeration->type),
- esxVI_Type_ToString(anyType->type));
+ esxVI_AnyType_TypeToString(anyType));
return -1;
}
diff --git a/src/esx/esx_vi_types.c b/src/esx/esx_vi_types.c
index 9e67eff..cbc92d6 100644
--- a/src/esx/esx_vi_types.c
+++ b/src/esx/esx_vi_types.c
@@ -533,8 +533,8 @@
* Macros to implement dynamic dispatched functions
*/
-#define ESX_VI__TEMPLATE__DISPATCH(_actual_type, __type, _dispatch, \
- _error_return) \
+#define ESX_VI__TEMPLATE__DISPATCH(_actual_type, _actual_type_name, __type, \
+ _dispatch, _error_return) \
switch (_actual_type) { \
_dispatch \
\
@@ -543,8 +543,8 @@
\
default: \
virReportError(VIR_ERR_INTERNAL_ERROR, \
- _("Call to %s for unexpected type '%s'"),
__FUNCTION__,\
- esxVI_Type_ToString(_actual_type)); \
+ _("Call to %s for unexpected type '%s'"),
\
+ __FUNCTION__, _actual_type_name); \
return _error_return; \
}
@@ -586,7 +586,9 @@
#define ESX_VI__TEMPLATE__DYNAMIC_FREE(__type, _dispatch, _body) \
ESX_VI__TEMPLATE__FREE(__type, \
- ESX_VI__TEMPLATE__DISPATCH(item->_type, __type, _dispatch, \
+ ESX_VI__TEMPLATE__DISPATCH(item->_type, \
+ esxVI_Type_ToString(item->_type), \
+ __type, _dispatch, \
/* nothing */) \
_body)
@@ -620,14 +622,18 @@
#define ESX_VI__TEMPLATE__DYNAMIC_CAST_FROM_ANY_TYPE(__type, _dispatch) \
ESX_VI__TEMPLATE__CAST_FROM_ANY_TYPE_EXTRA(__type, esxVI_##__type, \
- ESX_VI__TEMPLATE__DISPATCH(anyType->type, __type, _dispatch, -1), \
+ ESX_VI__TEMPLATE__DISPATCH(anyType->type, \
+ esxVI_AnyType_TypeToString(anyType), \
+ __type, _dispatch, -1), \
/* nothing */)
#define ESX_VI__TEMPLATE__DYNAMIC_SERIALIZE(__type, _dispatch, _serialize) \
ESX_VI__TEMPLATE__SERIALIZE_EXTRA(__type, \
- ESX_VI__TEMPLATE__DISPATCH(item->_type, __type, _dispatch, -1), \
+ ESX_VI__TEMPLATE__DISPATCH(item->_type, \
+ esxVI_Type_ToString(item->_type), \
+ __type, _dispatch, -1), \
_serialize)
@@ -683,7 +689,7 @@ esxVI_GetActualObjectType(xmlNodePtr node, esxVI_Type baseType,
*actualType = esxVI_Type_FromString(type);
- if (*actualType == esxVI_Type_Undefined) {
+ if (*actualType == esxVI_Type_Undefined || *actualType == esxVI_Type_Other) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unknown value '%s' for %s 'type'
property"),
type, esxVI_Type_ToString(baseType));
@@ -862,6 +868,16 @@ ESX_VI__TEMPLATE__FREE(AnyType,
VIR_FREE(item->value);
})
+const char *
+esxVI_AnyType_TypeToString(esxVI_AnyType *anyType)
+{
+ if (anyType->type == esxVI_Type_Other) {
+ return anyType->other;
+ } else {
+ return esxVI_Type_ToString(anyType->type);
+ }
+}
+
int
esxVI_AnyType_ExpectType(esxVI_AnyType *anyType, esxVI_Type type)
{
@@ -869,9 +885,7 @@ esxVI_AnyType_ExpectType(esxVI_AnyType *anyType, esxVI_Type type)
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Expecting type '%s' but found
'%s'"),
esxVI_Type_ToString(type),
- anyType->type != esxVI_Type_Other
- ? esxVI_Type_ToString(anyType->type)
- : anyType->other);
+ esxVI_AnyType_TypeToString(anyType));
return -1;
}
diff --git a/src/esx/esx_vi_types.h b/src/esx/esx_vi_types.h
index 3d843bf..d412a8f 100644
--- a/src/esx/esx_vi_types.h
+++ b/src/esx/esx_vi_types.h
@@ -154,6 +154,7 @@ struct _esxVI_AnyType {
int esxVI_AnyType_Alloc(esxVI_AnyType **anyType);
void esxVI_AnyType_Free(esxVI_AnyType **anyType);
+const char *esxVI_AnyType_TypeToString(esxVI_AnyType *anyType);
int esxVI_AnyType_ExpectType(esxVI_AnyType *anyType, esxVI_Type type);
int esxVI_AnyType_DeepCopy(esxVI_AnyType **dest, esxVI_AnyType *src);
int esxVI_AnyType_Deserialize(xmlNodePtr node, esxVI_AnyType **anyType);
--
1.7.4.1