int is_invalid_line(char *line, t_map *map) { if (is_empty_line(line)) return (1); /*if (is_comment(line) == 0) { printf("pas un comment "); if (is_attribute(line, map) == 0) { printf("pas un attr "); if (is_room(line) == 0) { printf("pas une room "); if (is_link(line) == 0) { printf("pas un link "); if (is_nbr_ant(line) == 0) { printf("pas le nb de fourmi\n"); return (1); } else printf("c le nb fourmi\n"); } printf("c un link "); return (0); } printf("c une rooom "); return (0); } printf("c un attr "); return (0); } printf("c un comment "); return (0);*/ return (!is_comment(line) && !is_attribute(line, map) && !is_room(line) && !is_link(line) && !is_nbr_ant(line)); }
static void do_args(int argc, char *argv[]) { char *name = "", *value = "", *filter = ""; char *pool = NULL, *identity = NULL, *addresses = NULL; value_type_t value_type = VALUE_NONE; int timeout = 0; bool utc = FALSE, hexout = FALSE; enum { OP_UNDEF, OP_USAGE, OP_STATUS, OP_STATUS_ATTR, OP_ADD, OP_ADD_ATTR, OP_DEL, OP_DEL_ATTR, OP_SHOW_ATTR, OP_RESIZE, OP_LEASES, OP_PURGE, OP_BATCH } operation = OP_UNDEF; /* reinit getopt state */ optind = 0; while (TRUE) { int c; struct option long_opts[] = { { "help", no_argument, NULL, 'h' }, { "utc", no_argument, NULL, 'u' }, { "status", no_argument, NULL, 'w' }, { "add", required_argument, NULL, 'a' }, { "replace", required_argument, NULL, 'c' }, { "del", required_argument, NULL, 'd' }, { "resize", required_argument, NULL, 'r' }, { "leases", no_argument, NULL, 'l' }, { "purge", required_argument, NULL, 'p' }, { "statusattr", no_argument, NULL, '1' }, { "addattr", required_argument, NULL, '2' }, { "delattr", required_argument, NULL, '3' }, { "showattr", no_argument, NULL, '4' }, { "batch", required_argument, NULL, 'b' }, { "start", required_argument, NULL, 's' }, { "end", required_argument, NULL, 'e' }, { "addresses", required_argument, NULL, 'y' }, { "timeout", required_argument, NULL, 't' }, { "filter", required_argument, NULL, 'f' }, { "addr", required_argument, NULL, 'v' }, { "mask", required_argument, NULL, 'v' }, { "server", required_argument, NULL, 'v' }, { "subnet", required_argument, NULL, 'n' }, { "string", required_argument, NULL, 'g' }, { "hex", required_argument, NULL, 'x' }, { "hexout", no_argument, NULL, '5' }, { "pool", required_argument, NULL, '6' }, { "identity", required_argument, NULL, '7' }, { 0,0,0,0 } }; c = getopt_long(argc, argv, "", long_opts, NULL); switch (c) { case EOF: break; case 'h': operation = OP_USAGE; break; case 'w': operation = OP_STATUS; break; case '1': operation = OP_STATUS_ATTR; break; case 'u': utc = TRUE; continue; case 'c': replace_pool = TRUE; /* fallthrough */ case 'a': name = optarg; operation = is_attribute(name) ? OP_ADD_ATTR : OP_ADD; if (replace_pool && operation == OP_ADD_ATTR) { fprintf(stderr, "invalid pool name: " "reserved for '%s' attribute.\n", optarg); usage(); exit(EXIT_FAILURE); } continue; case '2': name = optarg; operation = OP_ADD_ATTR; continue; case 'd': name = optarg; operation = is_attribute(name) ? OP_DEL_ATTR : OP_DEL; continue; case '3': name = optarg; operation = OP_DEL_ATTR; continue; case '4': operation = OP_SHOW_ATTR; continue; case 'r': name = optarg; operation = OP_RESIZE; continue; case 'l': operation = OP_LEASES; continue; case 'p': name = optarg; operation = OP_PURGE; continue; case 'b': name = optarg; if (operation == OP_BATCH) { fprintf(stderr, "--batch commands can not be nested\n"); exit(EXIT_FAILURE); } operation = OP_BATCH; continue; case 's': DESTROY_IF(start); start = host_create_from_string(optarg, 0); if (start == NULL) { fprintf(stderr, "invalid start address: '%s'.\n", optarg); usage(); exit(EXIT_FAILURE); } continue; case 'e': DESTROY_IF(end); end = host_create_from_string(optarg, 0); if (end == NULL) { fprintf(stderr, "invalid end address: '%s'.\n", optarg); usage(); exit(EXIT_FAILURE); } continue; case 't': timeout = atoi(optarg); if (timeout == 0 && strcmp(optarg, "0") != 0) { fprintf(stderr, "invalid timeout '%s'.\n", optarg); usage(); exit(EXIT_FAILURE); } continue; case 'f': filter = optarg; continue; case 'y': addresses = optarg; continue; case 'g': value_type = VALUE_STRING; value = optarg; continue; case 'n': value_type = VALUE_SUBNET; value = optarg; continue; case 'v': value_type = VALUE_ADDR; value = optarg; continue; case 'x': value_type = VALUE_HEX; value = optarg; continue; case '5': hexout = TRUE; continue; case '6': pool = optarg; continue; case '7': identity = optarg; continue; default: usage(); exit(EXIT_FAILURE); break; } break; } switch (operation) { case OP_USAGE: usage(); break; case OP_STATUS: status(); break; case OP_STATUS_ATTR: status_attr(hexout); break; case OP_ADD: if (addresses != NULL) { add_addresses(name, addresses, timeout); } else if (start != NULL && end != NULL) { add(name, start, end, timeout); } else { fprintf(stderr, "missing arguments.\n"); usage(); exit(EXIT_FAILURE); } break; case OP_ADD_ATTR: if (value_type == VALUE_NONE) { fprintf(stderr, "missing arguments.\n"); usage(); exit(EXIT_FAILURE); } if (identity && !pool) { fprintf(stderr, "--identity option can't be used without --pool.\n"); usage(); exit(EXIT_FAILURE); } add_attr(name, pool, identity, value, value_type); break; case OP_DEL: del(name); break; case OP_DEL_ATTR: if (identity && !pool) { fprintf(stderr, "--identity option can't be used without --pool.\n"); usage(); exit(EXIT_FAILURE); } del_attr(name, pool, identity, value, value_type); break; case OP_SHOW_ATTR: show_attr(); break; case OP_RESIZE: if (end == NULL) { fprintf(stderr, "missing arguments.\n"); usage(); exit(EXIT_FAILURE); } resize(name, end); break; case OP_LEASES: leases(filter, utc); break; case OP_PURGE: purge(name); break; case OP_BATCH: if (name == NULL) { fprintf(stderr, "missing arguments.\n"); usage(); exit(EXIT_FAILURE); } batch(argv[0], name); break; default: usage(); exit(EXIT_FAILURE); } }