]> git.sur5r.net Git - cc65/commitdiff
Fixed a comparison operator; so that the NULL at the end of argv[] is copied by InitC...
authorGreg King <gregdk@users.sf.net>
Sun, 30 Aug 2015 09:16:38 +0000 (05:16 -0400)
committerGreg King <gregdk@users.sf.net>
Sun, 30 Aug 2015 09:16:38 +0000 (05:16 -0400)
Most POSIX function libraries hid that long-time bug by putting zeroes in their dynamic RAM; but, MinGW's library doesn't do it.  Therefore, a command like
cl65 foo.c -l
would crash with a "Segmentation fault" -- it should give a nice error message about "-l"; and, quit neatly.

src/common/cmdline.c
src/common/cmdline.h

index 716df1efb3331fb00f4369ad7a0f14050905934d..ce2962780c7e7fcae0b63e4f61823a7d2887825b 100644 (file)
@@ -161,7 +161,7 @@ static void ExpandFile (CmdLine* L, const char* Name)
 
 
 
-void InitCmdLine (int* aArgCount, char** aArgVec[], const char* aProgName)
+void InitCmdLine (int* aArgCount, char*** aArgVec, const char* aProgName)
 /* Initialize command line parsing. aArgVec is the argument array terminated by
 ** a NULL pointer (as usual), ArgCount is the number of valid arguments in the
 ** array. Both arguments are remembered in static storage.
@@ -171,7 +171,7 @@ void InitCmdLine (int* aArgCount, char** aArgVec[], const char* aProgName)
     int         I;
 
     /* Get the program name from argv[0] but strip a path */
-    if (*(aArgVec)[0] == 0) {
+    if ((*aArgVec)[0] == 0) {
         /* Use the default name given */
         ProgName = aProgName;
     } else {
@@ -190,7 +190,7 @@ void InitCmdLine (int* aArgCount, char** aArgVec[], const char* aProgName)
     ** special handling for arguments preceeded by the '@' sign - these are
     ** actually files containing arguments.
     */
-    for (I = 0; I < *aArgCount; ++I) {
+    for (I = 0; I <= *aArgCount; ++I) {
 
         /* Get the next argument */
         char* Arg = (*aArgVec)[I];
index b18906c7a1b01d65ce093533d05edd5987c314e6..1caf0cfb64dbe651af68f652c959bdd7a8a0d4ca 100644 (file)
@@ -71,7 +71,7 @@ struct LongOpt {
 
 
 
-void InitCmdLine (int* aArgCount, char** aArgVec[], const char* aProgName);
+void InitCmdLine (int* aArgCount, char*** aArgVec, const char* aProgName);
 /* Initialize command line parsing. aArgVec is the argument array terminated by
 ** a NULL pointer (as usual), ArgCount is the number of valid arguments in the
 ** array. Both arguments are remembered in static storage.