From: Matthias Bolte Date: Sun, 29 Aug 2010 17:17:10 +0000 (+0200) Subject: esx: Fix generator for string return values X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=1504cc4f02610aa7760cdc4d74c59af60356f0c9;p=libvirt.git esx: Fix generator for string return values Distinguish between strings as parameters (const char *) and strings as return values (char **). --- diff --git a/src/esx/esx_vi_generator.py b/src/esx/esx_vi_generator.py index 411fd80d31..4e91c4db9c 100755 --- a/src/esx/esx_vi_generator.py +++ b/src/esx/esx_vi_generator.py @@ -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" diff --git a/src/esx/esx_vi_methods.c b/src/esx/esx_vi_methods.c index 56d2e5839f..cba04249ac 100644 --- a/src/esx/esx_vi_methods.c +++ b/src/esx/esx_vi_methods.c @@ -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) },