This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[commit] simplify catch_command_errors
- From: Andrew Cagney <cagney at gnu dot org>
- To: gdb-patches at sources dot redhat dot com
- Date: Sat, 15 Jan 2005 13:59:52 -0500
- Subject: [commit] simplify catch_command_errors
No need for all the wrapper stuff, committed.
Andrew
2005-01-15 Andrew Cagney <cagney@gnu.org>
* exceptions.c (do_captured_command)
(struct captured_command_args): Delete.
(catch_command_errors): Simplify by inlining call to catch_errors.
Index: exceptions.c
===================================================================
RCS file: /cvs/src/src/gdb/exceptions.c,v
retrieving revision 1.12
diff -p -u -r1.12 exceptions.c
--- exceptions.c 15 Jan 2005 06:03:34 -0000 1.12
+++ exceptions.c 15 Jan 2005 18:58:45 -0000
@@ -515,36 +515,16 @@ catch_errors (catch_errors_ftype *func,
return val;
}
-struct captured_command_args
- {
- catch_command_errors_ftype *command;
- char *arg;
- int from_tty;
- };
-
-static int
-do_captured_command (void *data)
-{
- struct captured_command_args *context = data;
- context->command (context->arg, context->from_tty);
- /* FIXME: cagney/1999-11-07: Technically this do_cleanups() call
- isn't needed. Instead an assertion check could be made that
- simply confirmed that the called function correctly cleaned up
- after itself. Unfortunately, old code (prior to 1999-11-04) in
- main.c was calling SET_TOP_LEVEL(), calling the command function,
- and then *always* calling do_cleanups(). For the moment we
- remain ``bug compatible'' with that old code.. */
- do_cleanups (ALL_CLEANUPS);
- return 1;
-}
-
int
catch_command_errors (catch_command_errors_ftype * command,
char *arg, int from_tty, return_mask mask)
{
- struct captured_command_args args;
- args.command = command;
- args.arg = arg;
- args.from_tty = from_tty;
- return catch_errors (do_captured_command, &args, "", mask);
+ volatile struct exception e;
+ SIGJMP_BUF *catch = catcher_init (uiout, NULL, &e, mask);
+ for (SIGSETJMP ((*catch)); catcher_state_machine (CATCH_ITER);)
+ command (arg, from_tty);
+ print_any_exception (gdb_stderr, NULL, e);
+ if (e.reason < 0)
+ return 0;
+ return 1;
}