]> git.pld-linux.org Git - packages/expect.git/commitdiff
- fix for compilation with TCL 8.5, taken from
authorhawk <hawk@pld-linux.org>
Sat, 19 Jan 2008 16:43:50 +0000 (16:43 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
  http://wiki.linuxfromscratch.org/lfs/ticket/2126

Changed files:
    expect-tcl85.patch -> 1.1

expect-tcl85.patch [new file with mode: 0644]

diff --git a/expect-tcl85.patch b/expect-tcl85.patch
new file mode 100644 (file)
index 0000000..bdee084
--- /dev/null
@@ -0,0 +1,105 @@
+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"
This page took 0.060533 seconds and 4 git commands to generate.