コード例 #1
0
/*
* getopt_long --
*  Parse argc/argv argument vector.
*/
int
getopt_long(int nargc, char * const *nargv, const char *options,
const struct option *long_options, int *idx)
{
    return (getopt_internal(nargc, nargv, options, long_options, idx,
        FLAG_PERMUTE));
}
コード例 #2
0
ファイル: getopt.c プロジェクト: JFLarvoire/SysToolsLib
/*
 * getopt --
 *	Parse argc/argv argument vector.
 *
 * [eventually this will replace the real getopt]
 */
int
getopt(int nargc, char * const *nargv, const char *options)
{
	int retval;

	_DIAGASSERT(nargv != NULL);
	_DIAGASSERT(options != NULL);

	retval = getopt_internal(nargc, __UNCONST(nargv), options);
	if (retval == -2) {
		++optind;
		/*
		 * We found an option (--), so if we skipped non-options,
		 * we have to permute.
		 */
		if (nonopt_end != -1) {
			permute_args(nonopt_start, nonopt_end, optind,
				       (char **)nargv);
			optind -= nonopt_end - nonopt_start;
		}
		nonopt_start = nonopt_end = -1;
		retval = -1;
	}
	return retval;
}
コード例 #3
0
ファイル: mygetopt_long.c プロジェクト: yomei-o/libtera
/*
 * getopt_long_only --
 *	Parse argc/argv argument vector.
 */
int
mygetopt_long_only(int nargc,char * const * nargv,const char*options,const struct myoption* long_options,int* idx)
{

	return (getopt_internal(nargc, nargv, options, long_options, idx,
	    FLAG_PERMUTE|FLAG_LONGONLY));
}
コード例 #4
0
ファイル: GetOptInc.cpp プロジェクト: 2trill2spill/freebsd
int getopt(int nargc, char *const *nargv, const char *options) {

  /*
  * We don't pass FLAG_PERMUTE to getopt_internal() since
  * the BSD getopt(3) (unlike GNU) has never done this.
  *
  * Furthermore, since many privileged programs call getopt()
  * before dropping privileges it makes sense to keep things
  * as simple (and bug-free) as possible.
  */
  return (getopt_internal(nargc, nargv, options, NULL, NULL, 0));
}
コード例 #5
0
ファイル: getopt.c プロジェクト: 00sniff/pescrambler
/*
 * getopt --
 *	Parse argc/argv argument vector.
 */
int
getopt(int nargc, char * const *nargv, const char *ostr)
//	int nargc;
//	char * const *nargv;
//	const char *ostr;
{
	int retval;

	if ((retval = getopt_internal(nargc, nargv, ostr)) == -2) {
		retval = -1;
		++optind;
	}
	return(retval);
}
コード例 #6
0
ファイル: bsd_getopt.c プロジェクト: KDVS/radio-archives
/*
 * getopt --
 *	Parse argc/argv argument vector.
 *
 * [eventually this will replace the real getopt]
 */
int
getopt(int nargc, char * const *nargv, const char *options)
{
	int retval;

	if ((retval = getopt_internal(nargc, nargv, options)) == -2) {
		++optind;
		/*
		 * We found an option (--), so if we skipped non-options,
		 * we have to permute.
		 */
		if (nonopt_end != -1) {
			permute_args(nonopt_start, nonopt_end, optind,
				       nargv);
			optind -= nonopt_end - nonopt_start;
		}
		nonopt_start = nonopt_end = -1;
		retval = -1;
	}
	return retval;
}
コード例 #7
0
/*
 * getopt_long --
 *      Parse argc/argv argument vector.
 */
int
ZCE_LIB::getopt_long(int nargc,
                     char *const *nargv,
                     const char *options,
                     const struct option *long_options,
                     int *idx)
{
#if defined (ZCE_OS_WINDOWS)
    return (getopt_internal(nargc,
                            nargv,
                            options,
                            long_options,
                            idx,
                            FLAG_PERMUTE));
#endif
#if defined (ZCE_OS_LINUX)
    return ::getopt_long(nargc,
                         nargv,
                         options,
                         long_options,
                         idx);
#endif
}
コード例 #8
0
ファイル: getopt.c プロジェクト: 00sniff/pescrambler
/*
 * getopt_long --
 *	Parse argc/argv argument vector.
 */
int
getopt_long(int nargc, char * const * nargv, 
    const char * options, const struct option * long_options, int * index)
//     int nargc;
//     char * const * nargv;
//     const char * options;
//     const struct option * long_options;
//     int * index;
{
	int retval;

	if ((retval = getopt_internal(nargc, nargv, options)) == -2) {
		char *current_argv = nargv[optind++] + 2, *has_equal;
		int i, match = -1;
		size_t current_argv_len;

		if (*current_argv == '\0') {
			return(-1);
		}
		if ((has_equal = strchr(current_argv, '='))) {
			current_argv_len = has_equal - current_argv;
			has_equal++;
		} else
			current_argv_len = strlen(current_argv);

		for (i = 0; long_options[i].name; i++) {
			if (strncmp(current_argv, long_options[i].name, current_argv_len))
				continue;

			if (strlen(long_options[i].name) == current_argv_len) {
				match = i;
				break;
			}
			if (match == -1)
				match = i;
		}
		if (match != -1) {
			if (long_options[match].has_arg) {
				if (has_equal)
					optarg = has_equal;
				else
					optarg = nargv[optind++];
			}
			if ((long_options[match].has_arg == 1) && (optarg == NULL)) {
				/* Missing option, leading : indecates no error */
				if ((opterr) && (*options != ':'))
					fprintf(stderr,
				      "%s: option requires an argument -- %s\n",
				      __progname(nargv[0]), current_argv);
				return (BADARG);
			}
		} else { /* No matching argument */
			if ((opterr) && (*options != ':'))
				fprintf(stderr,
				    "%s: illegal option -- %s\n", __progname(nargv[0]), current_argv);
			return (BADCH);
		}
		if (long_options[match].flag) {
			*long_options[match].flag = long_options[match].val;
			retval = 0;
		} else
			retval = long_options[match].val;
		if (index)
			*index = match;
	}
	return(retval);
}
コード例 #9
0
ファイル: bsd_getopt.c プロジェクト: KDVS/radio-archives
/*
 * getopt_long --
 *	Parse argc/argv argument vector.
 */
int
getopt_long(int nargc,
	    char * const *nargv,
	    const char *options,
	    const struct option *long_options,
	    int *idx)
{
	int retval;

	/* idx may be NULL */

	if ((retval = getopt_internal(nargc, nargv, options)) == -2) {
		char *current_argv, *has_equal;
		size_t current_argv_len;
		int i, match;

		current_argv = place;
		match = -1;

		optind++;
		place = EMSG;

		if (*current_argv == '\0') {		/* found "--" */
			/*
			 * We found an option (--), so if we skipped
			 * non-options, we have to permute.
			 */
			if (nonopt_end != -1) {
				permute_args(nonopt_start, nonopt_end,
				    optind, nargv);
				optind -= nonopt_end - nonopt_start;
			}
			nonopt_start = nonopt_end = -1;
			return -1;
		}
		if ((has_equal = strchr(current_argv, '=')) != NULL) {
			/* argument found (--option=arg) */
			current_argv_len = has_equal - current_argv;
			has_equal++;
		} else
			current_argv_len = strlen(current_argv);
	    
		for (i = 0; long_options[i].name; i++) {
			/* find matching long option */
			if (strncmp(current_argv, long_options[i].name,
			    current_argv_len))
				continue;

			if (strlen(long_options[i].name) ==
			    (unsigned)current_argv_len) {
				/* exact match */
				match = i;
				break;
			}
			if (match == -1)		/* partial match */
				match = i;
			else {
				/* ambiguous abbreviation */
				if (PRINT_ERROR)
					fprintf(stderr, ambig, (int)current_argv_len,
					     current_argv);
				optopt = 0;
				return BADCH;
			}
		}
		if (match != -1) {			/* option found */
		        if (long_options[match].has_arg == no_argument
			    && has_equal) {
				if (PRINT_ERROR)
					fprintf(stderr, noarg, (int)current_argv_len,
					     current_argv);
				/*
				 * XXX: GNU sets optopt to val regardless of
				 * flag
				 */
				if (long_options[match].flag == NULL)
					optopt = long_options[match].val;
				else
					optopt = 0;
				return BADARG;
			}
			if (long_options[match].has_arg == required_argument ||
			    long_options[match].has_arg == optional_argument) {
				if (has_equal)
					optarg = has_equal;
				else if (long_options[match].has_arg ==
				    required_argument) {
					/*
					 * optional argument doesn't use
					 * next nargv
					 */
					optarg = nargv[optind++];
				}
			}
			if ((long_options[match].has_arg == required_argument)
			    && (optarg == NULL)) {
				/*
				 * Missing argument; leading ':'
				 * indicates no error should be generated
				 */
				if (PRINT_ERROR)
					fprintf(stderr, recargstring, current_argv);
				/*
				 * XXX: GNU sets optopt to val regardless
				 * of flag
				 */
				if (long_options[match].flag == NULL)
					optopt = long_options[match].val;
				else
					optopt = 0;
				--optind;
				return BADARG;
			}
		} else {			/* unknown option */
			if (PRINT_ERROR)
				fprintf(stderr, illoptstring, current_argv);
			optopt = 0;
			return BADCH;
		}
		if (long_options[match].flag) {
			*long_options[match].flag = long_options[match].val;
			retval = 0;
		} else 
			retval = long_options[match].val;
		if (idx)
			*idx = match;
	}
	return retval;
}
コード例 #10
0
/*
 * getopt_long --
 *	Parse argc/argv argument vector.
 */
extern "C" int
getopt_long(int nargc, char ** nargv, char * options, struct option * long_options, int * index)
{
	int retval;

	_DIAGASSERT(nargv != NULL);
	_DIAGASSERT(options != NULL);
	_DIAGASSERT(long_options != NULL);
	/* index may be NULL */

	if ((retval = getopt_internal(nargc, nargv, options)) == -2) {
		char *current_argv = nargv[optind++] + 2, *has_equal;
		int i, current_argv_len, match = -1;

		if (*current_argv == '\0') {
			return(-1);
		}
		if ((has_equal = strchr(current_argv, '=')) != NULL) {
			current_argv_len = has_equal - current_argv;
			has_equal++;
		} else
			current_argv_len = strlen(current_argv);

		for (i = 0; long_options[i].name; i++) { 
			if (strncmp(current_argv, long_options[i].name, current_argv_len))
				continue;

			if (strlen(long_options[i].name) == (unsigned)current_argv_len) { 
				match = i;
				break;
			}
			if (match == -1)
				match = i;
		}
		if (match != -1) {
			if (long_options[match].has_arg == required_argument ||
			    long_options[match].has_arg == optional_argument) {
				if (has_equal)
					optarg = has_equal;
				else
					optarg = nargv[optind++];
			}
			if ((long_options[match].has_arg == required_argument)
			    && (optarg == NULL)) {
				/*
				 * Missing argument, leading :
				 * indicates no error should be generated
				 */
				if ((opterr) && (*options != ':'))
					(void)fprintf(stderr,
				      "%s: option requires an argument -- %s\n",
				      __progname(nargv[0]), current_argv);
				return (BADARG);
			}
		} else { /* No matching argument */
			if ((opterr) && (*options != ':'))
				(void)fprintf(stderr,
				    "%s: illegal option -- %s\n", __progname(nargv[0]), current_argv);
			return (BADCH);
		}
		if (long_options[match].flag) {
			*long_options[match].flag = long_options[match].val;
			retval = 0;
		} else 
			retval = long_options[match].val;
		if (index)
			*index = match;
	}
	return(retval);
}
コード例 #11
0
ファイル: getoptlong.c プロジェクト: hydrix1/tacacs
/*
 * getopt_long --
 *      Parse argc/argv argument vector.
 */
int
getopt_long(int nargc,
            char * const *nargv,
            const char *options,
            const struct option *long_options,
            int *idx)
{
        int retval;

        _DIAGASSERT(nargv != NULL);
        _DIAGASSERT(options != NULL);
        _DIAGASSERT(long_options != NULL);
        /* idx may be NULL */

        progname = nargv[0];

	/* fprintf(stderr, "FYI: using private getoptlong.c implementation\n"); */

        if ((retval = getopt_internal(nargc, nargv, options)) == -2) {
                char *current_argv, *has_equal;
                size_t current_argv_len;
                int i, match;

                current_argv = place;
                match = -1;

                optind++;
                place = EMSG;

                if (*current_argv == '\0') {            /* found "--" */
                        /*
                         * We found an option (--), so if we skipped
                         * non-options, we have to permute.
                         */
                        if (nonopt_end != -1) {
                                permute_args(nonopt_start, nonopt_end,
                                    optind, nargv);
                                optind -= nonopt_end - nonopt_start;
                        }
                        nonopt_start = nonopt_end = -1;
                        return -1;
                }
                if ((has_equal = strchr(current_argv, '=')) != NULL) {
                        /* argument found (--option=arg) */
                        current_argv_len = has_equal - current_argv;
                        has_equal++;
                } else
                        current_argv_len = strlen(current_argv);

                for (i = 0; long_options[i].name; i++) {
                        /* find matching long option */
                        if (strncmp(current_argv, long_options[i].name,
                            current_argv_len))
                                continue;

                        if (strlen(long_options[i].name) ==
                            (unsigned)current_argv_len) {
                                /* exact match */
                                match = i;
                                break;
                        }
                        if (match == -1)                /* partial match */
                                match = i;
                        else {
                                /* ambiguous abbreviation */
                                if (PRINT_ERROR)
                                        xwarnx(ambig, (int)current_argv_len,
                                             current_argv);
                                optopt = 0;
                                return BADCH;
                        }
                }
                if (match != -1) {                      /* option found */
                        if (long_options[match].has_arg == no_argument
                            && has_equal) {
                                if (PRINT_ERROR)
                                        xwarnx(noarg, (int)current_argv_len,
                                             current_argv);
                                /*
                                 * XXX: GNU sets optopt to val regardless of
                                 * flag
                                 */
                                if (long_options[match].flag == NULL)
                                        optopt = long_options[match].val;
                                else
                                        optopt = 0;
                                /* XXX: GNU returns '?' if options[0] != ':' */
fprintf(stdout, "Sanity: 5\n");fprintf(stderr, "SANITY: 5\n");
                             //   if (options[0] != ':')
                              //          return BADCH;
                                optopt = BADCH;
                                //        return BADCH;
                                return BADARG;
                        }
                        if (long_options[match].has_arg == required_argument ||
                            long_options[match].has_arg == optional_argument) {
                                if (has_equal)
                                        optarg = has_equal;
                                else if (long_options[match].has_arg ==
                                    required_argument) {
                                        /*
                                         * optional argument doesn't use
                                         * next nargv
                                         */
                                        if (optind >= nargc) {          /* end of argument vector */
//fprintf(stdout, "Sanity: 8\n");fprintf(stderr, "SANITY: 8\n");
                                                optarg = 0;
                                        } else {
//fprintf(stdout, "Sanity: 9\n");fprintf(stderr, "SANITY: 9\n");
                                                optarg = nargv[optind++];
                                        }
                                }
                        }
                        if ((long_options[match].has_arg == required_argument)
                            && (optarg == NULL)) {
                                /*
                                 * Missing argument; leading ':'
                                 * indicates no error should be generated
                                 */
                                if (PRINT_ERROR)
                                        xwarnx(recargstring, current_argv);
                                /*
                                 * XXX: GNU sets optopt to val regardless
                                 * of flag
                                 */
                                if (long_options[match].flag == NULL)
                                        optopt = long_options[match].val;
                                else
                                        optopt = 0;
                                /* XXX: GNU returns '?' if options[0] != ':' */
                                //--optind;
//fprintf(stdout, "Sanity: 6\n");fprintf(stderr, "SANITY: 6\n");
                                return BADARG;
                        }
                } else {                        /* unknown option */
                        if (PRINT_ERROR)
                                xwarnx(illoptstring, current_argv);
                        optopt = 0;
                        optarg = current_argv;
                        return BADCH;
                }
                if (long_options[match].flag) {
                        *long_options[match].flag = long_options[match].val;
                        retval = 0;
                } else
                        retval = long_options[match].val;
                if (idx)
                        *idx = match;
        }
//fprintf(stdout, "Terminal: %d\n",retval);fprintf(stderr, "TERMINAL: %d\n",retval);
        return retval;
}