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:
Markus Mäkelä
2018-05-03 13:23:01 +03:00
parent 8b5221e13a
commit 2bb6c84be0
2 changed files with 6 additions and 10 deletions

View File

@ -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);

View File

@ -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;
} }
/** /**