diff options
Diffstat (limited to 'network/cicb/tcl_continue_error.diff')
-rw-r--r-- | network/cicb/tcl_continue_error.diff | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/network/cicb/tcl_continue_error.diff b/network/cicb/tcl_continue_error.diff new file mode 100644 index 0000000000..dcba1b865c --- /dev/null +++ b/network/cicb/tcl_continue_error.diff @@ -0,0 +1,45 @@ +diff -wNaur -xCVS cicb-5.1.1b3/icb/parse.c cicb/icb/parse.c +--- cicb-5.1.1b3/icb/parse.c 2009-03-23 02:51:53.000000000 -0400 ++++ cicb/icb/parse.c 2013-07-05 02:16:27.000000000 -0400 +@@ -1,4 +1,4 @@ +-/* $Id: parse.c,v 1.20 2009/03/23 06:51:53 hoche Exp $ */ ++/* $Id: parse.c,v 1.21 2013/07/05 06:16:27 hoche Exp $ */ + + /* parse a line from the user */ + +@@ -8,6 +8,9 @@ + + #define ARRAY_SIZE(x) (sizeof (x) / sizeof (x[0])) + ++#define TCL_CONTINUE_ERROR_MSG "invoked \"continue\" outside of a loop" ++#define TCL_IGNORE 666 ++ + + /* This is similar to Tcl_VarEval, but it treats each string as a separate + list element, rather than concat-ing the strings together and then +@@ -76,6 +79,14 @@ + if (status == TCL_CONTINUE) { + send_command (cmd, args); + status = TCL_OK; ++ } else if (status == TCL_ERROR) { ++ ++ /* handle the dreaded "invoked continue" message */ ++ char *errmsg = (char*)Tcl_GetStringResult (interp); ++ if (strcmp(errmsg, TCL_CONTINUE_ERROR_MSG) == 0) { ++ send_command (cmd, args); ++ status = TCL_IGNORE; ++ } + } + + return status; +@@ -122,7 +133,9 @@ + putl (result, PL_SL); + } + error_mode = 0; +- ++ } else if (status == TCL_IGNORE) { ++ /* do nothing */ ++ error_mode = 0; + } else { + /* Report an error. */ + char* errmsg = ""; |