diff options
author | Petr Štetiar <ynezz@true.cz> | 2019-12-07 22:56:29 +0100 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2019-12-07 23:40:02 +0100 |
commit | cca6f105fae201b8cb91c4551a3460028d388a35 (patch) | |
tree | 0a0293bf25b9f7f846e57cfba556e68d9ffabda3 | |
parent | 750b046eb77f04f82389a8af089a4945ca2d378f (diff) | |
download | uci-cca6f105fae201b8cb91c4551a3460028d388a35.tar.gz |
libuci: refactor uci_get_errorstr
* replace strange error_info[0]=0 with complete zeroing of the buffer
* make the function body shorter and more clear, decrease indentation
levels
* fix format string warnings:
libuci.c:172:24: error: format string is not a string literal [-Werror,-Wformat-nonliteral]
libuci.c:181:19: error: format string is not a string literal [-Werror,-Wformat-nonliteral]
Reported-by: Rosen Penev <rosenp@gmail.com>
Signed-off-by: Petr Štetiar <ynezz@true.cz>
-rw-r--r-- | libuci.c | 51 |
1 files changed, 19 insertions, 32 deletions
@@ -140,50 +140,37 @@ uci_perror(struct uci_context *ctx, const char *str) void uci_get_errorstr(struct uci_context *ctx, char **dest, const char *prefix) { - static char error_info[128]; + static char error_info[128] = { 0 }; int err; - const char *format = - "%s%s" /* prefix */ - "%s%s" /* function */ - "%s" /* error */ - "%s"; /* details */ - - error_info[0] = 0; - - if (!ctx) - err = UCI_ERR_INVAL; - else - err = ctx->err; + err = ctx ? ctx->err : UCI_ERR_INVAL; if ((err < 0) || (err >= UCI_ERR_LAST)) err = UCI_ERR_UNKNOWN; - switch (err) { - case UCI_ERR_PARSE: - if (ctx->pctx) { - snprintf(error_info, sizeof(error_info) - 1, " (%s) at line %d, byte %d", (ctx->pctx->reason ? ctx->pctx->reason : "unknown"), ctx->pctx->line, ctx->pctx->byte); - break; - } - break; - default: - break; + if (ctx && ctx->pctx && (err == UCI_ERR_PARSE)) { + snprintf(error_info, sizeof(error_info) - 1, " (%s) at line %d, byte %d", + (ctx->pctx->reason ? ctx->pctx->reason : "unknown"), + ctx->pctx->line, ctx->pctx->byte); } - if (dest) { - err = asprintf(dest, format, - (prefix ? prefix : ""), (prefix ? ": " : ""), - (ctx && ctx->func ? ctx->func : ""), (ctx && ctx->func ? ": " : ""), - uci_errstr[err], - error_info); - if (err < 0) - *dest = NULL; - } else { + + if (!dest) { strcat(error_info, "\n"); - fprintf(stderr, format, + fprintf(stderr, "%s%s%s%s%s%s", (prefix ? prefix : ""), (prefix ? ": " : ""), (ctx && ctx->func ? ctx->func : ""), (ctx && ctx->func ? ": " : ""), uci_errstr[err], error_info); + return; } + + err = asprintf(dest, "%s%s%s%s%s%s", + (prefix ? prefix : ""), (prefix ? ": " : ""), + (ctx && ctx->func ? ctx->func : ""), (ctx && ctx->func ? ": " : ""), + uci_errstr[err], + error_info); + + if (err < 0) + *dest = NULL; } int uci_list_configs(struct uci_context *ctx, char ***list) |