Revision: 41366
http://brlcad.svn.sourceforge.net/brlcad/?rev=41366&view=rev
Author: brlcad
Date: 2010-11-16 00:00:27 +0000 (Tue, 16 Nov 2010)
Log Message:
-----------
reorder functions to avoid forward decls, cleanup ws, and partially eliminate
MAXARGS.
Modified Paths:
--------------
brlcad/trunk/src/libged/killtree.c
Modified: brlcad/trunk/src/libged/killtree.c
===================================================================
--- brlcad/trunk/src/libged/killtree.c 2010-11-15 23:27:58 UTC (rev 41365)
+++ brlcad/trunk/src/libged/killtree.c 2010-11-16 00:00:27 UTC (rev 41366)
@@ -38,14 +38,57 @@
int killrefs;
int nflag;
int ac;
- char *av[MAXARGS];
+ char *av[99999];
};
-static void
-ged_killtree_callback(struct db_i *dbip,
- struct directory *dp,
- genptr_t ptr);
+/*
+ * K I L L T R E E
+ */
+HIDDEN void
+killtree_callback(struct db_i *dbip, struct directory *dp, genptr_t ptr)
+{
+ struct ged_killtree_data *gktdp = (struct ged_killtree_data *)ptr;
+
+ if (dbip == DBI_NULL)
+ return;
+
+ if (gktdp->nflag) {
+ if (!gktdp->killrefs)
+ bu_vls_printf(&gktdp->gedp->ged_result_str, "%s ", dp->d_namep);
+ else {
+ gktdp->av[gktdp->ac++] = bu_strdup(dp->d_namep);
+ gktdp->av[gktdp->ac] = (char *)0;
+
+ bu_vls_printf(&gktdp->gedp->ged_result_str, "%s ", dp->d_namep);
+ }
+ } else {
+ _ged_eraseAllNamesFromDisplay(gktdp->gedp, dp->d_namep, 0);
+
+ bu_vls_printf(&gktdp->gedp->ged_result_str, "KILL %s: %s\n",
+ (dp->d_flags & DIR_COMB) ? "COMB" : "Solid",
+ dp->d_namep);
+
+ if (!gktdp->killrefs) {
+ if (db_delete(dbip, dp) != 0 || db_dirdelete(dbip, dp) != 0) {
+ bu_vls_printf(&gktdp->gedp->ged_result_str, "an error occurred
while deleting %s\n", dp->d_namep);
+ }
+ } else {
+ gktdp->av[gktdp->ac++] = bu_strdup(dp->d_namep);
+ gktdp->av[gktdp->ac] = (char *)0;
+
+ if (db_delete(dbip, dp) != 0 || db_dirdelete(dbip, dp) != 0) {
+ bu_vls_printf(&gktdp->gedp->ged_result_str, "an error occurred
while deleting %s\n", dp->d_namep);
+
+ /* Remove from list */
+ bu_free((genptr_t)gktdp->av[--gktdp->ac], "killtree_callback");
+ gktdp->av[gktdp->ac] = (char *)0;
+ }
+ }
+ }
+}
+
+
int
ged_killtree(struct ged *gedp, int argc, const char *argv[])
{
@@ -77,7 +120,7 @@
bu_optind = 1;
while ((c = bu_getopt(argc, (char * const *)argv, "an")) != EOF) {
- switch( c ) {
+ switch(c) {
case 'a':
gktd.killrefs = 1;
break;
@@ -108,7 +151,7 @@
continue;
db_functree(gedp->ged_wdbp->dbip, dp,
- ged_killtree_callback, ged_killtree_callback,
+ killtree_callback, killtree_callback,
gedp->ged_wdbp->wdb_resp, (genptr_t)&gktd);
}
@@ -136,67 +179,7 @@
return GED_OK;
}
-/*
- * K I L L T R E E
- */
-static void
-ged_killtree_callback(struct db_i *dbip,
- struct directory *dp,
- genptr_t ptr)
-{
- struct ged_killtree_data *gktdp = (struct ged_killtree_data *)ptr;
- if (dbip == DBI_NULL)
- return;
-
- if (gktdp->nflag) {
- if (!gktdp->killrefs)
- bu_vls_printf(&gktdp->gedp->ged_result_str, "%s ", dp->d_namep);
- else {
- if (gktdp->ac < MAXARGS-1) {
- gktdp->av[gktdp->ac++] = bu_strdup(dp->d_namep);
- gktdp->av[gktdp->ac] = (char *)0;
-
- bu_vls_printf(&gktdp->gedp->ged_result_str, "%s ", dp->d_namep);
- } else {
- bu_vls_printf(&gktdp->gedp->ged_result_str, "MAXARGS exceeded
while scheduling %s for a killrefs\n", dp->d_namep);
- }
- }
- } else {
- _ged_eraseAllNamesFromDisplay(gktdp->gedp, dp->d_namep, 0);
-
- bu_vls_printf(&gktdp->gedp->ged_result_str, "KILL %s: %s\n",
- (dp->d_flags & DIR_COMB) ? "COMB" : "Solid",
- dp->d_namep);
-
- if (!gktdp->killrefs) {
- if (db_delete(dbip, dp) != 0 || db_dirdelete(dbip, dp) != 0) {
- bu_vls_printf(&gktdp->gedp->ged_result_str, "an error occurred
while deleting %s\n", dp->d_namep);
- }
- } else {
- if (gktdp->ac < MAXARGS-1) {
- gktdp->av[gktdp->ac++] = bu_strdup(dp->d_namep);
- gktdp->av[gktdp->ac] = (char *)0;
-
- if (db_delete(dbip, dp) != 0 || db_dirdelete(dbip, dp) != 0) {
- bu_vls_printf(&gktdp->gedp->ged_result_str, "an error
occurred while deleting %s\n", dp->d_namep);
-
- /* Remove from list */
- bu_free((genptr_t)gktdp->av[--gktdp->ac],
"ged_killtree_callback");
- gktdp->av[gktdp->ac] = (char *)0;
- }
- } else {
- bu_vls_printf(&gktdp->gedp->ged_result_str, "MAXARGS exceeded
while scheduling %s for a killrefs\n", dp->d_namep);
-
- if (db_delete(dbip, dp) != 0 || db_dirdelete(dbip, dp) != 0) {
- bu_vls_printf(&gktdp->gedp->ged_result_str, "an error
occurred while deleting %s\n", dp->d_namep);
- }
- }
- }
- }
-}
-
-
/*
* Local Variables:
* tab-width: 8
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