-diff -ur expect-5.43.orig/exp_command.c expect-5.43/exp_command.c
---- expect-5.43.orig/exp_command.c 2004-08-20 19:18:01.000000000 +0200
-+++ expect-5.43/exp_command.c 2008-01-19 17:40:20.000000000 +0100
-@@ -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 -ur expect-5.43.orig/exp_command.h expect-5.43/exp_command.h
---- expect-5.43.orig/exp_command.h 2004-07-30 17:35:28.000000000 +0200
-+++ expect-5.43/exp_command.h 2008-01-19 17:40:20.000000000 +0100
-@@ -295,6 +295,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 *,
-diff -ur expect-5.43.orig/exp_inter.c expect-5.43/exp_inter.c
---- expect-5.43.orig/exp_inter.c 2004-08-18 04:03:00.000000000 +0200
-+++ expect-5.43/exp_inter.c 2008-01-19 17:40:01.000000000 +0100
-@@ -35,7 +35,7 @@
-
- #include <ctype.h>
-
--#include "tcl.h"
-+#include "tclInt.h"
- #include "string.h"
-
- #include "exp_tty_in.h"