summaryrefslogtreecommitdiff
blob: 517fe93f8b2c0462dab966301e3a584c5b54e488 (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Submitted By: Bryan Kadzban <bryan@kadzban.is-a-geek.net>
Date: 2008-01-12
Initial Package Version: 5.43
Upstream status: Not Submitted - Test Version
Origin: LFS ticket 2126 (http://wiki.linuxfromscratch.org/lfs/ticket/2126)
Description: Removes references to functions that Tcl 8.5 no longer exposes.

diff -Naur expect-5.43/exp_command.c expect-5.43-patched/exp_command.c
--- expect-5.43/exp_command.c	2004-08-20 13:18:01.000000000 -0400
+++ expect-5.43-patched/exp_command.c	2008-01-12 11:42:45.000000000 -0500
@@ -2265,6 +2265,8 @@
 	/*NOTREACHED*/
 }
 
+static struct exp_cmd_data cmd_data[];
+
 /*ARGSUSED*/
 static int
 Exp_CloseObjCmd(clientData, interp, objc, objv)
@@ -2311,12 +2313,23 @@
 	/* Historical note: we used "close"  long before there was a */
 	/* Tcl builtin by the same name. */
 
+	/* The code that registered this function as the handler for */
+	/* the "close" command stored away the old handler in the */
+	/* exp_cmd_data for the "close" command. */
+
+	struct exp_cmd_data *cmd_ptr;
 	Tcl_CmdInfo info;
+
+	for(cmd_ptr = &cmd_data[0]; cmd_ptr->name; cmd_ptr++) {
+	    if(strncmp(cmd_ptr->name, "close", 5) == 0)
+		break;
+	}
+
 	Tcl_ResetResult(interp);
 	if (0 == Tcl_GetCommandInfo(interp,"close",&info)) {
 	    info.clientData = 0;
 	}
-	return(Tcl_CloseObjCmd(info.clientData,interp,objc_orig,objv_orig));
+	return(cmd_ptr->old_objProc(info.clientData,interp,objc_orig,objv_orig));
     }
 
     if (chanName) {
@@ -2961,7 +2974,10 @@
     /* if successful (i.e., TCL_RETURN is returned) */
     /* modify the result, so that we will handle it specially */
 
-    int result = Tcl_ReturnObjCmd(clientData,interp,objc,objv);
+    Tcl_CmdInfo info;
+    Tcl_GetCommandInfo(interp, "return", &info);
+
+    int result = info.objProc(clientData,interp,objc,objv);
     if (result == TCL_RETURN)
         result = EXP_TCL_RETURN;
     return result;
@@ -3062,8 +3078,7 @@
 
 	for (;c->name;c++) {
 		/* if already defined, don't redefine */
-		if ((c->flags & EXP_REDEFINE) ||
-		    !(Tcl_FindHashEntry(&globalNsPtr->cmdTable,c->name) ||
+		if (!(Tcl_FindHashEntry(&globalNsPtr->cmdTable,c->name) ||
 		      Tcl_FindHashEntry(&currNsPtr->cmdTable,c->name))) {
 			if (c->objproc)
 				Tcl_CreateObjCommand(interp,c->name,
@@ -3072,6 +3087,21 @@
 				Tcl_CreateCommand(interp,c->name,c->proc,
 						  c->data,exp_deleteProc);
 		}
+		else if (c->flags & EXP_REDEFINE) { /* unless the REDEFINE flag is present */
+			Tcl_CmdInfo info;
+
+			if (Tcl_GetCommandInfo(interp, c->name, &info)) {
+				c->old_proc	= info.proc;
+				c->old_objProc	= info.objProc;
+			}
+
+			if (c->objproc)
+				Tcl_CreateObjCommand(interp,c->name,
+						     c->objproc,c->data,exp_deleteObjProc);
+			else
+				Tcl_CreateCommand(interp,c->name,c->proc,
+						  c->data,exp_deleteProc);
+		}
 		if (!(c->name[0] == 'e' &&
 		      c->name[1] == 'x' &&
 		      c->name[2] == 'p')
diff -Naur expect-5.43/exp_command.h expect-5.43-patched/exp_command.h
--- expect-5.43/exp_command.h	2008-01-12 11:44:11.000000000 -0500
+++ expect-5.43-patched/exp_command.h	2008-01-12 11:26:05.000000000 -0500
@@ -297,6 +297,8 @@
 	Tcl_CmdProc	*proc;
 	ClientData	data;
 	int 		flags;
+	Tcl_CmdProc	*old_proc;     /* these store the procedure for the old command, */
+	Tcl_ObjCmdProc	*old_objProc;  /* if any */
 };
 
 EXTERN void		exp_create_commands _ANSI_ARGS_((Tcl_Interp *,