[e8e6c4e] | 1 | Submitted By: Bryan Kadzban <bryan@kadzban.is-a-geek.net> |
---|
| 2 | Date: 2008-01-12 |
---|
| 3 | Initial Package Version: 5.43 |
---|
| 4 | Upstream status: Not Submitted - Test Version |
---|
| 5 | Origin: LFS ticket 2126 (http://wiki.linuxfromscratch.org/lfs/ticket/2126) |
---|
| 6 | Description: Removes references to functions that Tcl 8.5 no longer exposes. |
---|
| 7 | |
---|
| 8 | diff -Naur expect-5.43/exp_command.c expect-5.43-patched/exp_command.c |
---|
| 9 | --- expect-5.43/exp_command.c 2004-08-20 13:18:01.000000000 -0400 |
---|
| 10 | +++ expect-5.43-patched/exp_command.c 2008-01-12 11:42:45.000000000 -0500 |
---|
| 11 | @@ -2265,6 +2265,8 @@ |
---|
| 12 | /*NOTREACHED*/ |
---|
| 13 | } |
---|
| 14 | |
---|
| 15 | +static struct exp_cmd_data cmd_data[]; |
---|
| 16 | + |
---|
| 17 | /*ARGSUSED*/ |
---|
| 18 | static int |
---|
| 19 | Exp_CloseObjCmd(clientData, interp, objc, objv) |
---|
| 20 | @@ -2311,12 +2313,23 @@ |
---|
| 21 | /* Historical note: we used "close" long before there was a */ |
---|
| 22 | /* Tcl builtin by the same name. */ |
---|
| 23 | |
---|
| 24 | + /* The code that registered this function as the handler for */ |
---|
| 25 | + /* the "close" command stored away the old handler in the */ |
---|
| 26 | + /* exp_cmd_data for the "close" command. */ |
---|
| 27 | + |
---|
| 28 | + struct exp_cmd_data *cmd_ptr; |
---|
| 29 | Tcl_CmdInfo info; |
---|
| 30 | + |
---|
| 31 | + for(cmd_ptr = &cmd_data[0]; cmd_ptr->name; cmd_ptr++) { |
---|
| 32 | + if(strncmp(cmd_ptr->name, "close", 5) == 0) |
---|
| 33 | + break; |
---|
| 34 | + } |
---|
| 35 | + |
---|
| 36 | Tcl_ResetResult(interp); |
---|
| 37 | if (0 == Tcl_GetCommandInfo(interp,"close",&info)) { |
---|
| 38 | info.clientData = 0; |
---|
| 39 | } |
---|
| 40 | - return(Tcl_CloseObjCmd(info.clientData,interp,objc_orig,objv_orig)); |
---|
| 41 | + return(cmd_ptr->old_objProc(info.clientData,interp,objc_orig,objv_orig)); |
---|
| 42 | } |
---|
| 43 | |
---|
| 44 | if (chanName) { |
---|
| 45 | @@ -2961,7 +2974,10 @@ |
---|
| 46 | /* if successful (i.e., TCL_RETURN is returned) */ |
---|
| 47 | /* modify the result, so that we will handle it specially */ |
---|
| 48 | |
---|
| 49 | - int result = Tcl_ReturnObjCmd(clientData,interp,objc,objv); |
---|
| 50 | + Tcl_CmdInfo info; |
---|
| 51 | + Tcl_GetCommandInfo(interp, "return", &info); |
---|
| 52 | + |
---|
| 53 | + int result = info.objProc(clientData,interp,objc,objv); |
---|
| 54 | if (result == TCL_RETURN) |
---|
| 55 | result = EXP_TCL_RETURN; |
---|
| 56 | return result; |
---|
| 57 | @@ -3062,8 +3078,7 @@ |
---|
| 58 | |
---|
| 59 | for (;c->name;c++) { |
---|
| 60 | /* if already defined, don't redefine */ |
---|
| 61 | - if ((c->flags & EXP_REDEFINE) || |
---|
| 62 | - !(Tcl_FindHashEntry(&globalNsPtr->cmdTable,c->name) || |
---|
| 63 | + if (!(Tcl_FindHashEntry(&globalNsPtr->cmdTable,c->name) || |
---|
| 64 | Tcl_FindHashEntry(&currNsPtr->cmdTable,c->name))) { |
---|
| 65 | if (c->objproc) |
---|
| 66 | Tcl_CreateObjCommand(interp,c->name, |
---|
| 67 | @@ -3072,6 +3087,21 @@ |
---|
| 68 | Tcl_CreateCommand(interp,c->name,c->proc, |
---|
| 69 | c->data,exp_deleteProc); |
---|
| 70 | } |
---|
| 71 | + else if (c->flags & EXP_REDEFINE) { /* unless the REDEFINE flag is present */ |
---|
| 72 | + Tcl_CmdInfo info; |
---|
| 73 | + |
---|
| 74 | + if (Tcl_GetCommandInfo(interp, c->name, &info)) { |
---|
| 75 | + c->old_proc = info.proc; |
---|
| 76 | + c->old_objProc = info.objProc; |
---|
| 77 | + } |
---|
| 78 | + |
---|
| 79 | + if (c->objproc) |
---|
| 80 | + Tcl_CreateObjCommand(interp,c->name, |
---|
| 81 | + c->objproc,c->data,exp_deleteObjProc); |
---|
| 82 | + else |
---|
| 83 | + Tcl_CreateCommand(interp,c->name,c->proc, |
---|
| 84 | + c->data,exp_deleteProc); |
---|
| 85 | + } |
---|
| 86 | if (!(c->name[0] == 'e' && |
---|
| 87 | c->name[1] == 'x' && |
---|
| 88 | c->name[2] == 'p') |
---|
| 89 | diff -Naur expect-5.43/exp_command.h expect-5.43-patched/exp_command.h |
---|
| 90 | --- expect-5.43/exp_command.h 2008-01-12 11:44:11.000000000 -0500 |
---|
| 91 | +++ expect-5.43-patched/exp_command.h 2008-01-12 11:26:05.000000000 -0500 |
---|
| 92 | @@ -297,6 +297,8 @@ |
---|
| 93 | Tcl_CmdProc *proc; |
---|
| 94 | ClientData data; |
---|
| 95 | int flags; |
---|
| 96 | + Tcl_CmdProc *old_proc; /* these store the procedure for the old command, */ |
---|
| 97 | + Tcl_ObjCmdProc *old_objProc; /* if any */ |
---|
| 98 | }; |
---|
| 99 | |
---|
| 100 | EXTERN void exp_create_commands _ANSI_ARGS_((Tcl_Interp *, |
---|