| [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 *, | 
|---|