mirror of https://gitee.com/openkylin/libvirt.git
esx: Fix generator for string return values
Distinguish between strings as parameters (const char *) and strings as return values (char **).
This commit is contained in:
parent
a9afbf4fc5
commit
1504cc4f02
|
@ -94,11 +94,11 @@ class Parameter:
|
|||
|
||||
def generate_return(self, offset = 0, end_of_line = ";"):
|
||||
if self.occurrence == OCCURRENCE__IGNORED:
|
||||
raise ValueError("invalid function parameteroccurrence value '%s'" % self.occurrence)
|
||||
raise ValueError("invalid function parameter occurrence value '%s'" % self.occurrence)
|
||||
else:
|
||||
string = " "
|
||||
string += " " * offset
|
||||
string += "%s*%s)%s" % (self.get_type_string(), self.name, end_of_line)
|
||||
string += "%s%s)%s" % (self.get_type_string(True), self.name, end_of_line)
|
||||
|
||||
while len(string) < 59:
|
||||
string += " "
|
||||
|
@ -124,15 +124,25 @@ class Parameter:
|
|||
return " ESX_VI__METHOD__PARAMETER__SERIALIZE(%s, %s)\n" % (self.type, self.name)
|
||||
|
||||
|
||||
def get_type_string(self):
|
||||
def get_type_string(self, as_return_value = False):
|
||||
string = ""
|
||||
|
||||
if self.type == "String" and \
|
||||
self.occurrence not in [OCCURRENCE__REQUIRED_LIST,
|
||||
OCCURRENCE__OPTIONAL_LIST]:
|
||||
return "const char *"
|
||||
if as_return_value:
|
||||
string += "char *"
|
||||
else:
|
||||
string += "const char *"
|
||||
elif self.is_enum():
|
||||
return "esxVI_%s " % self.type
|
||||
string += "esxVI_%s " % self.type
|
||||
else:
|
||||
return "esxVI_%s *" % self.type
|
||||
string += "esxVI_%s *" % self.type
|
||||
|
||||
if as_return_value:
|
||||
string += "*"
|
||||
|
||||
return string
|
||||
|
||||
|
||||
def get_occurrence_comment(self):
|
||||
|
@ -225,9 +235,11 @@ class Method:
|
|||
source += "),\n"
|
||||
|
||||
if self.returns is None:
|
||||
source += " void, None,\n"
|
||||
source += " void, /* nothing */, None,\n"
|
||||
elif self.returns.type == "String":
|
||||
source += " String, Value, %s,\n" % self.returns.get_occurrence_short_enum()
|
||||
else:
|
||||
source += " %s, %s,\n" % (self.returns.type, self.returns.get_occurrence_short_enum())
|
||||
source += " %s, /* nothing */, %s,\n" % (self.returns.type, self.returns.get_occurrence_short_enum())
|
||||
|
||||
source += "{\n"
|
||||
|
||||
|
|
|
@ -67,34 +67,34 @@
|
|||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__None(_type) \
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__None(_type, _suffix) \
|
||||
/* nothing */
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__RequiredItem(_type) \
|
||||
if (esxVI_##_type##_Deserialize(response->node, output) < 0) { \
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__RequiredItem(_type, _suffix) \
|
||||
if (esxVI_##_type##_Deserialize##_suffix(response->node, output) < 0) { \
|
||||
goto cleanup; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__RequiredList(_type) \
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__RequiredList(_type, _suffix) \
|
||||
if (esxVI_##_type##_DeserializeList(response->node, output) < 0) { \
|
||||
goto cleanup; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__OptionalItem(_type) \
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__OptionalItem(_type, _suffix) \
|
||||
if (response->node != NULL && \
|
||||
esxVI_##_type##_Deserialize(response->node, output) < 0) { \
|
||||
esxVI_##_type##_Deserialize##_suffix(response->node, output) < 0) { \
|
||||
goto cleanup; \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__OptionalList(_type) \
|
||||
#define ESX_VI__METHOD__DESERIALIZE_OUTPUT__OptionalList(_type, _suffix) \
|
||||
if (response->node != NULL && \
|
||||
esxVI_##_type##_DeserializeList(response->node, output) < 0) { \
|
||||
goto cleanup; \
|
||||
|
@ -103,7 +103,8 @@
|
|||
|
||||
|
||||
#define ESX_VI__METHOD(_name, _this_from_service, _parameters, _output_type, \
|
||||
_occurrence, _validate, _serialize) \
|
||||
_deserialize_suffix, _occurrence, _validate, \
|
||||
_serialize) \
|
||||
int \
|
||||
esxVI_##_name _parameters \
|
||||
{ \
|
||||
|
@ -139,7 +140,8 @@
|
|||
goto cleanup; \
|
||||
} \
|
||||
\
|
||||
ESX_VI__METHOD__DESERIALIZE_OUTPUT__##_occurrence(_output_type) \
|
||||
ESX_VI__METHOD__DESERIALIZE_OUTPUT__##_occurrence \
|
||||
(_output_type, _deserialize_suffix) \
|
||||
\
|
||||
result = 0; \
|
||||
\
|
||||
|
@ -284,7 +286,7 @@ ESX_VI__METHOD(ValidateMigration, /* special _this */,
|
|||
esxVI_ManagedObjectReference *pool, /* optional */
|
||||
esxVI_ManagedObjectReference *host, /* optional */
|
||||
esxVI_Event **output), /* optional, list */
|
||||
Event, OptionalList,
|
||||
Event, /* nothing */, OptionalList,
|
||||
{
|
||||
ESX_VI__METHOD__PARAMETER__REQUIRE(vm)
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue