summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Štetiar <ynezz@true.cz>2019-12-07 22:56:29 +0100
committerPetr Štetiar <ynezz@true.cz>2019-12-07 23:40:02 +0100
commitcca6f105fae201b8cb91c4551a3460028d388a35 (patch)
tree0a0293bf25b9f7f846e57cfba556e68d9ffabda3
parent750b046eb77f04f82389a8af089a4945ca2d378f (diff)
downloaduci-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.c51
1 files changed, 19 insertions, 32 deletions
diff --git a/libuci.c b/libuci.c
index a9e70e8..140edf2 100644
--- a/libuci.c
+++ b/libuci.c
@@ -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)