Remove warnings related to type-punning
[openafs.git] / src / cmd / cmd.c
index 456d66b..3b5302e 100644 (file)
@@ -10,8 +10,6 @@
 #include <afsconfig.h>
 #include <afs/param.h>
 
-RCSID
-    ("$Header$");
 
 #include <sys/types.h>
 #include <ctype.h>
@@ -27,12 +25,12 @@ struct cmd_token {
     char *key;
 };
 
-static int dummy;              /* non-null ptr used for flag existence */
+static struct cmd_item dummy;          /* non-null ptr used for flag existence */
 static struct cmd_syndesc *allSyntax = 0;
 static int noOpcodes = 0;
-static int (*beforeProc) (struct cmd_syndesc * ts, char *beforeRock) =
-    0, (*afterProc) (struct cmd_syndesc * ts, char *afterRock) = 0;
-static char *beforeRock, *afterRock;
+static int (*beforeProc) (struct cmd_syndesc * ts, void *beforeRock) = NULL;
+static int (*afterProc) (struct cmd_syndesc * ts, void *afterRock) = NULL;
+static void *beforeRock, *afterRock;
 static char initcmd_opcode[] = "initcmd";      /*Name of initcmd opcode */
 
 /* take name and string, and return null string if name is empty, otherwise return
@@ -40,13 +38,14 @@ static char initcmd_opcode[] = "initcmd";   /*Name of initcmd opcode */
 static char *
 NName(char *a1, char *a2)
 {
-    static char tbuffer[80];
+    static char tbuffer[300];
     if (strlen(a1) == 0) {
-       return "";
+        return "";
     } else {
-       strcpy(tbuffer, a1);
-       strcat(tbuffer, a2);
-       return tbuffer;
+        strncpy(tbuffer, a1, sizeof(tbuffer));
+        strncat(tbuffer, a2, sizeof(tbuffer));
+        tbuffer[sizeof(tbuffer)-1]='\0';
+        return tbuffer;
     }
 }
 
@@ -56,8 +55,8 @@ SubString(register char *amain, register char *asub)
 {
     int mlen, slen;
     register int i, j;
-    mlen = strlen(amain);
-    slen = strlen(asub);
+    mlen = (int) strlen(amain);
+    slen = (int) strlen(asub);
     j = mlen - slen;
     if (j < 0)
        return 0;               /* not a substring */
@@ -77,6 +76,11 @@ FindType(register struct cmd_syndesc *as, register char *aname)
     int ambig;
     int best;
 
+    /* Allow --long-style options. */
+    if (aname[0] == '-' && aname[1] == '-' && aname[2] && aname[3]) {
+        aname++;
+    }
+
     cmdlen = strlen(aname);
     ambig = 0;
     best = -1;
@@ -165,6 +169,15 @@ PrintParmHelp(register struct cmd_parmdesc *aparm)
        printf(" <arg>+");
 }
 
+extern char *AFSVersion;
+
+static int
+VersionProc(register struct cmd_syndesc *as, void *arock)
+{
+    printf("%s\n", AFSVersion);
+    return 0;
+}
+
 void
 PrintSyntax(register struct cmd_syndesc *as)
 {
@@ -224,7 +237,7 @@ PrintFlagHelp(register struct cmd_syndesc *as)
 {
     register int i;
     register struct cmd_parmdesc *tp;
-    size_t flag_width;
+    int flag_width;
     char *flag_prefix;
 
     /* find flag name length */
@@ -263,7 +276,7 @@ PrintFlagHelp(register struct cmd_syndesc *as)
 }
 
 static int
-AproposProc(register struct cmd_syndesc *as, char *arock)
+AproposProc(register struct cmd_syndesc *as, void *arock)
 {
     register struct cmd_syndesc *ts;
     char *tsub;
@@ -288,7 +301,7 @@ AproposProc(register struct cmd_syndesc *as, char *arock)
 }
 
 static int
-HelpProc(register struct cmd_syndesc *as, char *arock)
+HelpProc(register struct cmd_syndesc *as, void *arock)
 {
     register struct cmd_syndesc *ts;
     register struct cmd_item *ti;
@@ -335,8 +348,8 @@ HelpProc(register struct cmd_syndesc *as, char *arock)
 }
 
 int
-cmd_SetBeforeProc(int (*aproc) (struct cmd_syndesc * ts, char *beforeRock),
-                 char *arock)
+cmd_SetBeforeProc(int (*aproc) (struct cmd_syndesc * ts, void *beforeRock),
+                 void *arock)
 {
     beforeProc = aproc;
     beforeRock = arock;
@@ -344,8 +357,8 @@ cmd_SetBeforeProc(int (*aproc) (struct cmd_syndesc * ts, char *beforeRock),
 }
 
 int
-cmd_SetAfterProc(int (*aproc) (struct cmd_syndesc * ts, char *afterRock),
-                char *arock)
+cmd_SetAfterProc(int (*aproc) (struct cmd_syndesc * ts, void *afterRock),
+                void *arock)
 {
     afterProc = aproc;
     afterRock = arock;
@@ -371,8 +384,8 @@ SortSyntax(struct cmd_syndesc *as)
 
 struct cmd_syndesc *
 cmd_CreateSyntax(char *aname,
-                int (*aproc) (struct cmd_syndesc * ts, char *arock),
-                char *arock, char *ahelp)
+                int (*aproc) (struct cmd_syndesc * ts, void *arock),
+                void *arock, char *ahelp)
 {
     register struct cmd_syndesc *td;
 
@@ -472,7 +485,7 @@ cmd_AddParm(register struct cmd_syndesc *as, char *aname, int atype,
     strcpy(tp->name, aname);
     tp->type = atype;
     tp->flags = aflags;
-    tp->items = (struct cmd_item *)0;
+    tp->items = NULL;
     if (ahelp) {
        tp->help = (char *)malloc(strlen(ahelp) + 1);
        assert(tp->help);
@@ -547,7 +560,7 @@ ResetSyntax(register struct cmd_syndesc *as)
        default:
            break;
        }
-       tp->items = (struct cmd_item *)0;
+       tp->items = NULL;
     }
 }
 
@@ -658,6 +671,16 @@ cmd_Dispatch(int argc, char **argv)
                                  "search by help text");
            cmd_AddParm(ts, "-topic", CMD_SINGLE, CMD_REQUIRED,
                        "help string");
+           ts = cmd_CreateSyntax("version", VersionProc, (char *)0,
+                                 (char *)CMD_HIDDEN);
+           ts = cmd_CreateSyntax("-version", VersionProc, (char *)0,
+                                 (char *)CMD_HIDDEN);
+           ts = cmd_CreateSyntax("-help", HelpProc, (char *)0,
+                                 (char *)CMD_HIDDEN);
+           ts = cmd_CreateSyntax("--version", VersionProc, (char *)0,
+                                 (char *)CMD_HIDDEN);
+           ts = cmd_CreateSyntax("--help", HelpProc, (char *)0,
+                                 (char *)CMD_HIDDEN);
        }
     }
 
@@ -777,7 +800,7 @@ cmd_Dispatch(int argc, char **argv)
                return (CMD_INTERNALERROR);
            }
            if (ts->parms[j].type == CMD_FLAG) {
-               ts->parms[j].items = (struct cmd_item *)&dummy;
+               ts->parms[j].items = &dummy;
            } else {
                positional = 0;
                curType = j;