Revision: 41367
          http://brlcad.svn.sourceforge.net/brlcad/?rev=41367&view=rev
Author:   brlcad
Date:     2010-11-16 00:15:45 +0000 (Tue, 16 Nov 2010)

Log Message:
-----------
proper elimination of MAXARGS and 99999 by converting to bu_realloc() as needed 
in large step increments.  should allow for practically unbounded killtree 
deletions now.

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

Modified: brlcad/trunk/src/libged/killtree.c
===================================================================
--- brlcad/trunk/src/libged/killtree.c  2010-11-16 00:00:27 UTC (rev 41366)
+++ brlcad/trunk/src/libged/killtree.c  2010-11-16 00:15:45 UTC (rev 41367)
@@ -33,12 +33,16 @@
 #include "./ged_private.h"
 
 
+#define AV_STEP 4096
+
+
 struct ged_killtree_data {
     struct ged *gedp;
     int killrefs;
     int nflag;
     int ac;
-    char *av[99999];
+    char **av;
+    size_t av_capacity;
 };
 
 
@@ -57,6 +61,10 @@
        if (!gktdp->killrefs) 
            bu_vls_printf(&gktdp->gedp->ged_result_str, "%s ", dp->d_namep);
        else {
+           if ((size_t)(gktdp->ac + 2) >= gktdp->av_capacity) {
+               gktdp->av = bu_realloc(gktdp->av, sizeof(char *) * 
(gktdp->av_capacity + AV_STEP), "realloc av");
+               gktdp->av_capacity += AV_STEP;
+           }
            gktdp->av[gktdp->ac++] = bu_strdup(dp->d_namep);
            gktdp->av[gktdp->ac] = (char *)0;
 
@@ -74,6 +82,10 @@
                bu_vls_printf(&gktdp->gedp->ged_result_str, "an error occurred 
while deleting %s\n", dp->d_namep);
            }
        } else {
+           if ((size_t)(gktdp->ac + 2) >= gktdp->av_capacity) {
+               gktdp->av = bu_realloc(gktdp->av, sizeof(char *) * 
(gktdp->av_capacity + AV_STEP), "realloc av");
+               gktdp->av_capacity += AV_STEP;
+           }
            gktdp->av[gktdp->ac++] = bu_strdup(dp->d_namep);
            gktdp->av[gktdp->ac] = (char *)0;
 
@@ -111,12 +123,17 @@
        return GED_HELP;
     }
 
+
     gktd.gedp = gedp;
+    gktd.killrefs = 0;
+    gktd.nflag = 0;
     gktd.ac = 1;
+
+    gktd.av = bu_calloc(1, sizeof(char *) * AV_STEP, "alloc av");
+    gktd.av_capacity = AV_STEP;
+    BU_ASSERT(gktd.ac + argc + 2 < AV_STEP); /* potential -n opts */
     gktd.av[0] = "killrefs";
     gktd.av[1] = (char *)0;
-    gktd.killrefs = 0;
-    gktd.nflag = 0;
 
     bu_optind = 1;
     while ((c = bu_getopt(argc, (char * const *)argv, "an")) != EOF) {
@@ -131,6 +148,7 @@
                break;
            default:
                bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], 
usage);
+               bu_free(gktd.av, "free av (error)");
                return GED_ERROR;
        }
     }
@@ -176,6 +194,8 @@
     if (gktd.nflag)
        bu_vls_printf(&gedp->ged_result_str, "}");
 
+    bu_free(gktd.av, "free av");
+
     return GED_OK;
 }
 


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

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today
http://p.sf.net/sfu/msIE9-sfdev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to