int main(int argc, char *argv[]) { /* update progname from argv[0] */ set_progname(argv[0]); const struct ap_Option options[] = { {'h', "help", ap_no, 0, 0}, {'v', "version", ap_no, 0, 0}, {0, 0, ap_no, 0, 0} }; if (!ap_init(&parser, argc, (const char* const*) argv, options, 0)) critx("could not allocate memory for option parser"); if (ap_error(&parser)) { errx("%s", ap_error(&parser)); usage(EXIT_FAILURE); } /* parse command line */ for (int argind = 0; argind < ap_arguments(&parser); argind++) { const int code = ap_code(&parser, argind); switch (code) { case 0: break; case 'h': usage(EXIT_SUCCESS); break; case 'v': fprintf(stderr, "%s %s\n%s\n%s\n\n%s\n", progname, FLOWGRIND_VERSION, FLOWGRIND_COPYRIGHT, FLOWGRIND_COPYING, FLOWGRIND_AUTHORS); exit(EXIT_SUCCESS); break; default: errx("uncaught option: %s", ap_argument(&parser, argind)); usage(EXIT_FAILURE); break; } } if (!ap_arguments(&parser)) { errx("no address given"); usage(EXIT_FAILURE); } xmlrpc_env rpc_env; xmlrpc_env_init(&rpc_env); xmlrpc_client_setup_global_const(&rpc_env); for (int argind = 0; argind < ap_arguments(&parser); argind++) /* if non-option, it is an address */ if (!ap_code(&parser, argind)) stop_flows(ap_argument(&parser, argind)); xmlrpc_env_clean(&rpc_env); xmlrpc_client_teardown_global_const(); ap_free(&parser); }
int main(int argc, char *argv[]) { char ch, *tok; int i; xmlrpc_env rpc_env; /* update progname from argv[0] */ if (argc > 0) { /* Strip path */ tok = strrchr(argv[0], '/'); if (tok) tok++; else tok = argv[0]; if (*tok) { strncpy(progname, tok, sizeof(progname)); progname[sizeof(progname) - 1] = 0; } } #ifdef HAVE_GETOPT_LONG /* getopt_long isn't portable, it's GNU extension */ struct option lo[] = { {"help", 0, 0, 'h' }, {"version", 0, 0, 'v'}, {0, 0, 0, 0} }; while ((ch = getopt_long(argc, argv, "hv", lo, 0)) != -1) { #else while ((ch = getopt(argc, argv, "hv")) != -1) { #endif switch (ch) { case 'h': usage(argv[0]); break; case 'v': fprintf(stderr, "flowgrind version: %s\n", FLOWGRIND_VERSION); exit(0); break; default: usage(argv[0]); break; } } xmlrpc_env_init(&rpc_env); xmlrpc_client_setup_global_const(&rpc_env); for (i = optind; i < argc; i++) { stop_flows(argv[i]); } xmlrpc_env_clean(&rpc_env); xmlrpc_client_teardown_global_const(); return 0; }