Revision: 76926
http://sourceforge.net/p/brlcad/code/76926
Author: starseeker
Date: 2020-08-24 20:53:20 +0000 (Mon, 24 Aug 2020)
Log Message:
-----------
Check mvars and vparse returns once, up front, before use
Modified Paths:
--------------
brlcad/trunk/src/mged/dm-generic.c
Modified: brlcad/trunk/src/mged/dm-generic.c
===================================================================
--- brlcad/trunk/src/mged/dm-generic.c 2020-08-24 18:30:50 UTC (rev 76925)
+++ brlcad/trunk/src/mged/dm-generic.c 2020-08-24 20:53:20 UTC (rev 76926)
@@ -659,36 +659,39 @@
struct dm_hook_data mged_dm_hook;
if (BU_STR_EQUAL(argv[0], "set")) {
struct bu_vls vls = BU_VLS_INIT_ZERO;
+ struct bu_structparse *dmparse = dm_get_vparse(DMP);
+ void *mvars = dm_get_mvars(DMP);
+ if (dmparse && mvars) {
+ if (argc < 2) {
+ struct bu_vls report_str = BU_VLS_INIT_ZERO;
- if (argc < 2) {
- struct bu_vls report_str = BU_VLS_INIT_ZERO;
- if (dm_get_dm_name(DMP) && dm_get_vparse(DMP)) {
bu_vls_sprintf(&report_str, "Display Manager (type %s) internal
variables", dm_get_dm_name(DMP));
/* Bare set command, print out current settings */
- bu_vls_struct_print2(&vls, bu_vls_addr(&report_str),
dm_get_vparse(DMP), (const char *)dm_get_mvars(DMP));
- }
- bu_vls_free(&report_str);
- } else if (argc == 2) {
- /* TODO - need to add hook func support to this func, since the one
in the libdm structparse isn't enough by itself */
- if (dm_get_mvars(DMP) && dm_get_vparse(DMP)) {
- bu_vls_struct_item_named(&vls, dm_get_vparse(DMP), argv[1],
(const char *)dm_get_mvars(DMP), COMMA);
- }
- } else {
- struct bu_vls tmp_vls = BU_VLS_INIT_ZERO;
- int ret;
- struct mged_view_hook_state global_hs;
- void *data = set_hook_data(&global_hs);
+ bu_vls_struct_print2(&vls, bu_vls_addr(&report_str), dmparse,
(const char *)mvars);
+ bu_vls_free(&report_str);
+ } else if (argc == 2) {
+ /* TODO - need to add hook func support to this func, since the
+ * one in the libdm structparse isn't enough by itself */
+ if (dm_get_mvars(DMP) && dm_get_vparse(DMP)) {
+ bu_vls_struct_item_named(&vls, dmparse, argv[1], (const
char *)mvars, COMMA);
+ }
+ } else {
+ struct bu_vls tmp_vls = BU_VLS_INIT_ZERO;
+ int ret;
+ struct mged_view_hook_state global_hs;
+ void *data = set_hook_data(&global_hs);
- ret = dm_set_hook(vparse_map, argv[1], data, &mged_dm_hook);
+ ret = dm_set_hook(vparse_map, argv[1], data, &mged_dm_hook);
- bu_vls_printf(&tmp_vls, "%s=\"", argv[1]);
- bu_vls_from_argv(&tmp_vls, argc-2, (const char **)argv+2);
- bu_vls_putc(&tmp_vls, '\"');
- ret = bu_struct_parse(&tmp_vls, dm_get_vparse(DMP), (char
*)dm_get_mvars(DMP), (void *)(&mged_dm_hook));
- bu_vls_free(&tmp_vls);
- if (ret < 0) {
- bu_vls_free(&vls);
- return TCL_ERROR;
+ bu_vls_printf(&tmp_vls, "%s=\"", argv[1]);
+ bu_vls_from_argv(&tmp_vls, argc-2, (const char **)argv+2);
+ bu_vls_putc(&tmp_vls, '\"');
+ ret = bu_struct_parse(&tmp_vls, dmparse, (char *)mvars, (void
*)(&mged_dm_hook));
+ bu_vls_free(&tmp_vls);
+ if (ret < 0) {
+ bu_vls_free(&vls);
+ return TCL_ERROR;
+ }
}
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits