static void parse_target(char **argv, int invert, unsigned int *flags, struct ipt_set_info *info, const char *what) { if (info->flags[0]) xtables_error(PARAMETER_PROBLEM, "--%s can be specified only once", what); if (xtables_check_inverse(optarg, &invert, NULL, 0)) xtables_error(PARAMETER_PROBLEM, "Unexpected `!' after --%s", what); if (!argv[optind] || argv[optind][0] == '-' || argv[optind][0] == '!') xtables_error(PARAMETER_PROBLEM, "--%s requires two args.", what); if (strlen(argv[optind-1]) > IP_SET_MAXNAMELEN - 1) xtables_error(PARAMETER_PROBLEM, "setname `%s' too long, max %d characters.", argv[optind-1], IP_SET_MAXNAMELEN - 1); get_set_byname(argv[optind - 1], info); parse_bindings(argv[optind], info); optind++; *flags = 1; }
void install_drivers() { dev_t console; // Register /proc/units register_proc_inode("units", units_proc, NULL); register_proc_inode("devices", devices_proc, NULL); register_proc_inode("devstat", devstat_proc, NULL); // Parse driver binding database parse_bindings(); // Match bindings to units bind_units(); // Install legacy drivers install_legacy_drivers(); // Make sure we have a console device console = dev_open("console"); if (console == NODEV) { initialize_driver(NULL, "krnl.dll!console"); } else { dev_close(console); } }
static int set_parse(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_match **match) { struct ipt_set_info_match *myinfo = (struct ipt_set_info_match *) (*match)->data; struct ipt_set_info *info = &myinfo->match_set; switch (c) { case '2': #if 0 fprintf(stderr, "--set option deprecated, please use --match-set\n"); #endif case '1': /* --match-set <set> <flag>[,<flag> */ if (info->flags[0]) xtables_error(PARAMETER_PROBLEM, "--match-set can be specified only once"); xtables_check_inverse(optarg, &invert, &optind, 0, argv); if (invert) info->flags[0] |= IPSET_MATCH_INV; if (!argv[optind] || argv[optind][0] == '-' || argv[optind][0] == '!') xtables_error(PARAMETER_PROBLEM, "--match-set requires two args."); if (strlen(optarg) > IP_SET_MAXNAMELEN - 1) xtables_error(PARAMETER_PROBLEM, "setname `%s' too long, max %d characters.", optarg, IP_SET_MAXNAMELEN - 1); get_set_byname(optarg, info); parse_bindings(argv[optind], info); DEBUGP("parse: set index %u\n", info->index); optind++; *flags = 1; break; default: return 0; } return 1; }
/* Function which parses command options; returns true if it ate an option */ static int parse(int c, char **argv, int invert, unsigned int *flags, const struct ipt_entry *entry, unsigned int *nfcache, struct ipt_entry_match **match) { struct ipt_set_info_match *myinfo = (struct ipt_set_info_match *) (*match)->data; struct ipt_set_info *info = &myinfo->match_set; switch (c) { case '1': /* --set <set> <flag>[,<flag> */ if (info->flags[0]) exit_error(PARAMETER_PROBLEM, "--set can be specified only once"); check_inverse(optarg, &invert, &optind, 0); if (invert) info->flags[0] |= IPSET_MATCH_INV; if (!argv[optind] || argv[optind][0] == '-' || argv[optind][0] == '!') exit_error(PARAMETER_PROBLEM, "--set requires two args."); if (strlen(argv[optind-1]) > IP_SET_MAXNAMELEN - 1) exit_error(PARAMETER_PROBLEM, "setname `%s' too long, max %d characters.", argv[optind-1], IP_SET_MAXNAMELEN - 1); get_set_byname(argv[optind - 1], info); parse_bindings(argv[optind], info); DEBUGP("parse: set index %u\n", info->index); optind++; *flags = 1; break; default: return 0; } return 1; }