# HG changeset patch # User Jaroslav Hajek # Date 1243256410 -7200 # Node ID 1c2d2c9f4a8d5617d92380e20948e1b35bf288cd # Parent fbb43bc17a4de6959c7ac2885769ec783217e24c don't allow quit() in embedded mode by default, make configurable diff -r fbb43bc17a4d -r 1c2d2c9f4a8d src/ChangeLog --- a/src/ChangeLog Mon May 25 11:54:52 2009 +0200 +++ b/src/ChangeLog Mon May 25 15:00:10 2009 +0200 @@ -1,3 +1,11 @@ +2009-05-25 Jaroslav Hajek + + * toplev.h (quit_allowed): New global variable. + * toplev.cc (quit_allowed): Declare it. + (Fquit): Raise error if quitting is not allowed. + * octave.cc (octave_main): if running as embedded, disable quit by + default. + 2009-05-25 Jaroslav Hajek * variables.cc (do_who): Only output symbols with a defined value. diff -r fbb43bc17a4d -r 1c2d2c9f4a8d src/octave.cc --- a/src/octave.cc Mon May 25 11:54:52 2009 +0200 +++ b/src/octave.cc Mon May 25 15:00:10 2009 +0200 @@ -647,6 +647,8 @@ if (! embedded) install_signal_handlers (); + else + quit_allowed = false; initialize_file_io (); diff -r fbb43bc17a4d -r 1c2d2c9f4a8d src/toplev.cc --- a/src/toplev.cc Mon May 25 11:54:52 2009 +0200 +++ b/src/toplev.cc Mon May 25 15:00:10 2009 +0200 @@ -81,6 +81,9 @@ void (*octave_exit) (int) = ::exit; +// TRUE means the quit() call is allowed. +bool quit_allowed = true; + // TRUE means we are exiting via the builtin exit or quit functions. static bool quitting_gracefully = false; @@ -654,7 +657,9 @@ { octave_value_list retval; - if (nargout == 0) + if (! quit_allowed) + error ("quit: not supported in embedded mode."); + else if (nargout == 0) { int exit_status = 0; diff -r fbb43bc17a4d -r 1c2d2c9f4a8d src/toplev.h --- a/src/toplev.h Mon May 25 11:54:52 2009 +0200 +++ b/src/toplev.h Mon May 25 15:00:10 2009 +0200 @@ -46,6 +46,8 @@ typedef void (*octave_exit_func) (int); extern OCTINTERP_API octave_exit_func octave_exit; +extern OCTINTERP_API bool quit_allowed; + // quit is a lot like an interrupt, so we subclass it to simplify possible // handling. class octave_quit_exception