コード例 #1
0
ファイル: ipkg.c プロジェクト: nhanh0/hah
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);

    }

}
コード例 #2
0
ファイル: args.c プロジェクト: Agentx86/sea
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;
}
コード例 #3
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;
}