MXS-1847: Return value length in server_get_parameter
Returning the length of the value instead of a boolean allows the user to know when the parameter value exceeded the buffer size passed as the parameter.
This commit is contained in:
@ -357,7 +357,7 @@ extern void server_set_status_nolock(SERVER *server, uint64_t bit);
|
|||||||
extern void server_clear_status_nolock(SERVER *server, uint64_t bit);
|
extern void server_clear_status_nolock(SERVER *server, uint64_t bit);
|
||||||
extern void server_transfer_status(SERVER *dest_server, const SERVER *source_server);
|
extern void server_transfer_status(SERVER *dest_server, const SERVER *source_server);
|
||||||
extern void server_add_mon_user(SERVER *server, const char *user, const char *passwd);
|
extern void server_add_mon_user(SERVER *server, const char *user, const char *passwd);
|
||||||
extern bool server_get_parameter(const SERVER *server, const char *name, char* out, size_t size);
|
extern size_t server_get_parameter(const SERVER *server, const char *name, char* out, size_t size);
|
||||||
extern void server_update_credentials(SERVER *server, const char *user, const char *passwd);
|
extern void server_update_credentials(SERVER *server, const char *user, const char *passwd);
|
||||||
extern DCB* server_get_persistent(SERVER *server, const char *user, const char* ip, const char *protocol, int id);
|
extern DCB* server_get_persistent(SERVER *server, const char *user, const char* ip, const char *protocol, int id);
|
||||||
extern void server_update_address(SERVER *server, const char *address);
|
extern void server_update_address(SERVER *server, const char *address);
|
||||||
|
|||||||
@ -964,11 +964,11 @@ static void server_parameter_free(SERVER_PARAM *tofree)
|
|||||||
* @param out Buffer where value is stored, use NULL to check if the parameter exists
|
* @param out Buffer where value is stored, use NULL to check if the parameter exists
|
||||||
* @param size Size of @c out, ignored if @c out is NULL
|
* @param size Size of @c out, ignored if @c out is NULL
|
||||||
*
|
*
|
||||||
* @return True if parameter was found
|
* @return Length of the parameter value or 0 if parameter was not found
|
||||||
*/
|
*/
|
||||||
bool server_get_parameter(const SERVER *server, const char *name, char* out, size_t size)
|
size_t server_get_parameter(const SERVER *server, const char *name, char* out, size_t size)
|
||||||
{
|
{
|
||||||
bool found = false;
|
int len = 0;
|
||||||
SERVER_PARAM *param = server->parameters;
|
SERVER_PARAM *param = server->parameters;
|
||||||
spinlock_acquire(&server->lock);
|
spinlock_acquire(&server->lock);
|
||||||
|
|
||||||
@ -976,18 +976,14 @@ bool server_get_parameter(const SERVER *server, const char *name, char* out, siz
|
|||||||
{
|
{
|
||||||
if (strcmp(param->name, name) == 0 && param->active)
|
if (strcmp(param->name, name) == 0 && param->active)
|
||||||
{
|
{
|
||||||
if (out)
|
len = snprintf(out, out ? size : 0, "%s", param->value);
|
||||||
{
|
|
||||||
snprintf(out, size, "%s", param->value);
|
|
||||||
}
|
|
||||||
found = true;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
param = param->next;
|
param = param->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
spinlock_release(&server->lock);
|
spinlock_release(&server->lock);
|
||||||
return found;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user