summaryrefslogtreecommitdiffstats
path: root/network/cicb/tcl_continue_error.diff
blob: dcba1b865c760738fdee4f18a5ed0fb57e6bc3b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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 = "";