]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
libxt_comment: use guided option parser
authorJan Engelhardt <jengelh@medozas.de>
Tue, 1 Mar 2011 19:16:22 +0000 (20:16 +0100)
committerJan Engelhardt <jengelh@medozas.de>
Wed, 6 Apr 2011 11:13:00 +0000 (13:13 +0200)
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
extensions/libxt_comment.c

index c10a254034380d8ff7d49425a4e73e99eec6845f..6ed2ff9b3c2645662f761d1aacfeae7cdb0add79 100644 (file)
@@ -6,15 +6,14 @@
  *     2004-05-12: Brad Fisher <brad@info-link.net>
  *         Port to patch-o-matic-ng
  */
-#include <stdbool.h>
 #include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
 #include <xtables.h>
 #include <linux/netfilter/xt_comment.h>
 
+enum {
+       O_COMMENT = 0,
+};
+
 static void comment_help(void)
 {
        printf(
@@ -22,50 +21,13 @@ static void comment_help(void)
                "--comment COMMENT             Attach a comment to a rule\n");
 }
 
-static const struct option comment_opts[] = {
-       {.name = "comment", .has_arg = true, .val = '1'},
-       XT_GETOPT_TABLEEND,
+static const struct xt_option_entry comment_opts[] = {
+       {.name = "comment", .id = O_COMMENT, .type = XTTYPE_STRING,
+        .flags = XTOPT_MAND | XTOPT_PUT,
+        XTOPT_POINTER(struct xt_comment_info, comment)},
+       XTOPT_TABLEEND,
 };
 
-static void
-parse_comment(const char *s, struct xt_comment_info *info)
-{      
-       int slen = strlen(s);
-
-       if (slen >= XT_MAX_COMMENT_LEN) {
-               xtables_error(PARAMETER_PROBLEM,
-                       "COMMENT must be shorter than %i characters", XT_MAX_COMMENT_LEN);
-       }
-       strcpy((char *)info->comment, s);
-}
-
-static int
-comment_parse(int c, char **argv, int invert, unsigned int *flags,
-              const void *entry, struct xt_entry_match **match)
-{
-       struct xt_comment_info *commentinfo = (struct xt_comment_info *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               xtables_check_inverse(optarg, &invert, &optind, 0, argv);
-               if (invert) {
-                       xtables_error(PARAMETER_PROBLEM,
-                                       "Sorry, you can't have an inverted comment");
-               }
-               parse_comment(optarg, commentinfo);
-               *flags = 1;
-               break;
-       }
-       return 1;
-}
-
-static void comment_check(unsigned int flags)
-{
-       if (!flags)
-               xtables_error(PARAMETER_PROBLEM,
-                          "COMMENT match: You must specify `--comment'");
-}
-
 static void
 comment_print(const void *ip, const struct xt_entry_match *match, int numeric)
 {
@@ -93,11 +55,10 @@ static struct xtables_match comment_match = {
        .size           = XT_ALIGN(sizeof(struct xt_comment_info)),
        .userspacesize  = XT_ALIGN(sizeof(struct xt_comment_info)),
        .help           = comment_help,
-       .parse          = comment_parse,
-       .final_check    = comment_check,
        .print          = comment_print,
        .save           = comment_save,
-       .extra_opts     = comment_opts,
+       .x6_parse       = xtables_option_parse,
+       .x6_options     = comment_opts,
 };
 
 void _init(void)