aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorKeith Seitz <keiths@cygnus>1998-07-24 22:02:39 +0000
committerKeith Seitz <keiths@cygnus>1998-07-24 22:02:39 +0000
commit850e1491ccc219164faf4cf29accffeb374cb70d (patch)
tree5fe06f9eb1e4197341b56e0c021e912591b24f49 /gdb
parent73fe88bc9f2ee26a53145b6b113a7ca53441fa68 (diff)
downloadgdb-850e1491ccc219164faf4cf29accffeb374cb70d.zip
gdb-850e1491ccc219164faf4cf29accffeb374cb70d.tar.gz
gdb-850e1491ccc219164faf4cf29accffeb374cb70d.tar.bz2
* gdbtk-cmds.c (gdb_search): Add missing NULL to switches.
Add missing flags to result_ptr. Pass along any errors caused by getting the list of files from tcl. Allocate correct amount of memory for the file list. Don't do any unecessary cleanups.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog-gdbtk9
-rw-r--r--gdb/gdbtk-cmds.c74
2 files changed, 50 insertions, 33 deletions
diff --git a/gdb/ChangeLog-gdbtk b/gdb/ChangeLog-gdbtk
index 3757815..fa5ea27 100644
--- a/gdb/ChangeLog-gdbtk
+++ b/gdb/ChangeLog-gdbtk
@@ -1,3 +1,12 @@
+Fri Jul 24 14:25:43 1998 Keith Seitz <keiths@cygnus.com>
+
+ * gdbtk-cmds.c (gdb_search): Add missing NULL to switches.
+ Add missing flags to result_ptr.
+ Pass along any errors caused by getting the list of files from
+ tcl.
+ Allocate correct amount of memory for the file list.
+ Don't do any unecessary cleanups.
+
Fri Jul 24 01:08:37 1998 Martin M. Hunt <hunt@cygnus.com>
* gdbtk-cmds.c (gdb_loadfile): When there are no
diff --git a/gdb/gdbtk-cmds.c b/gdb/gdbtk-cmds.c
index cb98e5c..4b450f6 100644
--- a/gdb/gdbtk-cmds.c
+++ b/gdb/gdbtk-cmds.c
@@ -1263,7 +1263,7 @@ gdb_search (clientData, interp, objc, objv)
int objc;
Tcl_Obj *CONST objv[];
{
- struct symbol_search *ss;
+ struct symbol_search *ss = NULL;
struct symbol_search *p;
struct cleanup *old_chain;
Tcl_Obj *list, *result, *CONST *switch_objv;
@@ -1274,19 +1274,23 @@ gdb_search (clientData, interp, objc, objv)
Tcl_Obj **file_list;
char **files;
static char *search_options[] = { "functions", "variables", "types", (char *) NULL };
- static char *switches[] = { "-files", "-static" };
+ static char *switches[] = { "-files", "-static", (char *) NULL };
enum search_opts { SEARCH_FUNCTIONS, SEARCH_VARIABLES, SEARCH_TYPES };
enum switches_opts { SWITCH_FILES, SWITCH_STATIC_ONLY };
if (objc < 3)
{
Tcl_WrongNumArgs (interp, 1, objv, "option regexp ?arg ...?");
+ result_ptr->flags |= GDBTK_IN_TCL_RESULT;
return TCL_ERROR;
}
if (Tcl_GetIndexFromObj (interp, objv[1], search_options, "option", 0,
&index) != TCL_OK)
- return TCL_ERROR;
+ {
+ result_ptr->flags |= GDBTK_IN_TCL_RESULT;
+ return TCL_ERROR;
+ }
/* Unfortunately, we cannot teach search_symbols to search on
multiple regexps, so we have to do a two-tier search for
@@ -1313,56 +1317,58 @@ gdb_search (clientData, interp, objc, objv)
{
if (Tcl_GetIndexFromObj (interp, switch_objv[0], switches,
"option", 0, &index) != TCL_OK)
- {
- result_ptr->flags |= GDBTK_IN_TCL_RESULT;
- return TCL_ERROR;
- }
+ {
+ result_ptr->flags |= GDBTK_IN_TCL_RESULT;
+ return TCL_ERROR;
+ }
switch ((enum switches_opts) index)
{
case SWITCH_FILES:
- if (switch_objc < 2)
- {
- Tcl_WrongNumArgs (interp, 2, objv, "[-files fileList -static 1|0]");
- result_ptr->flags |= GDBTK_IN_TCL_RESULT;
- return TCL_ERROR;
- }
- Tcl_ListObjGetElements (interp, switch_objv[1], &nfiles, &file_list);
- files = (char **) xmalloc (nfiles);
- old_chain = make_cleanup (free, files);
-
- for (i = 0; i < nfiles; i++)
+ {
+ int result;
+ if (switch_objc < 2)
+ {
+ Tcl_WrongNumArgs (interp, 2, objv, "[-files fileList -static 1|0]");
+ result_ptr->flags |= GDBTK_IN_TCL_RESULT;
+ return TCL_ERROR;
+ }
+ result = Tcl_ListObjGetElements (interp, switch_objv[1], &nfiles, &file_list);
+ if (result != TCL_OK)
+ return result;
+
+ files = (char **) xmalloc (nfiles * sizeof (char *));
+ for (i = 0; i < nfiles; i++)
files[i] = Tcl_GetStringFromObj (file_list[i], NULL);
- switch_objc--;
- switch_objv++;
+ switch_objc--;
+ switch_objv++;
+ }
break;
case SWITCH_STATIC_ONLY:
if (switch_objc < 2)
{
Tcl_WrongNumArgs (interp, 2, objv, "[-files fileList] [-static 1|0]");
- result_ptr->flags |= GDBTK_IN_TCL_RESULT;
+ result_ptr->flags |= GDBTK_IN_TCL_RESULT;
return TCL_ERROR;
}
if ( Tcl_GetBooleanFromObj (interp, switch_objv[1], &static_only) !=
- TCL_OK) {
- result_ptr->flags |= GDBTK_IN_TCL_RESULT;
- return TCL_ERROR;
- }
+ TCL_OK) {
+ result_ptr->flags |= GDBTK_IN_TCL_RESULT;
+ return TCL_ERROR;
+ }
switch_objc--;
switch_objv++;
}
-
switch_objc--;
switch_objv++;
}
search_symbols (regexp, space, nfiles, files, &ss);
- if (files != NULL && ss != NULL)
- do_cleanups (old_chain);
- old_chain = make_cleanup (free_search_symbols, ss);
-
- Tcl_SetListObj(result_ptr->obj_ptr, 0, NULL);
-
+ if (ss != NULL)
+ old_chain = make_cleanup (free_search_symbols, ss);
+
+ Tcl_SetListObj(result_ptr->obj_ptr, 0, NULL);
+
for (p = ss; p != NULL; p = p->next)
{
Tcl_Obj *elem;
@@ -1382,7 +1388,9 @@ gdb_search (clientData, interp, objc, objv)
Tcl_ListObjAppendElement (interp, result_ptr->obj_ptr, elem);
}
- do_cleanups (old_chain);
+ if (ss != NULL)
+ do_cleanups (old_chain);
+
return TCL_OK;
}