Skip to content

Commit f99c5b0

Browse files
committed
[C-Curl] Client generator does not handle float properly (OpenAPITools#21092)
- Change function signature to float* - Change generator to convert float to string - Similar change for double and long
1 parent 65c3126 commit f99c5b0

1 file changed

Lines changed: 27 additions & 1 deletion

File tree

modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "{{classname}}.h"
55

66
#define MAX_NUMBER_LENGTH 16
7+
#define MAX_NUMBER_LENGTH_FLOAT 32
8+
#define MAX_NUMBER_LENGTH_LONG 21
79
#define MAX_BUFFER_LENGTH 4096
810

911
{{#operations}}
@@ -94,7 +96,7 @@ end:
9496
//
9597
{{/notes}}
9698
{{#returnType}}{{#returnTypeIsPrimitive}}{{#returnSimpleType}}{{{.}}}{{#returnProperty}}{{#isString}}*{{/isString}}{{/returnProperty}}{{/returnSimpleType}}{{^returnSimpleType}}{{#isArray}}{{{.}}}_t*{{/isArray}}{{#isMap}}{{{.}}}{{/isMap}}{{/returnSimpleType}}{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}{{#returnProperty}}{{^isEnum}}{{{returnType}}}_t*{{/isEnum}}{{#isEnum}}{{projectName}}_{{{returnType}}}_{{returnEnumName}}_e{{/isEnum}}{{/returnProperty}}{{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}void{{/returnType}}
97-
{{{classname}}}_{{{operationId}}}(apiClient_t *apiClient{{#allParams}}, {{#isPrimitiveType}}{{#isNumber}}{{{dataType}}} {{/isNumber}}{{#isLong}}{{{dataType}}} {{/isLong}}{{#isInteger}}{{{dataType}}} *{{/isInteger}}{{#isDouble}}{{{dataType}}} {{/isDouble}}{{#isFloat}}{{{dataType}}} {{/isFloat}}{{#isBoolean}}{{dataType}} *{{/isBoolean}}{{#isEnum}}{{#isString}}{{projectName}}_{{operationId}}_{{baseName}}_e {{/isString}}{{/isEnum}}{{^isEnum}}{{#isString}}{{{dataType}}} *{{/isString}}{{/isEnum}}{{#isByteArray}}{{{dataType}}} *{{/isByteArray}}{{#isDate}}{{{dataType}}} {{/isDate}}{{#isDateTime}}{{{dataType}}} {{/isDateTime}}{{#isFile}}{{{dataType}}} {{/isFile}}{{#isFreeFormObject}}{{dataType}}_t *{{/isFreeFormObject}}{{/isPrimitiveType}}{{^isArray}}{{^isPrimitiveType}}{{#isModel}}{{#isEnum}}{{datatypeWithEnum}}_e {{/isEnum}}{{^isEnum}}{{{dataType}}}_t *{{/isEnum}}{{/isModel}}{{^isModel}}{{#isEnum}}{{datatypeWithEnum}}_e {{/isEnum}}{{/isModel}}{{#isUuid}}{{dataType}} *{{/isUuid}}{{#isEmail}}{{dataType}} {{/isEmail}}{{/isPrimitiveType}}{{/isArray}}{{#isContainer}}{{#isArray}}{{dataType}}_t *{{/isArray}}{{#isMap}}{{dataType}} {{/isMap}}{{/isContainer}}{{{paramName}}}{{/allParams}})
99+
{{{classname}}}_{{{operationId}}}(apiClient_t *apiClient{{#allParams}}, {{#isPrimitiveType}}{{#isNumber}}{{{dataType}}} *{{/isNumber}}{{#isLong}}{{{dataType}}} *{{/isLong}}{{#isInteger}}{{{dataType}}} *{{/isInteger}}{{#isDouble}}{{{dataType}}} *{{/isDouble}}{{#isFloat}}{{{dataType}}} *{{/isFloat}}{{#isBoolean}}{{dataType}} *{{/isBoolean}}{{#isEnum}}{{#isString}}{{projectName}}_{{operationId}}_{{baseName}}_e {{/isString}}{{/isEnum}}{{^isEnum}}{{#isString}}{{{dataType}}} *{{/isString}}{{/isEnum}}{{#isByteArray}}{{{dataType}}} *{{/isByteArray}}{{#isDate}}{{{dataType}}} {{/isDate}}{{#isDateTime}}{{{dataType}}} {{/isDateTime}}{{#isFile}}{{{dataType}}} {{/isFile}}{{#isFreeFormObject}}{{dataType}}_t *{{/isFreeFormObject}}{{/isPrimitiveType}}{{^isArray}}{{^isPrimitiveType}}{{#isModel}}{{#isEnum}}{{datatypeWithEnum}}_e {{/isEnum}}{{^isEnum}}{{{dataType}}}_t *{{/isEnum}}{{/isModel}}{{^isModel}}{{#isEnum}}{{datatypeWithEnum}}_e {{/isEnum}}{{/isModel}}{{#isUuid}}{{dataType}} *{{/isUuid}}{{#isEmail}}{{dataType}} {{/isEmail}}{{/isPrimitiveType}}{{/isArray}}{{#isContainer}}{{#isArray}}{{dataType}}_t *{{/isArray}}{{#isMap}}{{dataType}} {{/isMap}}{{/isContainer}}{{{paramName}}}{{/allParams}})
98100
{
99101
list_t *localVarQueryParameters = {{#hasQueryParams}}list_createList();{{/hasQueryParams}}{{^hasQueryParams}}NULL;{{/hasQueryParams}}
100102
list_t *localVarHeaderParameters = {{#hasHeaderParams}}list_createList();{{/hasHeaderParams}}{{^hasHeaderParams}}NULL;{{/hasHeaderParams}}
@@ -239,6 +241,22 @@ end:
239241
{{/isArray}}
240242
{{^isArray}}
241243
keyQuery_{{{paramName}}} = strdup("{{{baseName}}}");
244+
{{#isNumber}}
245+
valueQuery_{{{paramName}}} = calloc(1,MAX_NUMBER_LENGTH_FLOAT);
246+
snprintf(valueQuery_{{{paramName}}}, MAX_NUMBER_LENGTH_FLOAT, "%f", *{{{paramName}}});
247+
{{/isNumber}}
248+
{{#isLong}}
249+
valueQuery_{{{paramName}}} = calloc(1,MAX_NUMBER_LENGTH_LONG);
250+
snprintf(valueQuery_{{{paramName}}}, MAX_NUMBER_LENGTH_LONG, "%ld", *{{{paramName}}});
251+
{{/isLong}}
252+
{{#isDouble}}
253+
valueQuery_{{{paramName}}} = calloc(1,MAX_NUMBER_LENGTH_FLOAT);
254+
snprintf(valueQuery_{{{paramName}}}, MAX_NUMBER_LENGTH_FLOAT, "%f", *{{{paramName}}});
255+
{{/isDouble}}
256+
{{#isFloat}}
257+
valueQuery_{{{paramName}}} = calloc(1,MAX_NUMBER_LENGTH_FLOAT);
258+
snprintf(valueQuery_{{{paramName}}}, MAX_NUMBER_LENGTH_FLOAT, "%f", *{{{paramName}}});
259+
{{/isFloat}}
242260
{{#isInteger}}
243261
valueQuery_{{{paramName}}} = calloc(1,MAX_NUMBER_LENGTH);
244262
snprintf(valueQuery_{{{paramName}}}, MAX_NUMBER_LENGTH, "%d", *{{{paramName}}});
@@ -249,7 +267,15 @@ end:
249267
{{/isBoolean}}
250268
{{^isInteger}}
251269
{{^isBoolean}}
270+
{{^isNumber}}
271+
{{^isLong}}
272+
{{^isDouble}}
273+
{{^isFloat}}
252274
valueQuery_{{{paramName}}} = {{#isString}}{{^isEnum}}strdup({{/isEnum}}{{/isString}}({{{paramName}}}){{#isString}}{{^isEnum}}){{/isEnum}}{{/isString}};
275+
{{/isFloat}}
276+
{{/isDouble}}
277+
{{/isLong}}
278+
{{/isNumber}}
253279
{{/isBoolean}}
254280
{{/isInteger}}
255281
keyPairQuery_{{paramName}} = keyValuePair_create(keyQuery_{{{paramName}}}, {{#isEnum}}strdup({{{operationId}}}_{{enumName}}_ToString(

0 commit comments

Comments
 (0)