This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Shouldn't getopt_long() return : here?


Hello, consider this C program and its accompanying test script:

#include <stdio.h>
#include <getopt.h>

static void handle_args(int, char **);

int
main(int argc, char **argv)
{
   handle_args(argc, argv);

   return 0;
}

#define REQUIRES_ARGUMENT 1

static void
handle_args(int argc, char **argv)
{
   const struct option long_options[] =
   {
      {"option_with_argument", REQUIRES_ARGUMENT, NULL, 0},
      {NULL, 0, NULL, 0},
   };

   const char *short_options = "";

   int c = 0;

   while((c = getopt_long(argc, argv, short_options, long_options, NULL)) 
!= -1)
   {
      switch(c)
      {
         case ':':
         {
            printf("Missing parameter.\n");

            break;
         }
         case '?':
         {
            printf("Unknown option.\n");

            break;
         }
      }
   }
}

#!/bin/bash
echo "Testing with parameter --option_with_argument=4711"
./getopt_long_problem --option_with_argument=4711
echo -e "\nTesting with parameter --option_with_argument"
./getopt_long_problem --option_with_argument
echo -e "\nTesting with parameter --unknown_option"
./getopt_long_problem --unknown_option

The output when I run the script is:
$ ./probtest.sh
Testing with parameter --option_with_argument=4711

Testing with parameter --option_with_argument
getopt_long_problem: option requires an argument -- option_with_argument
Unknown option.

Testing with parameter --unknown_option
getopt_long_problem: unknown option -- unknown_option
Unknown option.

As you can see, getopt_long() returns '?' for the case where the option 
requires arguments and none was supplied, I was under the impression that it 
should return ':' for that case and '?' for unknown options (it prints the 
correct diagnostic, though). Is this a bug in the implementation of 
getopt_long() that Cygwin comes with or are the docs I have read simply not 
applicable to Cygwins implementation?

/ Mikael 




--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]