int main(int argc, const char *argv[]) { int err, optind; args_t args; char *cmd_name; ipkg_cmd_t *cmd; ipkg_conf_t ipkg_conf; error_list=NULL; args_init(&args); optind = args_parse(&args, argc, argv); if (optind == argc || optind < 0) { args_usage("ipkg must have one sub-command argument"); } cmd_name = argv[optind++]; err = ipkg_conf_init(&ipkg_conf, &args); if (err) { return err; } args_deinit(&args); cmd = ipkg_cmd_find(cmd_name); if (cmd == NULL) { fprintf(stderr, "%s: unknown sub-command %s\n", argv[0], cmd_name); args_usage(NULL); } if (cmd->requires_args && optind == argc) { fprintf(stderr, "%s: the ``%s'' command requires at least one argument\n", __FUNCTION__, cmd_name); args_usage(NULL); } err = ipkg_cmd_exec(cmd, &ipkg_conf, argc - optind, argv + optind); if ( err == 0 ) { ipkg_message(ipkg_conf, IPKG_NOTICE, "Succesfully done.\n"); } else { ipkg_message(ipkg_conf, IPKG_NOTICE, "Error returned. Return value is %d\n.",err); } }
int args_parse (args_t *args, int argc, char *argv[]) { int c; args->svg_filename = "-"; args->png_filename = "-"; args->scale = 1.0; args->width = -1; args->height = -1; args->flipx = 0; args->flipy = 0; while (1) { c = getopt_long (argc, argv, args_optstring, args_options, NULL); if (c == -1) break; switch (c) { case 'h': args->height = atoi (optarg); break; case 's': args->scale = atof (optarg); break; case 'w': args->width = atoi (optarg); break; case 'V': printf ("%s\n", ARGS_PROGRAM_VERSION); exit (0); break; case ARGS_VAL_FLIPX: args->flipx = 1; break; case ARGS_VAL_FLIPY: args->flipy = 1; break; case ARGS_VAL_HELP: args_help (argv[0]); exit (0); break; case '?': args_help (argv[0]); exit (1); break; default: fprintf (stderr, "Unhandled option: %d\n", c); exit (1); break; } } if (argc - optind >= 1) { args->svg_filename = argv[optind++]; if (argc - optind >= 1) { args->png_filename = argv[optind++]; if (argc - optind > 0) { args_usage (argv[0]); exit (1); } } } return 0; }
int main(int argc, char **argv) { fence_virt_args_t args; const char *my_options; int ret = 0; args_init(&args); if (!strcmp(basename(argv[0]), "fence_xvm")) { my_options = "di:a:p:r:C:c:k:M:H:uo:t:?hVw:"; args.mode = MODE_MULTICAST; } else { my_options = "dD:P:A:p:M:H:o:t:?hVT:C:c:k:w:"; args.mode = MODE_SERIAL; } if (argc == 1) { args_get_stdin(my_options, &args); } else { args_get_getopt(argc, argv, my_options, &args); } if (args.flags & F_HELP) { args_usage(argv[0], my_options, 0); printf("With no command line argument, arguments are " "read from standard input.\n"); printf("Arguments read from standard input take " "the form of:\n\n"); printf(" arg1=value1\n"); printf(" arg2=value2\n\n"); args_usage(argv[0], my_options, 1); exit(0); } if (args.flags & F_VERSION) { printf("%s %s\n", basename(argv[0]), XVM_VERSION); #ifdef FENCE_RELEASE_NAME printf("fence release %s\n", FENCE_RELEASE_NAME); #endif exit(0); } openlog(basename(argv[0]), LOG_NDELAY | LOG_PID, LOG_DAEMON); args_finalize(&args); dset(args.debug); if (args.debug > 0) args_print(&args); /* Additional validation here */ if (!args.domain && (args.op != FENCE_DEVSTATUS && args.op != FENCE_HOSTLIST && args.op != FENCE_METADATA)) { printf("No domain specified!\n"); syslog(LOG_NOTICE, "No domain specified"); args.flags |= F_ERR; } if (args.net.ipaddr) { args.mode = MODE_TCP; } if (args.flags & F_ERR) { args_usage(argv[0], my_options, (argc == 1)); exit(1); } if (args.op == FENCE_METADATA) { args_metadata(argv[0], my_options); return 0; } if (args.delay > 0 && args.op != FENCE_STATUS && args.op != FENCE_DEVSTATUS && args.op != FENCE_HOSTLIST) sleep(args.delay); switch(args.mode) { case MODE_MULTICAST: ret = mcast_fence_virt(&args); break; case MODE_SERIAL: ret = serial_fence_virt(&args); break; case MODE_TCP: ret = tcp_fence_virt(&args); break; default: ret = 1; goto out; } switch(ret) { case RESP_OFF: if (args.op == FENCE_STATUS) printf("Status: OFF\n"); else if (args.domain) syslog(LOG_NOTICE, "Domain \"%s\" is OFF", args.domain); break; case 0: if (args.op == FENCE_STATUS) printf("Status: ON\n"); else if (args.domain) syslog(LOG_NOTICE, "Domain \"%s\" is ON", args.domain); break; case RESP_FAIL: if (args.domain) { syslog(LOG_NOTICE, "Fence operation failed for domain \"%s\"", args.domain); } else syslog(LOG_NOTICE, "Fence operation failed"); printf("Operation failed\n"); break; case RESP_PERM: if (args.domain) { syslog(LOG_NOTICE, "Permission denied for Fence operation for domain \"%s\"", args.domain); } else syslog(LOG_NOTICE, "Permission denied for fence operation"); printf("Permission denied\n"); break; default: if (args.domain) { syslog(LOG_NOTICE, "Unknown response (%d) for domain \"%s\"", ret, args.domain); } else syslog(LOG_NOTICE, "Unknown response (%d)", ret); printf("Unknown response (%d)\n", ret); break; } out: closelog(); return ret; }