static int set_parse_v2(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_match **match) { struct xt_set_info_match_v1 *myinfo = (struct xt_set_info_match_v1 *) (*match)->data; struct xt_set_info *info = &myinfo->match_set; switch (c) { case '3': info->flags |= IPSET_RETURN_NOMATCH; break; case '2': fprintf(stderr, "--set option deprecated, please use --match-set\n"); case '1': /* --match-set <set> <flag>[,<flag> */ if (info->dim) xtables_error(PARAMETER_PROBLEM, "--match-set can be specified only once"); if (invert) info->flags |= IPSET_INV_MATCH; if (!argv[optind] || argv[optind][0] == '-' || argv[optind][0] == '!') xtables_error(PARAMETER_PROBLEM, "--match-set requires two args."); if (strlen(optarg) > IPSET_MAXNAMELEN - 1) xtables_error(PARAMETER_PROBLEM, "setname `%s' too long, max %d characters.", optarg, IPSET_MAXNAMELEN - 1); get_set_byname(optarg, info); parse_dirs(argv[optind], info); DEBUGP("parse: set index %u\n", info->index); optind++; *flags = 1; break; } return 1; }
static int ipset_parse_eopt(struct nlmsghdr *n, struct tcf_ematch_hdr *hdr, struct bstr *args) { struct xt_set_info set_info = {}; int ret; #define PARSE_ERR(CARG, FMT, ARGS...) \ em_parse_error(EINVAL, args, CARG, &ipset_ematch_util, FMT, ##ARGS) if (args == NULL) return PARSE_ERR(args, "ipset: missing set name"); if (args->len >= IPSET_MAXNAMELEN) return PARSE_ERR(args, "ipset: set name too long (max %u)", IPSET_MAXNAMELEN - 1); ret = get_set_byname(args->data, &set_info); if (ret < 0) return PARSE_ERR(args, "ipset: unknown set name '%s'", args->data); if (args->next == NULL) return PARSE_ERR(args, "ipset: missing set flags"); args = bstr_next(args); if (parse_dirs(args->data, &set_info)) return PARSE_ERR(args, "ipset: error parsing set flags"); if (args->next) { args = bstr_next(args); return PARSE_ERR(args, "ipset: unknown parameter"); } addraw_l(n, MAX_MSG, hdr, sizeof(*hdr)); addraw_l(n, MAX_MSG, &set_info, sizeof(set_info)); #undef PARSE_ERR return 0; }
/* Revision 4 */ static int set_parse_v4(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_match **match) { struct xt_set_info_match_v4 *info = (struct xt_set_info_match_v4 *) (*match)->data; switch (c) { case 'a': if (invert) info->flags |= IPSET_FLAG_SKIP_SUBCOUNTER_UPDATE; break; case '0': if (info->bytes.op != IPSET_COUNTER_NONE) xtables_error(PARAMETER_PROBLEM, "only one of the --bytes-[eq|lt|gt]" " is allowed\n"); if (invert) xtables_error(PARAMETER_PROBLEM, "--bytes-gt option cannot be inverted\n"); info->bytes.op = IPSET_COUNTER_GT; info->bytes.value = parse_counter(optarg); break; case '9': if (info->bytes.op != IPSET_COUNTER_NONE) xtables_error(PARAMETER_PROBLEM, "only one of the --bytes-[eq|lt|gt]" " is allowed\n"); if (invert) xtables_error(PARAMETER_PROBLEM, "--bytes-lt option cannot be inverted\n"); info->bytes.op = IPSET_COUNTER_LT; info->bytes.value = parse_counter(optarg); break; case '8': if (info->bytes.op != IPSET_COUNTER_NONE) xtables_error(PARAMETER_PROBLEM, "only one of the --bytes-[eq|lt|gt]" " is allowed\n"); info->bytes.op = invert ? IPSET_COUNTER_NE : IPSET_COUNTER_EQ; info->bytes.value = parse_counter(optarg); break; case '7': if (info->packets.op != IPSET_COUNTER_NONE) xtables_error(PARAMETER_PROBLEM, "only one of the --packets-[eq|lt|gt]" " is allowed\n"); if (invert) xtables_error(PARAMETER_PROBLEM, "--packets-gt option cannot be inverted\n"); info->packets.op = IPSET_COUNTER_GT; info->packets.value = parse_counter(optarg); break; case '6': if (info->packets.op != IPSET_COUNTER_NONE) xtables_error(PARAMETER_PROBLEM, "only one of the --packets-[eq|lt|gt]" " is allowed\n"); if (invert) xtables_error(PARAMETER_PROBLEM, "--packets-lt option cannot be inverted\n"); info->packets.op = IPSET_COUNTER_LT; info->packets.value = parse_counter(optarg); break; case '5': if (info->packets.op != IPSET_COUNTER_NONE) xtables_error(PARAMETER_PROBLEM, "only one of the --packets-[eq|lt|gt]" " is allowed\n"); info->packets.op = invert ? IPSET_COUNTER_NE : IPSET_COUNTER_EQ; info->packets.value = parse_counter(optarg); break; case '4': if (invert) info->flags |= IPSET_FLAG_SKIP_COUNTER_UPDATE; break; case '3': if (invert) xtables_error(PARAMETER_PROBLEM, "--return-nomatch flag cannot be inverted\n"); info->flags |= IPSET_FLAG_RETURN_NOMATCH; break; case '2': fprintf(stderr, "--set option deprecated, please use --match-set\n"); case '1': /* --match-set <set> <flag>[,<flag> */ if (info->match_set.dim) xtables_error(PARAMETER_PROBLEM, "--match-set can be specified only once"); if (invert) info->match_set.flags |= IPSET_INV_MATCH; if (!argv[optind] || argv[optind][0] == '-' || argv[optind][0] == '!') xtables_error(PARAMETER_PROBLEM, "--match-set requires two args."); if (strlen(optarg) > IPSET_MAXNAMELEN - 1) xtables_error(PARAMETER_PROBLEM, "setname `%s' too long, max %d characters.", optarg, IPSET_MAXNAMELEN - 1); get_set_byname(optarg, &info->match_set); parse_dirs(argv[optind], &info->match_set); DEBUGP("parse: set index %u\n", info->match_set.index); optind++; *flags = 1; break; } return 1; }
void Fl_File_Dialog::read_dir(const char *_path) { image_cache.clear(); update_preview(0); static char read_path[4096]; if(_path && *_path) { normalize_path(_path, read_path); //strncpy(read_path, _path, 4096); } else read_path[0] = '\0'; #ifndef _WIN32 if(!*read_path) { _path = "/"; } if(!strcmp(read_path, "My Home")) { char *home = fl_get_homedir(); strncpy(read_path, home, 4096); delete []home; _path = read_path; } parse_dirs(_path); #else parse_dirs(_path); bool get_drives = false; bool read_net = false; LPNETRESOURCE netres=0; if(!*read_path || !strcmp(read_path, "My Computer")) { get_drives = true; _path=0; } else if(!strcmp(read_path, "My Network")) { read_net = true; _path=0; } else if(read_path[0]=='\\' && read_path[1]=='\\') { char *p = strchr((char *)(read_path+2), '\\'); if(!p) { //Network path, w/o share name. Try to read all shares NETRESOURCE net; memset(&net, 0, sizeof(net)); net.lpRemoteName = strdup(read_path); netres = &net; read_net = true; } } #endif fullpath(_path); if(!fullpath_) up_->deactivate(); else up_->activate(); if(mode_!=Fl_File_Dialog::DIRECTORY || (mode_==Fl_File_Dialog::DIRECTORY && !fullpath_)) ok_->deactivate(); location_->value(""); listview_->yposition(0); listview_->column_width(0, -1); listview_->clear(); listview_->begin(); #ifdef _WIN32 if(get_drives) { listview_->column_name(1, "Type"); listview_->column_name(2, "Used Space"); listview_->column_name(3, "Free Space"); DWORD drvs = GetLogicalDrives(); char drive[4]; Fl_FileItem *it; for(int i = 'A'; i <= 'Z'; i++, drvs >>= 1) { if(drvs & 1) { sprintf(drive, "%c:", i); it = new Fl_FileItem(drive, fl_file_attr(drive)); it->image(0, hd_pix); } } } else if(read_net) {