libxtables: Replace direct exit_error() calls inside libxtables
Replace direct exit_error() calls inside libxtables with
xt_params->exit_error().
With this change; i can now compile the useless app:
-----
#include <xtables.h>
int main(int argc, char **argv) {
return 0;
}
----
with "gcc useless.c -lxtables -ldl"
Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca>
Signed-off-by: Patrick McHardy <kaber@trash.net>
diff --git a/xtables.c b/xtables.c
index d0fc478..a7425ec 100644
--- a/xtables.c
+++ b/xtables.c
@@ -359,7 +359,7 @@
(portnum = xtables_service_to_port(port, proto)) != (unsigned)-1)
return portnum;
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"invalid port/service `%s' specified", port);
}
@@ -373,7 +373,7 @@
memset(vianame, 0, IFNAMSIZ);
if (vialen + 1 > IFNAMSIZ)
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"interface name `%s' must be shorter than IFNAMSIZ"
" (%i)", arg, IFNAMSIZ-1);
@@ -495,7 +495,7 @@
name, false);
if (ptr == NULL && tryload == XTF_LOAD_MUST_SUCCEED)
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"Couldn't load match `%s':%s\n",
name, dlerror());
}
@@ -507,7 +507,7 @@
ptr = NULL;
}
if(!ptr && (tryload == XTF_LOAD_MUST_SUCCEED)) {
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"Couldn't find match `%s'\n", name);
}
#endif
@@ -555,7 +555,7 @@
name, true);
if (ptr == NULL && tryload == XTF_LOAD_MUST_SUCCEED)
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"Couldn't load target `%s':%s\n",
name, dlerror());
}
@@ -567,7 +567,7 @@
ptr = NULL;
}
if(!ptr && (tryload == LOAD_MUST_SUCCEED)) {
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"Couldn't find target `%s'\n", name);
}
#endif
@@ -820,7 +820,7 @@
b = va_arg(args, unsigned int);
if (!b)
return;
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"%s: \"%s\" option may only be specified once",
p1, p2);
break;
@@ -829,13 +829,13 @@
b = va_arg(args, unsigned int);
if (!b)
return;
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"%s: \"%s\" option cannot be inverted", p1, p2);
break;
case XTF_BAD_VALUE:
p2 = va_arg(args, const char *);
p3 = va_arg(args, const char *);
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"%s: Bad value for \"%s\" option: \"%s\"",
p1, p2, p3);
break;
@@ -843,11 +843,11 @@
b = va_arg(args, unsigned int);
if (!b)
return;
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"%s: At most one action is possible", p1);
break;
default:
- exit_error(status, p1, args);
+ xt_params->exit_error(status, p1, args);
break;
}
@@ -1030,7 +1030,7 @@
if ((addrptmp = host_to_ipaddr(name, naddrs)) != NULL)
return addrptmp;
- exit_error(PARAMETER_PROBLEM, "host/network `%s' not found", name);
+ xt_params->exit_error(PARAMETER_PROBLEM, "host/network `%s' not found", name);
}
static struct in_addr *parse_ipmask(const char *mask)
@@ -1048,7 +1048,7 @@
/* dotted_to_addr already returns a network byte order addr */
return addrp;
if (!xtables_strtoui(mask, NULL, &bits, 0, 32))
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"invalid mask `%s' specified", mask);
if (bits != 0) {
maskaddr.s_addr = htonl(0xFFFFFFFF << (32 - bits));
@@ -1259,7 +1259,7 @@
if ((addrp = host_to_ip6addr(name, naddrs)) != NULL)
return addrp;
- exit_error(PARAMETER_PROBLEM, "host/network `%s' not found", name);
+ xt_params->exit_error(PARAMETER_PROBLEM, "host/network `%s' not found", name);
}
static struct in6_addr *parse_ip6mask(char *mask)
@@ -1276,7 +1276,7 @@
if ((addrp = xtables_numeric_to_ip6addr(mask)) != NULL)
return addrp;
if (!xtables_strtoui(mask, NULL, &bits, 0, 128))
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"invalid mask `%s' specified", mask);
if (bits != 0) {
char *p = (void *)&maskaddr;
@@ -1376,13 +1376,13 @@
"extrapositioned (`! --option this`).\n");
if (*invert)
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"Multiple `!' flags not allowed");
*invert = true;
if (my_optind != NULL) {
++*my_optind;
if (argc && *my_optind > argc)
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"no argument following `!'");
}
@@ -1433,7 +1433,7 @@
}
}
if (i == ARRAY_SIZE(xtables_chain_protos))
- exit_error(PARAMETER_PROBLEM,
+ xt_params->exit_error(PARAMETER_PROBLEM,
"unknown protocol `%s' specified",
s);
}