I found a small bug and added a feature to the cygstart utility, which is part 
of the cygutils package.  The feature that I added removes the limit on the 
length of the command line arguments passed to the target application, which 
was previously limited to MAX_PATH.  The bug I fixed was in regard to freeing 
the variable "args" instead of tyring to free "workDir" twice.  A patch and 
change log follow below.  As this is my first contribution, please correct me 
if I did something incorrectly.

-Anthony


Change Log

2005-03-02  Anthony DeRosa  <Anthony dot DeRosa1 at navy dot mil>

* cygstart.c (main): removed limit on the length of command line arguments 
passed to the target application

* cygstart.c (main): fixed typo that freed the variable "workDir" twice instead 
of freeing "args"


Patch

--- ../cygutils-1.2.6/src/cygstart/cygstart.c   2002-03-16 00:49:44.000000000 
-0500
+++ src/cygstart/cygstart.c     2005-03-02 09:16:00.383625000 -0500
@@ -340,14 +340,18 @@ int main(int argc, const char **argv)
 
     /* Retrieve any arguments */
     if (rest && *rest) {
-        if ((args = (char *) malloc(MAX_PATH+1)) == NULL) {
+        if ((args = (char *) malloc(strlen(*rest)+1)) == NULL) {
             fprintf(stderr, "%s: memory allocation error\n", argv[0]);
             exit(1);
-        }
-        strncpy(args, *rest, MAX_PATH);
+        }       
+        strcpy(args, *rest);
         while (rest++ && *rest) {
-            strncat(args, " ", MAX_PATH-strlen(args));
-            strncat(args, *rest, MAX_PATH-strlen(args));
+            if ( (args = (char *) realloc(args, strlen(args) + strlen(*rest) + 
1)) == NULL) {
+                fprintf(stderr, "%s: memory allocation error\n", argv[0]);
+                exit(1);
+            }          
+            strcat(args, " ");
+            strcat(args, *rest);
         }
     }
 
@@ -359,7 +363,7 @@ int main(int argc, const char **argv)
     if (action)
         free(action);
     if (args)
-        free(workDir);
+        free(args);
     if (workDir)
         free(workDir);
     if (file)

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to