Add size type to module parameters
The type represents byte sizes used for configuring buffers and file sizes. The supported suffixes for binary units are k, m, g and t in both upper and lower case.
This commit is contained in:
@ -245,6 +245,22 @@ bool config_get_bool(const CONFIG_PARAMETER *params, const char *key);
|
|||||||
*/
|
*/
|
||||||
int config_get_integer(const CONFIG_PARAMETER *params, const char *key);
|
int config_get_integer(const CONFIG_PARAMETER *params, const char *key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get a size in bytes
|
||||||
|
*
|
||||||
|
* The value can have either one of the IEC binary prefixes or SI prefixes as
|
||||||
|
* a suffix. For example, the value 1Ki will be converted to 1024 bytes whereas
|
||||||
|
* 1k will be converted to 1000 bytes. Supported SI suffix values are k, m, g and t
|
||||||
|
* in both lower and upper case. Supported IEC binary suffix values are
|
||||||
|
* Ki, Mi, Gi and Ti both in upper and lower case.
|
||||||
|
*
|
||||||
|
* @param params List of configuration parameters
|
||||||
|
* @param key Parameter name
|
||||||
|
*
|
||||||
|
* @return Number of bytes or 0 if no parameter was found
|
||||||
|
*/
|
||||||
|
uint64_t config_get_size(const CONFIG_PARAMETER *params, const char *key);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get a string value
|
* @brief Get a string value
|
||||||
*
|
*
|
||||||
|
|||||||
@ -72,6 +72,7 @@ enum mxs_module_param_type
|
|||||||
{
|
{
|
||||||
MXS_MODULE_PARAM_COUNT, /**< Non-negative number */
|
MXS_MODULE_PARAM_COUNT, /**< Non-negative number */
|
||||||
MXS_MODULE_PARAM_INT, /**< Integer number */
|
MXS_MODULE_PARAM_INT, /**< Integer number */
|
||||||
|
MXS_MODULE_PARAM_SIZE, /**< Size in bytes */
|
||||||
MXS_MODULE_PARAM_BOOL, /**< Boolean value */
|
MXS_MODULE_PARAM_BOOL, /**< Boolean value */
|
||||||
MXS_MODULE_PARAM_STRING, /**< String value */
|
MXS_MODULE_PARAM_STRING, /**< String value */
|
||||||
MXS_MODULE_PARAM_ENUM, /**< Enumeration of string values */
|
MXS_MODULE_PARAM_ENUM, /**< Enumeration of string values */
|
||||||
|
|||||||
@ -952,6 +952,69 @@ int config_get_integer(const CONFIG_PARAMETER *params, const char *key)
|
|||||||
return *value ? strtol(value, NULL, 10) : 0;
|
return *value ? strtol(value, NULL, 10) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t config_get_size(const CONFIG_PARAMETER *params, const char *key)
|
||||||
|
{
|
||||||
|
const char *value = config_get_value_string(params, key);
|
||||||
|
char *end;
|
||||||
|
uint64_t size = strtoll(value, &end, 10);
|
||||||
|
|
||||||
|
switch (*end)
|
||||||
|
{
|
||||||
|
case 'T':
|
||||||
|
case 't':
|
||||||
|
if (*(end + 1) == 'i')
|
||||||
|
{
|
||||||
|
size *= 1024ULL * 1024ULL * 1024ULL * 1024ULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size *= 1000ULL * 1000ULL * 1000ULL * 1000ULL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'G':
|
||||||
|
case 'g':
|
||||||
|
if (*(end + 1) == 'i')
|
||||||
|
{
|
||||||
|
size *= 1024ULL * 1024ULL * 1024ULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size *= 1000ULL * 1000ULL * 1000ULL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'M':
|
||||||
|
case 'm':
|
||||||
|
if (*(end + 1) == 'i')
|
||||||
|
{
|
||||||
|
size *= 1024ULL * 1024ULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size *= 1000ULL * 1000ULL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'K':
|
||||||
|
case 'k':
|
||||||
|
if (*(end + 1) == 'i')
|
||||||
|
{
|
||||||
|
size *= 1024ULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size *= 1000ULL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
const char* config_get_string(const CONFIG_PARAMETER *params, const char *key)
|
const char* config_get_string(const CONFIG_PARAMETER *params, const char *key)
|
||||||
{
|
{
|
||||||
return config_get_value_string(params, key);
|
return config_get_value_string(params, key);
|
||||||
@ -3141,6 +3204,37 @@ bool config_param_is_valid(const MXS_MODULE_PARAM *params, const char *key,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MXS_MODULE_PARAM_SIZE:
|
||||||
|
strtoll(value, &endptr, 10);
|
||||||
|
if (endptr != value)
|
||||||
|
{
|
||||||
|
switch (*endptr)
|
||||||
|
{
|
||||||
|
case 'T':
|
||||||
|
case 't':
|
||||||
|
case 'G':
|
||||||
|
case 'g':
|
||||||
|
case 'M':
|
||||||
|
case 'm':
|
||||||
|
case 'K':
|
||||||
|
case 'k':
|
||||||
|
if (*endptr == '\0' ||
|
||||||
|
(*endptr == 'i' && *(endptr + 1) == '\0'))
|
||||||
|
{
|
||||||
|
valid = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '\0':
|
||||||
|
valid = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case MXS_MODULE_PARAM_BOOL:
|
case MXS_MODULE_PARAM_BOOL:
|
||||||
if (config_truth_value(value) != -1)
|
if (config_truth_value(value) != -1)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user