From: Martin Wilck <mwilck@xxxxxxxx> Create a macro for setting the reply length for string literals correctly, and use it where necessary. In cli_del_path(), don't change the function's return code if just the buffer allocation for the reply failed. Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> --- multipathd/cli_handlers.c | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c index 6765fcf..9606494 100644 --- a/multipathd/cli_handlers.c +++ b/multipathd/cli_handlers.c @@ -32,6 +32,12 @@ #include "foreign.h" #include "cli_handlers.h" +#define SET_REPLY_AND_LEN(__rep, __len, string_literal) \ + do { \ + *(__rep) = strdup(string_literal); \ + *(__len) = *(__rep) ? sizeof(string_literal) : 0; \ + } while (0) + int show_paths (char ** r, int * len, struct vectors * vecs, char * style, int pretty) @@ -802,8 +808,7 @@ cli_add_path (void * v, char ** reply, int * len, void * data) } return ev_add_path(pp, vecs, 1); blacklisted: - *reply = strdup("blacklisted\n"); - *len = strlen(*reply) + 1; + SET_REPLY_AND_LEN(reply, len, "blacklisted\n"); condlog(2, "%s: path blacklisted", param); return 0; } @@ -824,23 +829,10 @@ cli_del_path (void * v, char ** reply, int * len, void * data) return 1; } ret = ev_remove_path(pp, vecs, 1); - if (ret == REMOVE_PATH_DELAY) { - *reply = strdup("delayed\n"); - if (*reply) - *len = strlen(*reply) + 1; - else { - *len = 0; - ret = REMOVE_PATH_FAILURE; - } - } else if (ret == REMOVE_PATH_MAP_ERROR) { - *reply = strdup("map reload error. removed\n"); - if (*reply) - *len = strlen(*reply) + 1; - else { - *len = 0; - ret = REMOVE_PATH_FAILURE; - } - } + if (ret == REMOVE_PATH_DELAY) + SET_REPLY_AND_LEN(reply, len, "delayed\n"); + else if (ret == REMOVE_PATH_MAP_ERROR) + SET_REPLY_AND_LEN(reply, len, "map reload error. removed\n"); return (ret == REMOVE_PATH_FAILURE); } @@ -865,8 +857,7 @@ cli_add_map (void * v, char ** reply, int * len, void * data) invalid = 1; pthread_cleanup_pop(1); if (invalid) { - *reply = strdup("blacklisted\n"); - *len = strlen(*reply) + 1; + SET_REPLY_AND_LEN(reply, len, "blacklisted\n"); condlog(2, "%s: map blacklisted", param); return 1; } -- 2.31.1 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel