[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#514137: libc6-dev: getopt_long error confusing on missing argument



Package: libc6-dev
Version: 2.7-18
Severity: normal


As GNU documentation says, getopt_long would return '?'
when an option is missing from optstring and would return
':' when an option declared with ':' in optstring is parsed
but there is no argument.

info libc getopt (§25.2.1)

But calling getopt_long with an optstring that contains 'g:'
with arguments like this: app -g, lead to the '?' return code.

(Even if program is compiled with either __USE_GNU or __USE_XOPEN).

--
Test result:

$ ./test -g
Received options:
./test: option requires an argument -- g
error: option not understood: g

One could see that the '?' case is triggered, not the ':' case.

Cheers,
Michel


---
Test program:

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

int
main(int argc, char *argv[])
{
    int c = 0;
    struct option long_options[] = {
	{"geometry", required_argument, NULL, 'g'},
	{0, 0, 0, 0}
    };
    int option_index = 0;

    printf("Received options:\n");

    while ((c = getopt_long_only(argc, argv, "g:", long_options,
				 &option_index)) != -1) {

		switch (c) {
		case 0:
		    printf("  --%s\n", long_options[option_index].name);
		    break;
	  
		case '?':
		    printf("error: option not understood: %c\n", optopt);
		    goto getoutofhere;
		    break;
	
		case ':':
		    printf("error: missing arguement for option: %c\n", optopt);
		    goto getoutofhere;
		    break;
	
		default:
		    printf("  -%c\n", c);
		}
    }

getoutofhere:
    if (optind < argc) {
	printf("Non-option arguments:\n");
	while (optind < argc)
	    printf("  %s\n", argv[optind++]);
    }

    return 0;
}




-- System Information:
Debian Release: 5.0
  APT prefers testing
  APT policy: (990, 'testing'), (888, 'testing')
Architecture: i386 (i686)

Kernel: Linux 2.6.26-1-686 (SMP w/2 CPU cores)
Locale: LANG=fr_FR@euro, LC_CTYPE=fr_FR@euro (charmap=ISO-8859-15)
Shell: /bin/sh linked to /bin/dash

Versions of packages libc6-dev depends on:
ii  libc6                         2.7-18     GNU C Library: Shared libraries
ii  linux-libc-dev                2.6.26-13  Linux support headers for userspac

Versions of packages libc6-dev recommends:
ii  gcc [c-compiler]              4:4.3.2-2  The GNU C compiler
ii  gcc-3.4 [c-compiler]          3.4.6-9    The GNU C compiler
ii  gcc-4.1 [c-compiler]          4.1.2-25   The GNU C compiler
ii  gcc-4.2 [c-compiler]          4.2.4-6    The GNU C compiler
ii  gcc-4.3 [c-compiler]          4.3.2-1.1  The GNU C compiler

Versions of packages libc6-dev suggests:
ii  glibc-doc                     2.7-18     GNU C Library: Documentation
ii  manpages-dev                  3.05-1     Manual pages about using GNU/Linux

-- no debconf information



Reply to: