summaryrefslogtreecommitdiffstats
path: root/ip6tables.c
diff options
context:
space:
mode:
authorJamal Hadi Salim <hadi@cyberus.ca>2009-02-13 08:36:44 -0500
committerJan Engelhardt <jengelh@medozas.de>2009-02-13 14:57:01 +0100
commit70581922f873a88306dd5b1cb83c5081ee239eb8 (patch)
tree9f0168386cbc2b77ac49abde8509c999e940370a /ip6tables.c
parentae19604fe1c4ab02dfbcd450e73826111f0f2b27 (diff)
libxtables: consolidate merge_options into xtables_merge_options
Introduce xtables_merge_options() for re-use reasons. Apps can use it instead of each defining their own merge_options(). Made iptables and ip6tables use the new shared interface. Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca>
Diffstat (limited to 'ip6tables.c')
-rw-r--r--ip6tables.c37
1 files changed, 3 insertions, 34 deletions
diff --git a/ip6tables.c b/ip6tables.c
index f7a882e6..250bb0ea 100644
--- a/ip6tables.c
+++ b/ip6tables.c
@@ -84,8 +84,6 @@
static const char cmdflags[] = { 'I', 'D', 'D', 'R', 'A', 'L', 'F', 'Z',
'N', 'X', 'P', 'E', 'S' };
-#define OPTION_OFFSET 256
-
#define OPT_NONE 0x00000U
#define OPT_NUMERIC 0x00001U
#define OPT_SOURCE 0x00002U
@@ -144,7 +142,6 @@ static struct option original_opts[] = {
int line = -1;
static struct option *opts = original_opts;
-static unsigned int global_option_offset = 0;
void ip6tables_exit_error(enum xtables_exittype status, const char *msg, ...) __attribute__((noreturn, format(printf,2,3)));
struct xtables_globals ip6tables_globals = {
.option_offset = 0,
@@ -503,34 +500,6 @@ set_option(unsigned int *options, unsigned int option, u_int8_t *invflg,
}
}
-static struct option *
-merge_options(struct option *oldopts, const struct option *newopts,
- unsigned int *option_offset)
-{
- unsigned int num_old, num_new, i;
- struct option *merge;
-
- if (newopts == NULL)
- return oldopts;
-
- for (num_old = 0; oldopts[num_old].name; num_old++);
- for (num_new = 0; newopts[num_new].name; num_new++);
-
- global_option_offset += OPTION_OFFSET;
- *option_offset = global_option_offset;
-
- merge = malloc(sizeof(struct option) * (num_new + num_old + 1));
- memcpy(merge, oldopts, num_old * sizeof(struct option));
- xtables_free_opts(0); /* Release previous options merged if any */
- for (i = 0; i < num_new; i++) {
- merge[num_old + i] = newopts[i];
- merge[num_old + i].val += *option_offset;
- }
- memset(merge + num_old + num_new, 0, sizeof(struct option));
-
- return merge;
-}
-
static void
print_num(u_int64_t number, unsigned int format)
{
@@ -1584,7 +1553,7 @@ int do_command6(int argc, char *argv[], char **table, struct ip6tc_handle **hand
target->revision);
if (target->init != NULL)
target->init(target->t);
- opts = merge_options(opts,
+ opts = xtables_merge_options(opts,
target->extra_opts,
&target->option_offset);
if (opts == NULL)
@@ -1638,7 +1607,7 @@ int do_command6(int argc, char *argv[], char **table, struct ip6tc_handle **hand
m->init(m->m);
if (m != m->next)
/* Merge options for non-cloned matches */
- opts = merge_options(opts, m->extra_opts, &m->option_offset);
+ opts = xtables_merge_options(opts, m->extra_opts, &m->option_offset);
}
break;
@@ -1785,7 +1754,7 @@ int do_command6(int argc, char *argv[], char **table, struct ip6tc_handle **hand
if (m->init != NULL)
m->init(m->m);
- opts = merge_options(opts,
+ opts = xtables_merge_options(opts,
m->extra_opts, &m->option_offset);
optind--;