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