about summary refs log tree commit diff
path: root/REORG.TODO/posix/tstgetopt.c
diff options
context:
space:
mode:
Diffstat (limited to 'REORG.TODO/posix/tstgetopt.c')
-rw-r--r--REORG.TODO/posix/tstgetopt.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/REORG.TODO/posix/tstgetopt.c b/REORG.TODO/posix/tstgetopt.c
new file mode 100644
index 0000000000..97ae2ef251
--- /dev/null
+++ b/REORG.TODO/posix/tstgetopt.c
@@ -0,0 +1,76 @@
+#include <getopt.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+int
+main (int argc, char **argv)
+{
+  static const struct option options[] =
+    {
+      {"required", required_argument, NULL, 'r'},
+      {"optional", optional_argument, NULL, 'o'},
+      {"none",     no_argument,       NULL, 'n'},
+      {"color",    no_argument,       NULL, 'C'},
+      {"colour",   no_argument,       NULL, 'C'},
+      {NULL,       0,                 NULL, 0 }
+    };
+
+  int aflag = 0;
+  int bflag = 0;
+  char *cvalue = NULL;
+  int Cflag = 0;
+  int nflag = 0;
+  int index;
+  int c;
+  int result = 0;
+
+  while ((c = getopt_long (argc, argv, "abc:", options, NULL)) >= 0)
+    switch (c)
+      {
+      case 'a':
+	aflag = 1;
+	break;
+      case 'b':
+	bflag = 1;
+	break;
+      case 'c':
+	cvalue = optarg;
+	break;
+      case 'C':
+	++Cflag;
+	break;
+      case '?':
+	fputs ("Unknown option.\n", stderr);
+	return 1;
+      default:
+	fprintf (stderr, "This should never happen!\n");
+	return 1;
+
+      case 'r':
+	printf ("--required %s\n", optarg);
+	result |= strcmp (optarg, "foobar") != 0;
+	break;
+      case 'o':
+	printf ("--optional %s\n", optarg);
+	result |= optarg == NULL || strcmp (optarg, "bazbug") != 0;
+	break;
+      case 'n':
+	puts ("--none");
+	nflag = 1;
+	break;
+      }
+
+  printf ("aflag = %d, bflag = %d, cvalue = %s, Cflags = %d, nflag = %d\n",
+	  aflag, bflag, cvalue, Cflag, nflag);
+
+  result |= (aflag != 1 || bflag != 1 || cvalue == NULL
+	     || strcmp (cvalue, "foobar") != 0 || Cflag != 3 || nflag != 1);
+
+  for (index = optind; index < argc; index++)
+    printf ("Non-option argument %s\n", argv[index]);
+
+  result |= optind + 1 != argc || strcmp (argv[optind], "random") != 0;
+
+  return result;
+}