libbbfdm-api: proper parenthesis in macros

When using macros, both any occurence of arguments and the macro itself
have to be enclosed in parenthesis to prevent unintended behaviour with
operator precedence.

For now, only fix the one causing a -Wint-conversion warning in GCC 14
when using constructs like these, where two macros are used together and
expand to both two comparisons and two nested ternary expression.

dhcpmngr.c:502:41: error: pointer/integer type mismatch in conditional expression [-Wint-conversion]
 502 |  if (DM_STRCMP(parent_s, section_name(s)) != 0)

Given the very heavy use of macros in this project, there are probably
more instances of this issue in the code and it can cause actual logic
errors. While at it, double evaluation should also be checked for.

Link: http://web.archive.org/web/20140127211232/http://docs.freebsd.org/info/cpp/cpp.info.Macro_Parentheses.html
Link: https://clang.llvm.org/extra/clang-tidy/checks/bugprone/macro-parentheses.html
Signed-off-by: Andreas Gnau <andreas.gnau@iopsys.eu>
This commit is contained in:
Andreas Gnau 2025-12-15 13:22:32 +01:00
parent e883c4c69b
commit df25ff7ce0
No known key found for this signature in database

View file

@ -122,9 +122,9 @@ struct package_change
section != NULL; \
section = _tmp, _tmp = (section) ? dmuci_walk_all_sections(package, section, GET_NEXT_SECTION) : NULL)
#define section_name(s) s ? (s)->e.name : ""
#define section_type(s) s ? (s)->type : ""
#define section_config(s) s ? (s)->package->e.name : ""
#define section_name(s) ((s) ? (s)->e.name : "")
#define section_type(s) ((s) ? (s)->type : "")
#define section_config(s) ((s) ? (s)->package->e.name : "" )
static inline void uci_list_insert(struct uci_list *list, struct uci_list *ptr)
{
@ -371,4 +371,3 @@ bool dmuci_string_to_boolean(const char *value);
bool dmuci_is_option_value_empty(struct uci_section *s, const char *option_name);
#endif