Given following log snippets, their explanation, and nothing else, explain what failure, if any, occurred during build of this package.

  Snippets are in a format of [X] : [Y], where [X] is a log snippet, and [Y] is the explanation.

  Snippets are delimited with '================'.

  Drawing on information from all snippets, provide a concise explanation of the issue and recommend a solution.

  Explanation of the issue, and recommended solution, should take a handful of sentences.

  Snippets:

  [In file included from dhcp.c:17:
dnsmasq.h:1662:50: note: expected ‘int (*)(void)’ but argument is of type ‘int (*)(struct in_addr,  int,  char *, struct in_addr,  struct in_addr,  void *)’
 1662 | int iface_enumerate(int family, void *parm, int (callback)());
      |                                             ~~~~~^~~~~~~~~~~
dhcp.c:33:12: note: ‘check_listen_addrs’ declared here
   33 | static int check_listen_addrs(struct in_addr local, int if_index, char *label,
      |            ^~~~~~~~~~~~~~~~~~
dhcp.c:333:44: error: passing argument 3 of ‘iface_enumerate’ from incompatible pointer type [-Wincompatible-pointer-types]
  333 |       if (!iface_enumerate(AF_INET, &amp;parm, complete_context))
      |                                            ^~~~~~~~~~~~~~~~
      |                                            |
      |                                            int (*)(struct in_addr,  int,  char *, struct in_addr,  struct in_addr,  void *)
dnsmasq.h:1662:50: note: expected ‘int (*)(void)’ but argument is of type ‘int (*)(struct in_addr,  int,  char *, struct in_addr,  struct in_addr,  void *)’
 1662 | int iface_enumerate(int family, void *parm, int (callback)());]: [In file included from dhcp.c:17:
dnsmasq.h:1662:50: note: expected ‘int (*)(void)’ but argument is of type ‘int (*)(struct in_addr,  int,  char *, struct in_addr,  struct in_addr,  void *)’
 1662 | int iface_enumerate(int family, void *parm, int (callback)());
      |                                             ~~~~~^~~~~~~~~~~
dhcp.c:33:12: note: ‘check_listen_addrs’ declared here
   33 | static int check_listen_addrs(struct in_addr local, int if_index, char *label,
      |            ^~~~~~~~~~~~~~~~~~
dhcp.c:333:44: error: passing argument 3 of ‘iface_enumerate’ from incompatible pointer type [-Wincompatible-pointer-types]
  333 |       if (!iface_enumerate(AF_INET, &amp;parm, complete_context))
      |                                            ^~~~~~~~~~~~~~~~
      |                                            |
      |                                            int (*)(struct in_addr,  int,  char *, struct in_addr,  struct in_addr,  void *)
dnsmasq.h:1662:50: note: expected ‘int (*)(void)’ but argument is of type ‘int (*)(struct in_addr,  int,  char *, struct in_addr,  struct in_addr,  void *)’
 1662 | int iface_enumerate(int family, void *parm, int (callback)());]
=============
[In file included from lease.c:17:
dnsmasq.h:1662:50: note: expected ‘int (*)(void)’ but argument is of type ‘int (*)(struct in_addr,  int,  char *, struct in_addr,  struct in_addr,  void *)’
 1662 | int iface_enumerate(int family, void *parm, int (callback)());
      |                                             ~~~~~^~~~~~~~~~~
lease.c:385:12: note: ‘find_interface_v4’ declared here
  385 | static int find_interface_v4(struct in_addr local, int if_index, char *label,
      |            ^~~~~~~~~~~~~~~~~
lease.c:469:35: error: passing argument 3 of ‘iface_enumerate’ from incompatible pointer type [-Wincompatible-pointer-types]
  469 |   iface_enumerate(AF_INET6, &now, find_interface_v6);
      |                                   ^~~~~~~~~~~~~~~~~
      |                                   |
      |                                   int (*)(struct in6_addr *, int,  int,  int,  int,  int,  int,  void *)
dnsmasq.h:1662:50: note: expected ‘int (*)(void)’ but argument is of type ‘int (*)(struct in6_addr *, int,  int,  int,  int,  int,  int,  void *)’
 1662 | int iface_enumerate(int family, void *parm, int (callback)());]: [In file included from lease.c:17:
dnsmasq.h:1662:50: note: expected ‘int (*)(void)’ but argument is of type ‘int (*)(struct in_addr,  int,  char *, struct in_addr,  struct in_addr,  void *)’
 1662 | int iface_enumerate(int family, void *parm, int (callback)());
      |                                             ~~~~~^~~~~~~~~~~
lease.c:385:12: note: ‘find_interface_v4’ declared here
  385 | static int find_interface_v4(struct in_addr local, int if_index, char *label,
      |            ^~~~~~~~~~~~~~~~~
lease.c:469:35: error: passing argument 3 of ‘iface_enumerate’ from incompatible pointer type [-Wincompatible-pointer-types]
  469 |   iface_enumerate(AF_INET6, &now, find_interface_v6);
      |                                   ^~~~~~~~~~~~~~~~~
      |                                   |
      |                                   int (*)(struct in6_addr *, int,  int,  int,  int,  int,  int,  void *)
dnsmasq.h:1662:50: note: expected ‘int (*)(void)’ but argument is of type ‘int (*)(struct in6_addr *, int,  int,  int,  int,  int,  int,  void *)’
 1662 | int iface_enumerate(int family, void *parm, int (callback)());]


Answer: Issue: used gcc switched to new version 15, which changed default from stdc17 to stdc23. It prohibits using unspecified function parameters in callback. The code used prototype for storing callback without fully defining what parameter variants it may accept.
Resolution: The fix were to stop defining callback like int (callback)(), but define all possible variants with fully defined function definitions parameters using union in the code. In this case it used union defining all different parameters possible.