static int parseopt()

in scripts/hypervisor.c [41:105]


static int parseopt(int argc, char *argv[])
{
	int ch, i;
	char *token, *tmpptr, *cmdstr;

	cmdstr = cmd = NULL;
	daemonize = 0;
	for(i = 0; i < MAXOPT + 1; i++){
		cmdopt[i] = NULL;
	}

	struct option long_options[] = {
		{"daemon",optional_argument,NULL,'d'},
		{"exec",required_argument,NULL,'e'},
		{0,0,0,0},
	};

	while((ch=getopt_long(argc, argv, "dec:", long_options, NULL)) != -1) {
		switch(ch)
		{
			case 'e':
				if((cmdstr = strdup(optarg)) == NULL )
					return -1;
				break;
			case 'd':
				daemonize = 1;
				break;
			default:
				USAGE();
				return -1;
		}
	}

	if(cmdstr == NULL){
		USAGE();
		return -1;
	}

	for(i = 0;i < MAXOPT + 1;cmdstr = NULL, i++){
		token = strtok_r(cmdstr, " \t\n", &tmpptr);
		if(token == NULL){
			break;
		} else {
			cmdopt[i] = strdup(token);

			if(i == 0){
				cmd = strdup(token);
			}
		}
	}

	if( (cmd == NULL) || (strlen(cmd) == 0) ){
		fprintf(stderr, "Error, cmd should not be empty.\n");
		return -1;
	}

	if(i == MAXOPT + 1){
		fprintf(stderr, "Argument too long\n");
		return -1;
	}

	cmdopt[i] = NULL;

	return 0;
}