From f02ced578673e3b54ea1ba62cc1af8785e3c347f Mon Sep 17 00:00:00 2001
From: Roland McGrath <roland@redhat.com>
Date: Wed, 14 Apr 1993 18:20:33 +0000
Subject: [PATCH] Formerly main.c.~79~

---
 main.c | 35 ++++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/main.c b/main.c
index c4a7ddf7..3810a3de 100644
--- a/main.c
+++ b/main.c
@@ -83,6 +83,7 @@ flags () {}
 struct command_switch
   {
     char c;			/* The switch character.  */
+
     enum			/* Type of the value.  */
       {
 	flag,			/* Turn int flag on.  */
@@ -221,7 +222,7 @@ static struct stringlist *new_files = 0;
 
 /* The table of command switches.  */
 
-static struct command_switch switches[] =
+static const struct command_switch switches[] =
   {
     { 'b', ignore, 0, 0, 0, 0, 0, 0,
 	0, 0,
@@ -293,7 +294,7 @@ static struct command_switch switches[] =
     { 'w', flag, (char *) &print_directory_flag, 1, 1, 0, 0, 0,
 	"print-directory", 0,
 	"Print the current directory" },
-    { -1, flag, (char *) &inhibit_print_directory_flag, 1, 1, 0, 0, 0,
+    { 1, flag, (char *) &inhibit_print_directory_flag, 1, 1, 0, 0, 0,
 	"no-print-directory", 0,
 	"Turn off -w, even if it was turned on implicitly" },
     { 'W', string, (char *) &new_files, 0, 0, 0, 0, 0,
@@ -1072,7 +1073,9 @@ init_switches ()
       long_options[i].name = (switches[i].long_name == 0 ? "" :
 			      switches[i].long_name);
       long_options[i].flag = 0;
-      *p++ = long_options[i].val = switches[i].c;
+      long_options[i].val = switches[i].c;
+      if (isalnum (switches[i].c))
+	*p++ = switches[i].c;
       switch (switches[i].type)
 	{
 	case flag:
@@ -1085,10 +1088,12 @@ init_switches ()
 	case string:
 	case positive_int:
 	case floating:
-	  *p++ = ':';
+	  if (isalnum (switches[i].c))
+	    *p++ = ':';
 	  if (switches[i].noarg_value != 0)
 	    {
-	      *p++ = ':';
+	      if (isalnum (switches[i].c))
+		*p++ = ':';
 	      long_options[i].has_arg = optional_argument;
 	    }
 	  else
@@ -1114,7 +1119,7 @@ decode_switches (argc, argv, env)
      int env;
 {
   int bad = 0;
-  register struct command_switch *cs;
+  register const struct command_switch *cs;
   register struct stringlist *sl;
   register int c;
 
@@ -1292,7 +1297,7 @@ positive integral argument",
 
 	  p = buf;
 
-	  if (cs->c != -1)
+	  if (isalnum (cs->c))
 	    {
 	      sprintf (buf, "  -%c%s", cs->c, arg);
 	      p += strlen (p);
@@ -1301,7 +1306,7 @@ positive integral argument",
 	    {
 	      unsigned int i;
 	      sprintf (p, "%s--%s%s",
-		       cs->c == -1 ? "  " : ", ",
+		       !isalnum (cs->c) ? "  " : ", ",
 		       cs->long_name, arg);
 	      p += strlen (p);
 	      for (i = 0; i < (sizeof (long_option_aliases) /
@@ -1314,7 +1319,7 @@ positive integral argument",
 		  }
 	    }
 	  {
-	    struct command_switch *ncs = cs;
+	    const struct command_switch *ncs = cs;
 	    while ((++ncs)->c != '\0')
 	      if (ncs->description[0] == '-' &&
 		  ncs->description[1] == cs->c)
@@ -1416,7 +1421,7 @@ static void
 define_makeflags (all, makefile)
      int all, makefile;
 {
-  register struct command_switch *cs;
+  register const struct command_switch *cs;
   char *flagstring;
 
   /* We will construct a linked list of `struct flag's describing
@@ -1427,7 +1432,7 @@ define_makeflags (all, makefile)
   struct flag
     {
       struct flag *next;
-      struct command_switch *cs;
+      const struct command_switch *cs;
       char *arg;
       unsigned int arglen;
     };
@@ -1445,7 +1450,7 @@ define_makeflags (all, makefile)
       ++flagslen;		/* Just a single flag letter.  */	      \
     else								      \
       flagslen += 1 + 1 + 1 + 1 + new->arglen; /* " -x foo" */		      \
-    if (cs->c == -1)							      \
+    if (!isalnum (cs->c))						      \
       /* This switch has no single-letter version, so we use the long.  */    \
       flagslen += 2 + strlen (cs->long_name);				      \
   } while (0)
@@ -1544,7 +1549,7 @@ define_makeflags (all, makefile)
       do
 	{
 	  /* Add the flag letter or name to the string.  */
-	  if (flags->cs->c == -1)
+	  if (!isalnum (flags->cs->c))
 	    {
 	      *p++ = '-';
 	      strcpy (p, flags->cs->long_name);
@@ -1561,7 +1566,7 @@ define_makeflags (all, makefile)
 	      if (flags->arglen > 0)
 		{
 		  /* Add its argument too.  */
-		  *p++ = flags->cs->c == -1 ? '=' : ' ';
+		  *p++ = !isalnum (flags->cs->c) ? '=' : ' ';
 		  bcopy (flags->arg, p, flags->arglen);
 		  p += flags->arglen;
 		}
@@ -1569,7 +1574,7 @@ define_makeflags (all, makefile)
 	      *p++ = ' ';
 	      *p++ = '-';
 	    }
-	  else if (flags->cs->c == -1)
+	  else if (!isalnum (flags->cs->c))
 	    {
 	      /* Long options must each go in their own word,
 		 so we write the following space and dash.  */