Make modulecmd_argtype_to_str return values constant

The function needlessly allocated memory for the type strings.
This commit is contained in:
Markus Mäkelä 2017-05-29 14:59:30 +03:00
parent 948a059004
commit 7baa52b763
3 changed files with 21 additions and 38 deletions

View File

@ -263,6 +263,6 @@ bool modulecmd_foreach(const char *domain_re, const char *ident_re,
* @param type Type to convert
* @return New string or NULL on memory allocation error
*/
char* modulecmd_argtype_to_str(modulecmd_arg_type_t *type);
const char* modulecmd_argtype_to_str(modulecmd_arg_type_t *type);
MXS_END_DECLS

View File

@ -625,50 +625,52 @@ bool modulecmd_foreach(const char *domain_re, const char *ident_re,
return rval;
}
char* modulecmd_argtype_to_str(modulecmd_arg_type_t *type)
#define format_type(a, b) (MODULECMD_ARG_IS_REQUIRED(a) ? b : "[" b "]")
const char* modulecmd_argtype_to_str(modulecmd_arg_type_t *type)
{
const char *strtype = "UNKNOWN";
const char* rval = "UNKNOWN";
switch (MODULECMD_GET_TYPE(type))
{
case MODULECMD_ARG_NONE:
strtype = "NONE";
rval = format_type(type, "NONE");
break;
case MODULECMD_ARG_STRING:
strtype = "STRING";
rval = format_type(type, "STRING");
break;
case MODULECMD_ARG_BOOLEAN:
strtype = "BOOLEAN";
rval = format_type(type, "BOOLEAN");
break;
case MODULECMD_ARG_SERVICE:
strtype = "SERVICE";
rval = format_type(type, "SERVICE");
break;
case MODULECMD_ARG_SERVER:
strtype = "SERVER";
rval = format_type(type, "SERVER");
break;
case MODULECMD_ARG_SESSION:
strtype = "SESSION";
rval = format_type(type, "SESSION");
break;
case MODULECMD_ARG_DCB:
strtype = "DCB";
rval = format_type(type, "DCB");
break;
case MODULECMD_ARG_MONITOR:
strtype = "MONITOR";
rval = format_type(type, "MONITOR");
break;
case MODULECMD_ARG_FILTER:
strtype = "FILTER";
rval = format_type(type, "FILTER");
break;
case MODULECMD_ARG_OUTPUT:
strtype = "OUTPUT";
rval = format_type(type, "OUTPUT");
break;
default:
@ -677,16 +679,6 @@ char* modulecmd_argtype_to_str(modulecmd_arg_type_t *type)
break;
}
size_t slen = strlen(strtype);
size_t extra = MODULECMD_ARG_IS_REQUIRED(type) ? 0 : 2;
char *rval = (char*)MXS_MALLOC(slen + extra + 1);
if (rval)
{
const char *fmtstr = extra ? "[%s]" : "%s";
sprintf(rval, fmtstr, strtype);
}
return rval;
}

View File

@ -330,13 +330,9 @@ bool listfuncs_cb(const MODULECMD *cmd, void *data)
if (MODULECMD_GET_TYPE(type) != MODULECMD_ARG_OUTPUT)
{
char *t = modulecmd_argtype_to_str(&cmd->arg_types[i]);
if (t)
{
dcb_printf(dcb, "%s%s", t, i < cmd->arg_count_max - 1 ? " " : "");
MXS_FREE(t);
}
dcb_printf(dcb, "%s%s",
modulecmd_argtype_to_str(&cmd->arg_types[i]),
i < cmd->arg_count_max - 1 ? " " : "");
}
}
@ -348,14 +344,9 @@ bool listfuncs_cb(const MODULECMD *cmd, void *data)
if (MODULECMD_GET_TYPE(type) != MODULECMD_ARG_OUTPUT)
{
char *t = modulecmd_argtype_to_str(&cmd->arg_types[i]);
if (t)
{
dcb_printf(dcb, " %s - %s\n", t, cmd->arg_types[i].description);
MXS_FREE(t);
}
dcb_printf(dcb, " %s - %s\n",
modulecmd_argtype_to_str(&cmd->arg_types[i]),
cmd->arg_types[i].description);
}
}