int getopt_long_only(int argc, char *const*argv, const char *optstring,
const struct option *longopts, int *longindex)
{
- char chOpt;
- char tmp_str[256];
- char* tmp_arg = NULL;
- char* tok=NULL;
- int i;
- char tokens[2] = {'='};
+ char chOpt;
+ char tmp_str[256];
+ char* tmp_arg = NULL;
+ char* tok=NULL;
+ int i;
+ char tokens[2] = {'='};
if (optind == 0) {
optind = iArg = opterr = 1;
if (iArg == argc)
return (EOF);
- if (argv[iArg][0] != '-')
- {
+ if (argv[iArg][0] != '-') {
/* Does not start with a '-' we are done scanning */
return (EOF);
}
return EOF;
}
-
/* char option : -d 5 */
if ((argv[iArg][0] == '-') && (argv[iArg][1] != '-') ) {
optarg = get_char_option(optstring, argv, argc, iArg, &optind, &chOpt);
/*get the option */
tok = strtok(tmp_str,tokens);
- for (i = 0; longopts[i].name; i++)
- {
- if (strcmp (tok, longopts[i].name) == 0)
- {
+ for (i = 0; longopts[i].name; i++) {
+ if (strcmp (tok, longopts[i].name) == 0) {
/* We have a match */
if (longindex != NULL )
*longindex = i;
- if (longopts[i].flag != NULL) {
- *(longopts[i].flag) = longopts[i].val;
- }
+ if (longopts[i].flag != NULL)
+ *(longopts[i].flag) = longopts[i].val;
-
-
- if (longopts[i].has_arg != no_argument)
- {
- /*get the argument */
-
- if (strchr(argv[iArg],'=') != NULL)
- {
- optarg = strtok(NULL,tokens);
- }else { /*the next arg in cmd line is the param */
- tmp_arg = argv[iArg+1];
- if (*tmp_arg == '-') {
-
- /*no param is found */
- chOpt = '?';
- if ((longopts[i].has_arg == required_argument) && opterr)
- {
- fprintf (stderr,
+ if (longopts[i].has_arg != no_argument) {
+ /*get the argument */
+ if (strchr(argv[iArg],'=') != NULL) {
+ optarg = strtok(NULL,tokens);
+ }
+ else { /* the next arg in cmd line is the param */
+ tmp_arg = argv[iArg+1];
+ if (!tmp_arg || *tmp_arg == '-') {
+ /* no param is found */
+ if ((longopts[i].has_arg == required_argument) && opterr) {
+ fprintf (stderr,
"Option '--%s' requires an argument\n",tok);
- iArg++;
- optind++;
- break;
- }
-
- }else
- {
- optarg = tmp_arg;
iArg++;
optind++;
+ break;
}
+
+ } else {
+ optarg = tmp_arg;
+ iArg++;
+ optind++;
}
+ }
- }/*longopts */
+ } /* longopts */
- iArg++;
- optind++;
- if (longopts[i].flag == 0)
- return (longopts[i].val);
- else return 0;
-
- }/*end if strcmp */
- }
-
- return ('?');
+ iArg++;
+ optind++;
+ if (longopts[i].flag == 0)
+ return (longopts[i].val);
+ else
+ return 0;
+ } /* end if strcmp */
+ }
+ return ('?');
}
/******************************************************************************/