/* BZ 11039 */
#include <unistd.h>
#include <stdio.h>

static int
one_test (const char *fmt, int argc, char *argv[], int expected[argc - 1])
{
  optind = 1;

  int res = 0;
  for (int i = 0; i < argc - 1; ++i)
    {
      rewind (stderr);
      if (ftruncate (fileno (stderr), 0) != 0)
	{
	  puts ("cannot truncate file");
	  return 1;
	}

      int c = getopt (argc, argv, fmt);
      if (c != expected[i])
	{
	  printf ("format '%s' test %d failed: expected '%c', got '%c'\n",
		  fmt, i, expected[i], c);
	  res = 1;
	}
      if (ftell (stderr) != 0)
	{
	  printf ("format '%s' test %d failed: printed to stderr\n",
		  fmt, i);
	  res = 1;
	}
    }

  return res;
}


static int
do_test (void)
{
  char *fname = tmpnam (NULL);
  if (fname == NULL)
    {
      puts ("cannot generate name for temporary file");
      return 1;
    }

  if (freopen (fname, "w+", stderr) == NULL)
    {
      puts ("cannot redirect stderr");
      return 1;
    }

  remove (fname);

  int ret = one_test ("+:a:b", 2,
		      (char *[2]) { (char *) "bug-getopt1", (char *) "-a" },
		      (int [1]) { ':' });

  ret |= one_test ("+:a:b", 3,
		   (char *[3]) { (char *) "bug-getopt1", (char *) "-b",
				 (char *) "-a" },
		   (int [2]) { 'b', ':' });

  if (ret == 0)
    puts ("all OK");

  return ret;
}

#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"
