Revision: 54503
          http://brlcad.svn.sourceforge.net/brlcad/?rev=54503&view=rev
Author:   r_weiss
Date:     2013-02-27 19:07:18 +0000 (Wed, 27 Feb 2013)
Log Message:
-----------
Fixed a bug in the mged nirt command when running on windows. Changed an array 
to variable length. When a large number of objects is displayed, the array 
length would be exceeded causing nirt to fail with a message that an object 
could not be found.

Modified Paths:
--------------
    brlcad/trunk/src/libged/nirt.c

Modified: brlcad/trunk/src/libged/nirt.c
===================================================================
--- brlcad/trunk/src/libged/nirt.c      2013-02-27 17:16:57 UTC (rev 54502)
+++ brlcad/trunk/src/libged/nirt.c      2013-02-27 19:07:18 UTC (rev 54503)
@@ -91,9 +91,7 @@
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
     SECURITY_ATTRIBUTES sa;
-    char name[1024] = {0};
-    char line1[2048] = {0};
-    size_t rem = 2048;
+    struct bu_vls line1 = BU_VLS_INIT_ZERO;
 #endif
     int use_input_orig = 0;
     vect_t center_model;
@@ -403,28 +401,19 @@
     si.hStdError   = pipe_err[1];
     si.wShowWindow = SW_HIDE;
 
-    snprintf(line1, rem, "%s ", gedp->ged_gdp->gd_rt_cmd[0]);
-    rem -= strlen(line1) - 1;
+    bu_vls_strcat(line1, gedp->ged_gdp->gd_rt_cmd[0]);
 
     for (i = 1; i < gedp->ged_gdp->gd_rt_cmd_len; i++) {
        /* skip commands */
-       if (BU_STR_EQUAL(gedp->ged_gdp->gd_rt_cmd[i], "-e"))
+       if (BU_STR_EQUAL(gedp->ged_gdp->gd_rt_cmd[i], "-e")) {
            ++i;
-       else {
+       } else {
            /* append other arguments (i.e. options, file and obj(s)) */
-           snprintf(name, 1024, "\"%s\" ", gedp->ged_gdp->gd_rt_cmd[i]);
-           if (rem - strlen(name) < 1) {
-               bu_log("Ran out of buffer space!");
-               bu_free(gedp->ged_gdp->gd_rt_cmd, "free gd_rt_cmd");
-               gedp->ged_gdp->gd_rt_cmd = NULL;
-               return TCL_ERROR;
-           }
-           bu_strlcat(line1, name, sizeof(line1));
-           rem -= strlen(name);
+           bu_vls_strcat(&line1, gedp->ged_gdp->gd_rt_cmd[i]);
        }
     }
 
-    CreateProcess(NULL, line1, NULL, NULL, TRUE,
+    CreateProcess(NULL, bu_vls_addr(&line1), NULL, NULL, TRUE,
                  DETACHED_PROCESS, NULL, NULL,
                  &si, &pi);
 
@@ -553,6 +542,7 @@
     /* Wait for program to finish */
     WaitForSingleObject(pi.hProcess, INFINITE);
 
+    bu_vls_free(&line1);
 #endif
 
     gdlp = BU_LIST_NEXT(ged_display_list, &gedp->ged_gdp->gd_headDisplay);

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to