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/