Revision: 47172 http://brlcad.svn.sourceforge.net/brlcad/?rev=47172&view=rev Author: abhi2011 Date: 2011-10-09 16:29:28 +0000 (Sun, 09 Oct 2011) Log Message: ----------- Eliminating some fishy memory leak fixes
Modified Paths: -------------- brlcad/trunk/src/libged/simulate/simutils.c Modified: brlcad/trunk/src/libged/simulate/simutils.c =================================================================== --- brlcad/trunk/src/libged/simulate/simutils.c 2011-10-08 18:49:43 UTC (rev 47171) +++ brlcad/trunk/src/libged/simulate/simutils.c 2011-10-09 16:29:28 UTC (rev 47172) @@ -103,11 +103,11 @@ void -print_command(char* cmd_args[], int num_args) +print_command(char* cmd_args[], int argc) { int i; char buffer[500] = ""; - for (i=0; i<num_args; i++) { + for (i=0; i<argc; i++) { sprintf(buffer, "%s %s", buffer, cmd_args[i]); } @@ -119,18 +119,21 @@ kill(struct ged *gedp, char *name) { char *cmd_args[5]; + int argc = 2; /* Check if the duplicate already exists, and kill it if so */ if (db_lookup(gedp->ged_wdbp->dbip, name, LOOKUP_QUIET) != RT_DIR_NULL) { bu_log("kill: WARNING \"%s\" exists, deleting it\n", name); - cmd_args[0] = "kill"; - cmd_args[1] = name; + cmd_args[0] = bu_strdup("kill"); + cmd_args[1] = bu_strdup(name); cmd_args[2] = (char *)0; - if (ged_kill(gedp, 2, (const char **)cmd_args) != GED_OK) { + if (ged_kill(gedp, argc, (const char **)cmd_args) != GED_OK) { bu_log("kill: ERROR Could not delete existing \"%s\"\n", name); return GED_ERROR; } + + bu_free_array(argc, cmd_args, "kill: free cmd_args"); } return GED_OK; @@ -141,7 +144,7 @@ kill_copy(struct ged *gedp, struct directory *dp, char* new_name) { char *cmd_args[5]; - int rv; + int rv, argc = 3; if (kill(gedp, new_name) != GED_OK) { bu_log("kill_copy: ERROR Could not delete existing \"%s\"\n", new_name); @@ -149,9 +152,9 @@ } /* Copy the passed prim/comb */ - cmd_args[0] = "copy"; - cmd_args[1] = dp->d_namep; - cmd_args[2] = new_name; + cmd_args[0] = bu_strdup("copy"); + cmd_args[1] = bu_strdup(dp->d_namep); + cmd_args[2] = bu_strdup(new_name); cmd_args[3] = (char *)0; rv = ged_copy(gedp, 3, (const char **)cmd_args); if (rv != GED_OK) { @@ -160,6 +163,8 @@ return GED_ERROR; } + bu_free_array(argc, cmd_args, "kill_copy: free cmd_args"); + return GED_OK; } @@ -168,12 +173,12 @@ add_to_comb(struct ged *gedp, char *target, char *add) { char *cmd_args[5]; - int rv; + int rv, argc = 4; - cmd_args[0] = "comb"; - cmd_args[1] = target; - cmd_args[2] = "u"; - cmd_args[3] = add; + cmd_args[0] = bu_strdup("comb"); + cmd_args[1] = bu_strdup(target); + cmd_args[2] = bu_strdup("u"); + cmd_args[3] = bu_strdup(add); cmd_args[4] = (char *)0; rv = ged_comb(gedp, 4, (const char **)cmd_args); if (rv != GED_OK) { @@ -182,6 +187,8 @@ return GED_ERROR; } + bu_free_array(argc, cmd_args, "add_to_comb: free cmd_args"); + return GED_OK; } @@ -193,7 +200,7 @@ unsigned char b) { char *cmd_args[20]; - int rv, i; + int rv, i, argc = 19; char buffer_str[MAX_FLOATING_POINT_STRLEN]; char *suffix_reg = "_reg"; struct bu_vls reg_vls = BU_VLS_INIT_ZERO; @@ -211,13 +218,13 @@ return GED_ERROR; } - cmd_args[0] = "in"; - cmd_args[1] = name; - cmd_args[2] = "bot"; - cmd_args[3] = "3"; - cmd_args[4] = "1"; - cmd_args[5] = "1"; - cmd_args[6] = "1"; + cmd_args[0] = bu_strdup("in"); + cmd_args[1] = bu_strdup(name); + cmd_args[2] = bu_strdup("bot"); + cmd_args[3] = bu_strdup("3"); + cmd_args[4] = bu_strdup("1"); + cmd_args[5] = bu_strdup("1"); + cmd_args[6] = bu_strdup("1"); sprintf(buffer_str, "%f", from[0]); cmd_args[7] = bu_strdup(buffer_str); sprintf(buffer_str, "%f", from[1]); cmd_args[8] = bu_strdup(buffer_str); @@ -231,24 +238,22 @@ sprintf(buffer_str, "%f", from[1]); cmd_args[14] = bu_strdup(buffer_str); sprintf(buffer_str, "%f", from[2]); cmd_args[15] = bu_strdup(buffer_str); - cmd_args[16] = "0"; - cmd_args[17] = "1"; - cmd_args[18] = "2"; + cmd_args[16] = bu_strdup("0"); + cmd_args[17] = bu_strdup("1"); + cmd_args[18] = bu_strdup("2"); cmd_args[19] = (char *)0; print_command(cmd_args, 19); - rv = ged_in(gedp, 19, (const char **)cmd_args); + rv = ged_in(gedp, argc, (const char **)cmd_args); if (rv != GED_OK) { bu_log("line: ERROR Could not draw line \"%s\" (%f,%f,%f)-(%f,%f,%f) \n", name, V3ARGS(from), V3ARGS(to)); return GED_ERROR; } - for(i=7; i<16; i++){ - bu_free(cmd_args[i], "line: free cmd_args"); - } + bu_free_array(argc, cmd_args, "line: free cmd_args"); add_to_comb(gedp, bu_vls_addr(®_vls), name); apply_material(gedp, bu_vls_addr(®_vls), "plastic tr 0.9", r, g, b); @@ -261,7 +266,7 @@ arrow(struct ged *gedp, char* name, point_t from, point_t to) { char *cmd_args[20]; - int rv, i; + int rv, i, argc = 19; char buffer_str[MAX_FLOATING_POINT_STRLEN]; char *prefix_arrow_line = "arrow_line_"; char *prefix_arrow_head = "arrow_head_"; @@ -287,13 +292,13 @@ return GED_ERROR; } - cmd_args[0] = "in"; - cmd_args[1] = prefixed_arrow_line; - cmd_args[2] = "bot"; - cmd_args[3] = "3"; - cmd_args[4] = "1"; - cmd_args[5] = "1"; - cmd_args[6] = "1"; + cmd_args[0] = bu_strdup("in"); + cmd_args[1] = bu_strdup(prefixed_arrow_line); + cmd_args[2] = bu_strdup("bot"); + cmd_args[3] = bu_strdup("3"); + cmd_args[4] = bu_strdup("1"); + cmd_args[5] = bu_strdup("1"); + cmd_args[6] = bu_strdup("1"); sprintf(buffer_str, "%f", from[0]); cmd_args[7] = bu_strdup(buffer_str); sprintf(buffer_str, "%f", from[1]); cmd_args[8] = bu_strdup(buffer_str); @@ -307,24 +312,22 @@ sprintf(buffer_str, "%f", from[1]); cmd_args[14] = bu_strdup(buffer_str); sprintf(buffer_str, "%f", from[2]); cmd_args[15] = bu_strdup(buffer_str); - cmd_args[16] = "0"; - cmd_args[17] = "1"; - cmd_args[18] = "2"; + cmd_args[16] = bu_strdup("0"); + cmd_args[17] = bu_strdup("1"); + cmd_args[18] = bu_strdup("2"); cmd_args[19] = (char *)0; print_command(cmd_args, 19); - rv = ged_in(gedp, 19, (const char **)cmd_args); + rv = ged_in(gedp, argc, (const char **)cmd_args); if (rv != GED_OK) { bu_log("line: ERROR Could not draw arrow line \"%s\" (%f,%f,%f)-(%f,%f,%f) \n", prefixed_arrow_line, V3ARGS(from), V3ARGS(to)); return GED_ERROR; } - for(i=7; i<16; i++){ - bu_free(cmd_args[i], "arrow: free cmd_args"); - } + bu_free_array(argc, cmd_args, "arrow: free cmd_args"); add_to_comb(gedp, name, prefixed_arrow_line); @@ -333,9 +336,10 @@ VSCALE(v, v, 0.1); bu_log("line: Unit vector (%f,%f,%f)\n", V3ARGS(v)); - cmd_args[0] = "in"; - cmd_args[1] = prefixed_arrow_head; - cmd_args[2] = "trc"; + argc = 11; + cmd_args[0] = bu_strdup("in"); + cmd_args[1] = bu_strdup(prefixed_arrow_head); + cmd_args[2] = bu_strdup("trc"); sprintf(buffer_str, "%f", to[0]); cmd_args[3] = bu_strdup(buffer_str); sprintf(buffer_str, "%f", to[1]); cmd_args[4] = bu_strdup(buffer_str); @@ -353,16 +357,14 @@ print_command(cmd_args, 11); - rv = ged_in(gedp, 11, (const char **)cmd_args); + rv = ged_in(gedp, argc, (const char **)cmd_args); if (rv != GED_OK) { bu_log("line: ERROR Could not draw arrow head \"%s\" (%f,%f,%f)-(%f,%f,%f) \n", prefixed_arrow_head, V3ARGS(from), V3ARGS(to)); return GED_ERROR; } - for(i=3; i<9; i++){ - bu_free(cmd_args[i], "arrow: free cmd_args"); - } + bu_free_array(argc, cmd_args, "apply_material: free cmd_args"); add_to_comb(gedp, name, prefixed_arrow_head); @@ -378,31 +380,29 @@ unsigned char g, unsigned char b) { - int rv; + int rv, argc = 7; char buffer_str[MAX_FLOATING_POINT_STRLEN]; char* cmd_args[28]; - cmd_args[0] = "mater"; - cmd_args[1] = comb; - cmd_args[2] = material; + cmd_args[0] = bu_strdup("mater"); + cmd_args[1] = bu_strdup(comb); + cmd_args[2] = bu_strdup(material); sprintf(buffer_str, "%d", r); cmd_args[3] = bu_strdup(buffer_str); sprintf(buffer_str, "%d", g); cmd_args[4] = bu_strdup(buffer_str); sprintf(buffer_str, "%d", b); cmd_args[5] = bu_strdup(buffer_str); - cmd_args[6] = "0"; + cmd_args[6] = bu_strdup("0"); cmd_args[7] = (char *)0; - rv = ged_mater(gedp, 7, (const char **)cmd_args); + rv = ged_mater(gedp, argc, (const char **)cmd_args); if (rv != GED_OK) { bu_log("apply_material: WARNING Could not adjust the material to %s(%d, %d, %d) for \"%s\"\n", material, r, g, b, comb); return GED_ERROR; } - bu_free(cmd_args[3], "apply_material: free cmd_args"); - bu_free(cmd_args[4], "apply_material: free cmd_args"); - bu_free(cmd_args[5], "apply_material: free cmd_args"); + bu_free_array(argc, cmd_args, "apply_material: free cmd_args"); return GED_OK; } @@ -465,13 +465,13 @@ int make_rpp(struct ged *gedp, vect_t min, vect_t max, char* name) { - int rv, i; + int rv, argc = 9; char buffer_str[MAX_FLOATING_POINT_STRLEN]; char* cmd_args[28]; - cmd_args[0] = "in"; - cmd_args[1] = name; - cmd_args[2] = "rpp"; + cmd_args[0] = bu_strdup("in"); + cmd_args[1] = bu_strdup(name); + cmd_args[2] = bu_strdup("rpp"); sprintf(buffer_str, "%f", min[0]); cmd_args[3] = bu_strdup(buffer_str); sprintf(buffer_str, "%f", max[0]); cmd_args[4] = bu_strdup(buffer_str); @@ -492,10 +492,10 @@ return GED_ERROR; } - for(i=3; i<9; i++){ - bu_free(cmd_args[i], "make_rpp: free cmd_args"); - } + bu_free_array(argc, cmd_args, "make_rpp: free cmd_args"); + + return GED_OK; } @@ -505,7 +505,7 @@ { char* cmd_args[28]; char buffer[MAX_FLOATING_POINT_STRLEN]; - int rv, i; + int rv, i, argc = 27; char *prefix = "bb_"; char *prefix_reg = "bb_reg_"; char *prefixed_name, *prefixed_reg_name; @@ -536,9 +536,9 @@ } /* Setup the simulation result group union-ing the new objects */ - cmd_args[0] = "in"; - cmd_args[1] = prefixed_name; - cmd_args[2] = "arb8"; + cmd_args[0] = bu_strdup("in"); + cmd_args[1] = bu_strdup(prefixed_name); + cmd_args[2] = bu_strdup("arb8"); /* Front face vertices */ /* v1 */ @@ -608,12 +608,14 @@ /* Finally make the bb primitive, phew ! */ cmd_args[27] = (char *)0; - rv = ged_in(gedp, 27, (const char **)cmd_args); + rv = ged_in(gedp, argc, (const char **)cmd_args); if (rv != GED_OK) { bu_log("insertAABB: WARNING Could not draw bounding box for \"%s\"\n", current_node->rb_namep); } + bu_free_array(argc, cmd_args, "make_rpp: free cmd_args"); + /* Make the region for the bb primitive */ add_to_comb(gedp, prefixed_reg_name, prefixed_name); @@ -626,10 +628,6 @@ bu_vls_free(&buffer1); bu_vls_free(&buffer2); - for(i=3; i<27; i++){ - bu_free(cmd_args[i], "insert_AABB: free cmd_args"); - } - return GED_OK; } @@ -640,7 +638,7 @@ { char* cmd_args[28]; char buffer[20]; - int rv, num_args; + int rv, argc; char *prefix = "mf_"; char *prefix_reg = "mf_reg_"; char *prefix_normal = "normal_"; @@ -687,10 +685,10 @@ } /* Setup the simulation result group union-ing the new objects */ - cmd_args[0] = "in"; - cmd_args[1] = bu_vls_addr(&prefixed_name); + cmd_args[0] = bu_strdup("in"); + cmd_args[1] = bu_strdup(bu_vls_addr(&prefixed_name)); cmd_args[2] = (char *)0; - num_args = 2; + argc = 2; switch(current_manifold->num_bt_contacts) { case 1: @@ -698,7 +696,7 @@ break; case 2: - cmd_args[2] = "arb4"; + cmd_args[2] = bu_strdup("arb4"); sprintf(buffer, "%f", current_manifold->bt_contacts[0].ptA[0]); cmd_args[3] = bu_strdup(buffer); sprintf(buffer, "%f", current_manifold->bt_contacts[0].ptA[1]); @@ -728,7 +726,7 @@ cmd_args[14] = bu_strdup(buffer); cmd_args[15] = (char *)0; - num_args = 15; + argc = 15; VADD2SCALE(from, current_manifold->bt_contacts[0].ptA, current_manifold->bt_contacts[1].ptB, 0.5); @@ -739,7 +737,7 @@ break; case 4: - cmd_args[2] = "arb8"; + cmd_args[2] = bu_strdup("arb8"); for (i=0; i<4; i++) { sprintf(buffer, "%f", current_manifold->bt_contacts[i].ptA[0]); cmd_args[3+i*3] = bu_strdup(buffer); @@ -766,7 +764,7 @@ current cmd_argsrent_manifold->bt_contacts[i].normalWorldOnB[2]);*/ } cmd_args[27] = (char *)0; - num_args = 27; + argc = 27; VADD2SCALE(from, current_manifold->bt_contacts[0].ptA, current_manifold->bt_contacts[2].ptB, 0.5); @@ -775,22 +773,20 @@ default: bu_log("%d contacts got, no manifold drawn", current_manifold->num_bt_contacts); cmd_args[2] = (char *)0; - num_args = 2; + argc = 2; break; } - print_command(cmd_args, num_args); + print_command(cmd_args, argc); /* Finally make the manifold primitive, if proper command generated */ - if (num_args > 2) { - rv = ged_in(gedp, num_args, (const char **)cmd_args); + if (argc > 2) { + rv = ged_in(gedp, argc, (const char **)cmd_args); if (rv != GED_OK) { bu_log("insert_manifolds: WARNING Could not draw manifold for \"%s\"\n", rb->rb_namep); } - for(i=3; i<num_args; i++){ - bu_free(cmd_args[i], "insert_manifolds: free cmd_args"); - } + bu_free_array(argc, cmd_args, "insert_manifolds: free cmd_args"); /* Make the region for the manifold primitive */ add_to_comb(gedp, bu_vls_addr(&prefixed_reg_name), bu_vls_addr(&prefixed_name)); @@ -813,7 +809,7 @@ arrow(gedp, bu_vls_addr(&prefixed_normal_name), from, to); add_to_comb(gedp, sim_params->sim_comb_name, bu_vls_addr(&prefixed_normal_name)); - }/* if-num_args */ + }/* if-argc */ }/* if-num_bt_contacts */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ All of the data generated in your IT infrastructure is seriously valuable. Why? It contains a definitive record of application performance, security threats, fraudulent activity, and more. Splunk takes this data and makes sense of it. IT sense. And common sense. http://p.sf.net/sfu/splunk-d2dcopy2 _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits