blob: 517fe93f8b2c0462dab966301e3a584c5b54e488 [file] [log] [blame]
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 *,