commit:     936218ce779e9b8c68205351b3a91703246611ae
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sat Dec  2 07:55:43 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Dec  2 07:55:50 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=936218ce

dev-tcltk/expect: fix modern c issues

Bug: https://bugs.gentoo.org/881687
Closes: https://bugs.gentoo.org/918972
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-tcltk/expect/expect-5.45.4-r5.ebuild          |  81 +++
 dev-tcltk/expect/files/expect-5.45-warnings.patch | 684 ++++++++++++++++++++++
 2 files changed, 765 insertions(+)

diff --git a/dev-tcltk/expect/expect-5.45.4-r5.ebuild 
b/dev-tcltk/expect/expect-5.45.4-r5.ebuild
new file mode 100644
index 000000000000..51205dad779f
--- /dev/null
+++ b/dev-tcltk/expect/expect-5.45.4-r5.ebuild
@@ -0,0 +1,81 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools edo flag-o-matic
+
+MY_P="${PN}${PV}"
+DESCRIPTION="tool for automating interactive applications"
+HOMEPAGE="https://core.tcl-lang.org/expect/";
+SRC_URI="mirror://sourceforge/${PN}/${MY_P}.tar.gz"
+S="${WORKDIR}"/${MY_P}
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 
~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~x64-macos ~x64-solaris"
+IUSE="debug doc test threads"
+RESTRICT="!test? ( test )"
+
+DEPEND=">=dev-lang/tcl-8.2:=[threads?]"
+RDEPEND="${DEPEND}"
+BDEPEND="test? ( dev-util/dejagnu )"
+
+PATCHES=( "${FILESDIR}"/${P}-examples.patch )
+
+src_prepare() {
+       default
+       sed -i "s:/usr/local/bin:${EPREFIX}/usr/bin:" expect.man || die
+
+       eapply "${FILESDIR}"/${PN}-5.45-gfbsd.patch
+       eapply "${FILESDIR}"/${PN}-5.44.1.15-ldflags.patch
+       eapply "${FILESDIR}"/${PN}-5.45-headers.patch #337943
+       eapply "${FILESDIR}"/${PN}-5.45-format-security.patch
+       eapply "${FILESDIR}"/${PN}-5.45.4-configure-in.patch
+       eapply "${FILESDIR}"/${PN}-5.45.4-configure-clang16.patch
+       eapply "${FILESDIR}"/${PN}-5.45-warnings.patch
+
+       sed -i 's:ifdef HAVE_SYS_WAIT_H:ifndef NO_SYS_WAIT_H:' *.c || die
+
+       # fix install_name on darwin
+       [[ ${CHOST} == *-darwin* ]] && \
+               eapply "${FILESDIR}"/${P}-darwin-install_name.patch
+
+       mv configure.{in,ac} || die
+
+       eautoconf
+}
+
+src_configure() {
+       # bug #881687
+       append-flags -std=gnu89
+
+       # the 64bit flag is useless ... it only adds 64bit compiler flags
+       # (like -m64) which the target toolchain should already handle
+       econf \
+               --cache-file="${S}"/config.cache \
+               --with-tcl="${EPREFIX}/usr/$(get_libdir)" \
+               --disable-64bit \
+               --enable-shared \
+               $(use_enable threads) \
+               $(use_enable debug symbols mem)
+}
+
+expect_make_var() {
+       touch pkgIndex.tcl-hand || die
+       printf 'all:;echo $('$1')\ninclude Makefile' | emake 
--no-print-directory -s -f -
+       rm -f pkgIndex.tcl-hand || die
+}
+
+src_install() {
+       default
+
+       if use doc ; then
+               docinto examples
+
+               edo dodoc \
+                       example/README \
+                       $(printf 'example/%s ' $(expect_make_var _SCRIPTS)) \
+                       $(printf 'example/%s.man ' $(expect_make_var 
_SCRIPTS_MANPAGES))
+       fi
+}

diff --git a/dev-tcltk/expect/files/expect-5.45-warnings.patch 
b/dev-tcltk/expect/files/expect-5.45-warnings.patch
new file mode 100644
index 000000000000..31c3809be374
--- /dev/null
+++ b/dev-tcltk/expect/files/expect-5.45-warnings.patch
@@ -0,0 +1,684 @@
+https://bugs.gentoo.org/918972
+https://core.tcl-lang.org/expect/info/35d0b2bdfecd634d
+--- a/Dbg.c
++++ b/Dbg.c
+@@ -173,12 +173,12 @@ Tcl_Obj *objPtr;
+     }
+ }
+ 
+-/* return 1 to break, 0 to continue */
++/* return 1 to break, 0 to continue 
++ * cmd: command about to be executed
++ * bp: breakpoint to test
++ */
+ static int
+-breakpoint_test(interp,cmd,bp)
+-Tcl_Interp *interp;
+-char *cmd;            /* command about to be executed */
+-struct breakpoint *bp;        /* breakpoint to test */
++breakpoint_test(Tcl_Interp *interp,const char *cmd,struct breakpoint *bp)
+ {
+     if (bp->re) {
+         int found = 0;
+@@ -239,7 +239,7 @@ TclGetFrame2(interp, origFramePtr, string, framePtrPtr, 
dir)
+ {
+     Interp *iPtr = (Interp *) interp;
+     int level, result;
+-    CallFrame *framePtr;      /* frame currently being searched */
++    CallFrame *framePtr = NULL;       /* frame currently being searched */
+ 
+     CallFrame *curFramePtr = iPtr->varFramePtr;
+ 
+@@ -302,7 +302,6 @@ TclGetFrame2(interp, origFramePtr, string, framePtrPtr, 
dir)
+     return result;
+ }
+ 
+-
+ static char *printify(s)
+ char *s;
+ {
+@@ -658,6 +657,8 @@ 
debugger_trap(clientData,interp,level,command,commandInfo,objc,objv)
+               if (goalFramePtr != iPtr->varFramePtr) goto finish;
+               goto start_interact;
+     /* DANGER: unhandled cases! none, up, down, where */
++      default:
++              break; /* Silence compiler warning */
+       }
+ 
+ start_interact:
+@@ -716,6 +717,8 @@ end_interact:
+       case where:
+       PrintStack(interp,iPtr->varFramePtr,viewFramePtr,objc,objv,level_text);
+               break;
++      default:
++              break; /* Silence compiler warning */
+       }
+ 
+       /* restore view and restart interactor */
+--- a/exp_chan.c
++++ b/exp_chan.c
+@@ -58,17 +58,14 @@ static int         ExpGetHandleProc 
_ANSI_ARGS_((ClientData instanceData,
+  */
+ 
+ Tcl_ChannelType expChannelType = {
+-    "exp",                            /* Type name. */
+-    ExpBlockModeProc,                 /* Set blocking/nonblocking mode.*/
+-    ExpCloseProc,                     /* Close proc. */
+-    ExpInputProc,                     /* Input proc. */
+-    ExpOutputProc,                    /* Output proc. */
+-    NULL,                             /* Seek proc. */
+-    NULL,                             /* Set option proc. */
+-    NULL,                             /* Get option proc. */
+-    ExpWatchProc,                     /* Initialize notifier. */
+-    ExpGetHandleProc,                 /* Get OS handles out of channel. */
+-    NULL,                             /* Close2 proc */
++    .typeName = "exp",                        /* Type name. */
++    .version = TCL_CHANNEL_VERSION_2,
++    .blockModeProc = ExpBlockModeProc,        /* Set blocking/nonblocking 
mode.*/
++    .closeProc = ExpCloseProc,                /* Close proc. */
++    .inputProc = ExpInputProc,                /* Input proc. */
++    .outputProc = ExpOutputProc,      /* Output proc. */
++    .watchProc = ExpWatchProc,                /* Initialize notifier. */
++    .getHandleProc = ExpGetHandleProc /* Get OS handles out of channel. */
+ };
+ 
+ typedef struct ThreadSpecificData {
+@@ -437,10 +434,10 @@ ExpGetHandleProc(instanceData, direction, handlePtr)
+     ExpState *esPtr = (ExpState *) instanceData;
+ 
+     if (direction & TCL_WRITABLE) {
+-      *handlePtr = (ClientData) esPtr->fdin;
++      *handlePtr = (ClientData)(intptr_t)esPtr->fdin;
+     }
+     if (direction & TCL_READABLE) {
+-      *handlePtr = (ClientData) esPtr->fdin;
++      *handlePtr = (ClientData)(intptr_t)esPtr->fdin;
+     } else {
+       return TCL_ERROR;
+     }
+--- a/exp_clib.c
++++ b/exp_clib.c
+@@ -56,6 +56,10 @@ would appreciate credit if this program or parts of it are 
used.
+ # endif
+ #endif
+ 
++#ifdef HAVE_UNISTD_H
++#include <unistd.h>
++#endif
++
+ #include <signal.h>
+ /*#include <memory.h> - deprecated - ANSI C moves them into string.h */
+ #include "string.h"
+@@ -122,6 +126,7 @@ extern unsigned long       strtoul _ANSI_ARGS_((CONST char 
*string,
+ 
+ #include <tcl.h>
+ #include "expect.h"
++#include "exp_command.h"
+ #define TclRegError exp_TclRegError
+ 
+ /*
+@@ -1814,6 +1819,13 @@ int fd;
+ 
+ }
+ 
++/* ultrix (at least 4.1-2) fails to obtain controlling tty if setsid */
++/* is called.  setpgrp works though.  */
++#if defined(POSIX) && !defined(ultrix) || defined(__convex__)
++#define DO_SETSID
++#endif
++
++#if !defined(DO_SETSID) && (!defined(SYSV3) || defined(CRAY)) /* { */
+ static
+ void
+ exp_setpgrp()
+@@ -1830,6 +1842,7 @@ exp_setpgrp()
+     (void) setpgrp(0,0);
+ #endif
+ }
++#endif /* } */
+ 
+ /* returns fd of master side of pty */
+ int
+@@ -1840,7 +1853,9 @@ char *argv[];    /* some compiler complains about 
**argv? */
+       int cc;
+       int errorfd;    /* place to stash fileno(stderr) in child */
+                       /* while we're setting up new stderr */
++#if defined(TIOCNOTTY) && !defined(SYSV3) && !defined(DO_SETSID)
+       int ttyfd;
++#endif
+       int sync_fds[2];
+       int sync2_fds[2];
+       int status_pipe[2];
+@@ -2015,15 +2030,6 @@ when trapping, see below in child half of fork */
+       (void) close(exp_pty[0]);
+ #endif
+ 
+-/* ultrix (at least 4.1-2) fails to obtain controlling tty if setsid */
+-/* is called.  setpgrp works though.  */
+-#if defined(POSIX) && !defined(ultrix)
+-#define DO_SETSID
+-#endif
+-#ifdef __convex__
+-#define DO_SETSID
+-#endif
+-
+ #ifdef DO_SETSID
+       setsid();
+ #else
+@@ -2451,7 +2457,7 @@ struct exp_case *ecases;
+       int return_val;
+       int sys_error = 0;
+ #define return_normally(x)    {return_val = x; goto cleanup;}
+-#define return_errno(x)       {sys_error = x; goto cleanup;}
++#define return_errno(x)       {sys_error = x; return_val = -1; goto cleanup;}
+ 
+       f = fdfp2f(fd,fp);
+       if (!f) return_errno(ENOMEM);
+@@ -2860,7 +2866,9 @@ char *program;
+ int
+ exp_disconnect()
+ {
++#if defined(TIOCNOTTY) && !defined(SYSV3) && !defined(POSIX)
+       int ttyfd;
++#endif
+ 
+ #ifndef EALREADY
+ #define EALREADY 37
+--- a/exp_command.c
++++ b/exp_command.c
+@@ -532,6 +532,13 @@ set_pgrp(int fd)
+ }
+ #endif
+ 
++/* ultrix (at least 4.1-2) fails to obtain controlling tty if setsid */
++/* is called.  setpgrp works though.  */
++#if defined(POSIX) && !defined(ultrix) || defined(__convex__)
++#define DO_SETSID
++#endif
++
++#if !defined(DO_SETSID) && (!defined(SYSV3) || defined(CRAY)) /* { */
+ static
+ void
+ expSetpgrp()
+@@ -548,7 +555,7 @@ expSetpgrp()
+     (void) setpgrp(0,0);
+ #endif
+ }
+-
++#endif /* } */
+ 
+ /*ARGSUSED*/
+ static void
+@@ -581,9 +588,7 @@ Exp_SpawnObjCmd(
+     ExpState *esPtr = 0;
+     int slave;
+     int pid;
+-#ifdef TIOCNOTTY
+-    /* tell Saber to ignore non-use of ttyfd */
+-    /*SUPPRESS 591*/
++#if defined(TIOCNOTTY) && !defined(SYSV3) && !defined(DO_SETSID)
+     int ttyfd;
+ #endif /* TIOCNOTTY */
+     int errorfd;      /* place to stash fileno(stderr) in child */
+@@ -903,13 +908,17 @@ Exp_SpawnObjCmd(
+           if (TCL_ERROR == Tcl_GetChannelHandle(channel, TCL_READABLE, 
&rfdc)) {
+               return TCL_ERROR;
+           }
+-          rfd = (int)(long) rfdc;
++          rfd = (int)(intptr_t) rfdc;
++      } else {
++          rfd = -1;
+       }
+       if (mode & TCL_WRITABLE) {
+           if (TCL_ERROR == Tcl_GetChannelHandle(channel, TCL_WRITABLE, 
&wfdc)) {
+               return TCL_ERROR;
+           }
+-          wfd = (int)(long) wfdc;
++          wfd = (int)(intptr_t) wfdc;
++      } else {
++          wfd = -1;
+       }
+       master = ((mode & TCL_READABLE)?rfd:wfd);
+ 
+@@ -1126,15 +1135,6 @@ Exp_SpawnObjCmd(
+     (void) close(master);
+ #endif
+ 
+-/* ultrix (at least 4.1-2) fails to obtain controlling tty if setsid */
+-/* is called.  setpgrp works though.  */
+-#if defined(POSIX) && !defined(ultrix)
+-#define DO_SETSID
+-#endif
+-#ifdef __convex__
+-#define DO_SETSID
+-#endif
+-
+ #ifdef DO_SETSID
+     setsid();
+ #else
+@@ -1976,7 +1976,7 @@ Exp_SendObjCmd(
+ #define SEND_STYLE_BREAK      0x20
+     int send_style = SEND_STYLE_PLAIN;
+     int want_cooked = TRUE;
+-    char *string;             /* string to send */
++    char *string = NULL;              /* string to send */
+     int len = -1;             /* length of string to send */
+     int zeros;                /* count of how many ascii zeros to send */
+ 
+@@ -3114,9 +3114,7 @@ Exp_DisconnectObjCmd(
+ {
+     ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
+     
+-#ifdef TIOCNOTTY
+-    /* tell CenterLine to ignore non-use of ttyfd */
+-    /*SUPPRESS 591*/
++#if defined(TIOCNOTTY) && !defined(SYSV3) && !defined(DO_SETSID)
+     int ttyfd;
+ #endif /* TIOCNOTTY */
+ 
+--- a/exp_event.c
++++ b/exp_event.c
+@@ -24,6 +24,7 @@ NIST would appreciate credit if this program or parts of it 
are used.
+ #include "exp_prog.h"
+ #include "exp_command.h"      /* for ExpState defs */
+ #include "exp_event.h"
++#include "exp_log.h"
+ 
+ typedef struct ThreadSpecificData {
+     int rr;           /* round robin ptr */
+@@ -120,6 +121,9 @@ exp_unblock_background_channelhandler(esPtr)
+       case disarm_req_while_blocked:
+           exp_disarm_background_channelhandler_force(esPtr);
+           break;
++      default:
++          expDiagLog("Unexpected value %d of bg-handler in %s",
++              esPtr->bg_status, __func__);
+     }
+ }
+ 
+--- a/exp_inter.c
++++ b/exp_inter.c
+@@ -404,8 +404,8 @@ intEcho(
+     int matchBytes)
+ {
+     int seenBytes;    /* either printed or echoed */
+-    int echoBytes;
+-    int offsetBytes;
++    int echoBytes = 0;
++    int offsetBytes = 0;
+ 
+     /* write is unlikely to fail, since we just read from same descriptor */
+     seenBytes = esPtr->printed + esPtr->echoed;
+@@ -706,9 +706,6 @@ inter_updateproc(
+                       
+ #define finish(x)     { status = x; goto done; }
+ 
+-static char return_cmd[] = "return";
+-static char interpreter_cmd[] = "interpreter";
+-
+ /*ARGSUSED*/
+ int
+ Exp_InteractObjCmd(
+@@ -1344,15 +1341,15 @@ Exp_InteractObjCmd(
+       int rc; /* return code from ready.  This is further refined by matcher. 
*/
+       int cc;                 /* # of chars from read() */
+       struct action *action = 0;
+-      time_t previous_time;
++      time_t previous_time = 0;
+       time_t current_time;
+-      int matchLen;   /* # of chars matched */
++      int matchLen = 0;       /* # of chars matched */
+       int skip;               /* # of chars not involved in match */
+       int print;              /* # of chars to print */
+       int oldprinted;         /* old version of u->printed */
+       int change;             /* if action requires cooked mode */
+       int attempt_match = TRUE;
+-      struct input *soonest_input;
++      struct input *soonest_input = NULL;
+       int timeout;    /* current as opposed to default_timeout */
+       Tcl_Time temp_time;
+ 
+--- a/exp_log.c
++++ b/exp_log.c
+@@ -90,6 +90,8 @@ expWriteBytesAndLogIfTtyU(esPtr,buf,lenChars)
+ 
+     if (esPtr->valid)
+       wc = expWriteCharsUni(esPtr,buf,lenChars);
++    else
++      wc = -1;
+ 
+     if (tsdPtr->logChannel && ((esPtr->fdout == 1) || expDevttyIs(esPtr))) {
+       Tcl_DString ds;
+--- a/exp_pty.c
++++ b/exp_pty.c
+@@ -135,7 +135,9 @@ int timeout;
+ }
+ 
+ static RETSIGTYPE (*oldAlarmHandler)();
++#ifndef O_NOCTTY
+ static RETSIGTYPE (*oldHupHandler)();
++#endif
+ static time_t current_time;   /* time when testing began */
+ 
+ /* if TRUE, begin testing, else end testing */
+--- a/exp_trap.c
++++ b/exp_trap.c
+@@ -298,11 +298,10 @@ char *s;
+ 
+ /*ARGSUSED*/
+ int
+-Exp_TrapObjCmd(clientData, interp, objc, objv)
+-ClientData clientData;
+-Tcl_Interp *interp;
+-int objc;
+-Tcl_Obj *CONST objv[];
++Exp_TrapObjCmd(ClientData clientData,
++             Tcl_Interp *interp,
++             int objc,
++             Tcl_Obj *CONST objv[])
+ {
+       char *action = 0;
+       int n;          /* number of signals in list */
+@@ -320,7 +319,9 @@ Tcl_Obj *CONST objv[];
+ 
+       objc--; objv++;
+ 
+-      while (objc) {
++      if (objc <= 0) goto usage_error;
++
++      do {
+         arg = Tcl_GetString(*objv);
+ 
+               if (streq(arg,"-code")) {
+@@ -339,7 +340,7 @@ Tcl_Obj *CONST objv[];
+                       objc--; objv++;
+                       show_max = TRUE;
+               } else break;
+-      }
++      } while(objc);
+ 
+       if (show_name || show_number || show_max) {
+               if (objc > 0) goto usage_error;
+--- a/exp_tty.c
++++ b/exp_tty.c
+@@ -585,18 +585,20 @@ Exp_SystemCmd(
+       int total_len = 0, arg_len;
+ 
+       int stty_args_recognized = TRUE;
+-      int cmd_is_stty = FALSE;
++      int cmd_is_stty;
+       int cooked = FALSE;
+-      int was_raw, was_echo;
++      const char *was_raw = "-raw", *was_echo = "-echo";
+ 
+       if (argc == 1) return TCL_OK;
+ 
+-      if (streq(argv[1],"stty")) {
++      cmd_is_stty = streq(argv[1],"stty");
++      if (cmd_is_stty) {
+               expDiagLogU("system stty is deprecated, use stty\r\n");
+ 
+-              cmd_is_stty = TRUE;
+-              was_raw = exp_israw();
+-              was_echo = exp_isecho();
++              if (exp_israw())
++                      was_raw++;
++              if (exp_isecho())
++                      was_echo++;
+       }
+ 
+       if (argc > 2 && cmd_is_stty) {
+@@ -635,11 +637,7 @@ Exp_SystemCmd(
+                           return(TCL_ERROR);
+                       }
+                       if (cmd_is_stty) {
+-                          char buf [11];
+-                          sprintf(buf,"%sraw %secho",
+-                                  (was_raw?"":"-"),
+-                                  (was_echo?"":"-"));
+-                          Tcl_SetResult (interp, buf, TCL_VOLATILE);
++                          Tcl_AppendResult (interp, was_raw, " ", was_echo, 
NULL);
+                       }
+                       return(TCL_OK);
+               }
+@@ -699,11 +697,7 @@ Exp_SystemCmd(
+       }
+ 
+       if (cmd_is_stty) {
+-          char buf [11];
+-          sprintf(buf,"%sraw %secho",
+-                  (was_raw?"":"-"),
+-                  (was_echo?"":"-"));
+-          Tcl_SetResult (interp, buf, TCL_VOLATILE);
++          Tcl_AppendResult (interp, was_raw, " ", was_echo, NULL);
+       }
+ 
+ /* following macros stolen from Tcl's tclUnix.h file */
+--- a/exp_win.c
++++ b/exp_win.c
+@@ -78,9 +78,9 @@ typedef struct {
+ static exp_winsize winsize = {0, 0};
+ static exp_winsize win2size = {0, 0};
+ 
+-int exp_window_size_set(fd)
+-int fd;
++int exp_window_size_set(int fd)
+ {
++      return
+ #ifdef TIOCSWINSZ
+       ioctl(fd,TIOCSWINSZ,&winsize);
+ #endif
+@@ -89,9 +89,9 @@ int fd;
+ #endif
+ }
+ 
+-int exp_window_size_get(fd)
+-int fd;
++int exp_window_size_get(int fd)
+ {
++      return
+ #ifdef TIOCGWINSZ
+       ioctl(fd,TIOCGWINSZ,&winsize);
+ #endif
+@@ -105,8 +105,7 @@ int fd;
+ }
+ 
+ void
+-exp_win_rows_set(rows)
+-char *rows;
++exp_win_rows_set(const char *rows)
+ {
+       winsize.rows = atoi(rows);
+       exp_window_size_set(exp_dev_tty);
+@@ -122,8 +121,7 @@ exp_win_rows_get()
+ }
+ 
+ void
+-exp_win_columns_set(columns)
+-char *columns;
++exp_win_columns_set(const char *columns)
+ {
+       winsize.columns = atoi(columns);
+       exp_window_size_set(exp_dev_tty);
+@@ -142,8 +140,8 @@ exp_win_columns_get()
+  * separate copy of everything above - used for handling user stty requests
+  */
+ 
+-int exp_win2_size_set(fd)
+-int fd;
++static void
++exp_win2_size_set(int fd)
+ {
+ #ifdef TIOCSWINSZ
+                       ioctl(fd,TIOCSWINSZ,&win2size);
+@@ -153,8 +151,8 @@ int fd;
+ #endif
+ }
+ 
+-int exp_win2_size_get(fd)
+-int fd;
++static void
++exp_win2_size_get(int fd)
+ {
+ #ifdef TIOCGWINSZ
+       ioctl(fd,TIOCGWINSZ,&win2size);
+@@ -165,9 +163,7 @@ int fd;
+ }
+ 
+ void
+-exp_win2_rows_set(fd,rows)
+-int fd;
+-char *rows;
++exp_win2_rows_set(int fd,const char *rows)
+ {
+       exp_win2_size_get(fd);
+       win2size.rows = atoi(rows);
+@@ -175,8 +171,7 @@ char *rows;
+ }
+ 
+ char*
+-exp_win2_rows_get(fd)
+-int fd;
++exp_win2_rows_get(int fd)
+ {
+     static char rows [20];
+       exp_win2_size_get(fd);
+@@ -189,9 +184,7 @@ int fd;
+ }
+ 
+ void
+-exp_win2_columns_set(fd,columns)
+-int fd;
+-char *columns;
++exp_win2_columns_set(int fd,const char *columns)
+ {
+       exp_win2_size_get(fd);
+       win2size.columns = atoi(columns);
+@@ -199,8 +192,7 @@ char *columns;
+ }
+ 
+ char*
+-exp_win2_columns_get(fd)
+-int fd;
++exp_win2_columns_get(int fd)
+ {
+     static char columns [20];
+       exp_win2_size_get(fd);
+--- a/exp_win.h
++++ b/exp_win.h
+@@ -11,12 +11,12 @@ would appreciate credit if you use this file or parts of 
it.
+ int exp_window_size_set();
+ int exp_window_size_get();
+ 
+-void  exp_win_rows_set    _ANSI_ARGS_ ((char* rows));
++void  exp_win_rows_set    _ANSI_ARGS_ ((const char* rows));
+ char* exp_win_rows_get    _ANSI_ARGS_ ((void));
+-void  exp_win_columns_set _ANSI_ARGS_ ((char* columns));
++void  exp_win_columns_set _ANSI_ARGS_ ((const char* columns));
+ char* exp_win_columns_get _ANSI_ARGS_ ((void));
+ 
+-void  exp_win2_rows_set    _ANSI_ARGS_ ((int fd, char* rows));
++void  exp_win2_rows_set    _ANSI_ARGS_ ((int fd, const char* rows));
+ char* exp_win2_rows_get    _ANSI_ARGS_ ((int fd));
+-void  exp_win2_columns_set _ANSI_ARGS_ ((int fd, char* columns));
++void  exp_win2_columns_set _ANSI_ARGS_ ((int fd, const char* columns));
+ char* exp_win2_columns_get _ANSI_ARGS_ ((int fd));
+--- a/expect.c
++++ b/expect.c
+@@ -2537,7 +2537,7 @@ Exp_ExpectObjCmd(
+     struct exp_state_list *state_list;        /* list of ExpStates to watch */
+     struct exp_state_list *slPtr;     /* temp for interating over state_list 
*/
+     ExpState **esPtrs;
+-    int mcount;                       /* number of esPtrs to watch */
++    int mcount = 0;           /* number of esPtrs to watch */
+ 
+     struct eval_out eo;               /* final case of interest */
+ 
+@@ -2546,7 +2546,7 @@ Exp_ExpectObjCmd(
+     time_t start_time_total;  /* time at beginning of this procedure */
+     time_t start_time = 0;    /* time when restart label hit */
+     time_t current_time = 0;  /* current time (when we last looked)*/
+-    time_t end_time;          /* future time at which to give up */
++    time_t end_time = 0;      /* future time at which to give up */
+ 
+     ExpState *last_esPtr;     /* for differentiating when multiple f's */
+                               /* to print out better debugging messages */
+@@ -2554,7 +2554,7 @@ Exp_ExpectObjCmd(
+     int first_time = 1;               /* if not "restarted" */
+     
+     int key;                  /* identify this expect command instance */
+-    int configure_count;      /* monitor exp_configure_count */
++    int configure_count = 0;  /* monitor exp_configure_count */
+ 
+     int timeout;              /* seconds */
+     int remtime;              /* remaining time in timeout */
+@@ -2947,12 +2947,14 @@ process_di (
+       } else {
+           esPtr = expStateFromChannelName(interp,chan,0,0,0,(char*)cmd);
+       }
+-      if (!esPtr) return(TCL_ERROR);
++      if (!esPtr)
++          return(TCL_ERROR);
++
++      *esOut = esPtr;
+     }
+ 
+     *at = i;
+     *Default = def;
+-    *esOut = esPtr;
+     return TCL_OK;
+ }
+ 
+--- a/pty_termios.c
++++ b/pty_termios.c
+@@ -71,6 +71,14 @@ with openpty which supports 4000 while ptmx supports 60. */
+ #endif
+ #include <sys/types.h>
+ #include <sys/stat.h>
++#if defined(HAVE_OPENPTY)
++#include <termios.h>
++#if defined(HAVE_LIBUTIL_H)
++#include <libutil.h>
++#else
++#include <pty.h>
++#endif
++#endif
+ 
+ #ifdef NO_STDLIB_H
+ #include "../compat/stdlib.h"
+@@ -381,11 +389,14 @@ exp_init_pty()
+ int
+ exp_getptymaster()
+ {
++#if !defined(HAVE_CONVEX_GETPTY) && !defined(HAVE_PTYM) && 
!defined(HAVE_SCO_CLIST_PTYS) && defined(TEST_PTY)
+       char *hex, *bank;
+-      struct stat stat_buf;
++#endif
+       int master = -1;
+       int slave = -1;
++#ifdef HAVE_SCO_CLIST_PTYS
+       int num;
++#endif
+ 
+       exp_pty_error = 0;
+ 
+@@ -438,6 +449,7 @@ exp_getptymaster()
+       master = open("/dev/ptc", O_RDWR);
+       if (master >= 0) {
+               int ptynum;
++              struct stat stat_buf;
+ 
+               if (fstat(master, &stat_buf) < 0) {
+                       close(master);
+@@ -644,8 +656,10 @@ exp_getptyslave(
+     int ttyinit,
+     CONST char *stty_args)
+ {
+-      int slave, slave2;
++      int slave;
++#if defined(HAVE_PTMX_BSD)
+       char buf[10240];
++#endif
+ 
+       if (0 > (slave = open(slave_name, O_RDWR))) {
+               static char buf[500];

Reply via email to