[OpenWrt-Devel] [PATCH] uci: Fix Wformat-nonliteral warning

Jonas Gorski jonas.gorski at gmail.com
Tue Dec 3 08:27:10 EST 2019


On Tue, 3 Dec 2019 at 01:54, Rosen Penev <rosenp at gmail.com> wrote:
>
> A const char * variable is being passed as a format string. Unfortunately,
> this is not correct.
>
> A constant expression needs to be passed so that GCC can determine the
> types of the format properly.
>
> Also fixed a different warning that needs a printf attribute.
>
> Fixes:
>
> error: format not a string literal, argument types not checked
> [-Werror=format-nonliteral]
>   176 |    error_info);
>       |    ^~~~~~~~~~
> error: format not a string literal, argument types not checked
> [-Werror=format-nonliteral]
>   185 |    error_info);
>
> cli.c:196:19: error: format string is not a string literal
> [-Werror=format-nonliteral]
>            vfprintf(stderr, fmt, ap);
>
> Signed-off-by: Rosen Penev <rosenp at gmail.com>
> ---
>  v3: Moved define to top of file.
>  v2: Fixed extra warning from clang 10.
>  cli.c    |  1 +
>  libuci.c | 15 ++++++++-------
>  2 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/cli.c b/cli.c
> index 8970f4f..6ba97ea 100644
> --- a/cli.c
> +++ b/cli.c
> @@ -185,6 +185,7 @@ static void cli_perror(void)
>         uci_perror(ctx, appname);
>  }
>
> +__attribute__((format(printf, 1, 2)))
>  static void cli_error(const char *fmt, ...)
>  {
>         va_list ap;
> diff --git a/libuci.c b/libuci.c
> index a9e70e8..0f0211a 100644
> --- a/libuci.c
> +++ b/libuci.c
> @@ -40,6 +40,12 @@ static const char *uci_errstr[] = {
>  #include "uci_internal.h"
>  #include "list.c"
>
> +#define errstr \

As mentioned in my previous email, please use all caps for #defines.
And maybe give it a more descriptive less generic name. E.g.
UCI_ERR_FORMAT, as it is a format string, and should be uci
"namespaced" (as much as you can namespace stuff in C).


Regards
Jonas

_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list