public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: dev-tcltk/expect/, dev-tcltk/expect/files/
@ 2022-06-20 19:13 Alfredo Tupone
  0 siblings, 0 replies; 2+ messages in thread
From: Alfredo Tupone @ 2022-06-20 19:13 UTC (permalink / raw
  To: gentoo-commits

commit:     28640a213f9ca28baa91c11cad62e619c1465291
Author:     Adrian Ratiu <adrian.ratiu <AT> collabora <DOT> com>
AuthorDate: Mon Jun 20 17:44:16 2022 +0000
Commit:     Alfredo Tupone <tupone <AT> gentoo <DOT> org>
CommitDate: Mon Jun 20 19:12:26 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=28640a21

dev-tcltk/expect: allow cross compiling

expect is a very old and mostly abandoned project seeing very
little bug-fixing and development, despite being a relatively
common dependency due to for e.g. gdb -> dejagnu -> expect
dependency chains.

One patch carried by various cross-compilation build systems
for decades adds the ability to cross compile, which we also
add to portage.

Signed-off-by: Adrian Ratiu <adrian.ratiu <AT> collabora.com>
Closes: https://github.com/gentoo/gentoo/pull/26006
Signed-off-by: Alfredo Tupone <tupone <AT> gentoo.org>

 dev-tcltk/expect/expect-5.45.4-r3.ebuild           |   1 +
 .../expect/files/expect-5.45.4-configure-in.patch  | 113 +++++++++++++++++++++
 2 files changed, 114 insertions(+)

diff --git a/dev-tcltk/expect/expect-5.45.4-r3.ebuild b/dev-tcltk/expect/expect-5.45.4-r3.ebuild
index 4c7c6571cbd6..c374e9fb54e2 100644
--- a/dev-tcltk/expect/expect-5.45.4-r3.ebuild
+++ b/dev-tcltk/expect/expect-5.45.4-r3.ebuild
@@ -32,6 +32,7 @@ src_prepare() {
 	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
 	sed -i 's:ifdef HAVE_SYS_WAIT_H:ifndef NO_SYS_WAIT_H:' *.c
 
 	# fix install_name on darwin

diff --git a/dev-tcltk/expect/files/expect-5.45.4-configure-in.patch b/dev-tcltk/expect/files/expect-5.45.4-configure-in.patch
new file mode 100644
index 000000000000..8c05205bf5ae
--- /dev/null
+++ b/dev-tcltk/expect/files/expect-5.45.4-configure-in.patch
@@ -0,0 +1,113 @@
+Allow cross compiling.
+
+Signed-off-by: Anders Roxell <anders.roxell@enea.com>
+Upstream-Status: Pending
+
+Patch source:
+https://github.com/openembedded/openembedded-core/blob/bb87788832ad64079609e4f554e4d55a14f0aa94/meta/recipes-devtools/expect/expect/0001-configure.in.patch
+
+Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
+---
+diff -uNr a/configure.in b/configure.in
+--- a/configure.in	2012-12-14 15:31:32.623180450 +0100
++++ b/configure.in	2012-12-14 15:53:34.518233519 +0100
+@@ -481,7 +481,7 @@
+ ,
+ 	AC_MSG_RESULT(no)
+ ,
+-	AC_MSG_ERROR([Expect can't be cross compiled])
++	AC_MSG_RESULT(no)
+ )
+ 
+ AC_MSG_CHECKING([if any value exists for WNOHANG])
+@@ -506,7 +506,9 @@
+ 	AC_MSG_RESULT(no)
+ 	AC_DEFINE(WNOHANG_BACKUP_VALUE, 1)
+ ,
+-	AC_MSG_ERROR([Expect can't be cross compiled])
++	AC_MSG_RESULT(yes)
++	AC_DEFINE_UNQUOTED(WNOHANG_BACKUP_VALUE, `cat wnohang`)
++	rm -f wnohang
+ )
+ 
+ #
+@@ -574,7 +576,8 @@
+ 	AC_DEFINE(REARM_SIG)
+ ,
+ 	AC_MSG_RESULT(no)
+-, AC_MSG_WARN([Expect can't be cross compiled])
++,
++	AC_MSG_RESULT(no)
+ )
+ 
+ # HPUX7 has trouble with the big cat so split it
+@@ -725,7 +728,9 @@
+ ,
+         AC_MSG_RESULT(no)
+ ,
+-	AC_MSG_ERROR([Expect can't be cross compiled])
++        AC_MSG_RESULT(yes)
++        AC_DEFINE(HAVE_SGTTYB)
++        PTY_TYPE=sgttyb
+ )
+ 
+ # mach systems have include files for unimplemented features
+@@ -749,7 +754,9 @@
+ ,
+         AC_MSG_RESULT(no)
+ ,
+-	AC_MSG_ERROR([Expect can't be cross compiled])
++        AC_DEFINE(HAVE_TERMIO)
++        PTY_TYPE=termios
++        AC_MSG_RESULT(yes)
+ )
+ 
+   # now check for the new style ttys (not yet posix)
+@@ -771,7 +778,9 @@
+   ,
+         AC_MSG_RESULT(no)
+   ,
+-	AC_MSG_ERROR([Expect can't be cross compiled])
++        AC_DEFINE(HAVE_TERMIOS)
++        PTY_TYPE=termios
++        AC_MSG_RESULT(yes)
+   )
+ fi
+ 
+@@ -794,7 +803,7 @@
+ ,
+ 	AC_MSG_RESULT(no)
+ ,
+-	AC_MSG_ERROR([Expect can't be cross compiled])
++	AC_MSG_RESULT(no)
+ )
+ 
+ AC_MSG_CHECKING([if TIOCGWINSZ in termios.h])
+@@ -816,7 +825,7 @@
+ ,
+ 	AC_MSG_RESULT(no)
+ ,
+-	AC_MSG_ERROR([Expect can't be cross compiled])
++	AC_MSG_RESULT(no)
+ )
+ 
+ # finally check for Cray style ttys
+@@ -837,7 +846,7 @@
+ ,
+ 	AC_MSG_RESULT(no)
+ ,
+-	AC_MSG_ERROR([Expect can't be cross compiled])
++	AC_MSG_RESULT(no)
+ )
+ 
+ #
+@@ -889,7 +898,8 @@
+ 	AC_MSG_RESULT(yes),
+ 	AC_MSG_RESULT(no)
+ ,
+-	AC_MSG_ERROR([Expect can't be cross compiled])
++	AC_DEFINE(HAVE_SV_TIMEZONE)
++	AC_MSG_RESULT(yes),
+ )
+ 
+ 


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: dev-tcltk/expect/, dev-tcltk/expect/files/
@ 2023-12-02  7:56 Sam James
  0 siblings, 0 replies; 2+ messages in thread
From: Sam James @ 2023-12-02  7:56 UTC (permalink / raw
  To: gentoo-commits

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];


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-12-02  7:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-06-20 19:13 [gentoo-commits] repo/gentoo:master commit in: dev-tcltk/expect/, dev-tcltk/expect/files/ Alfredo Tupone
  -- strict thread matches above, loose matches on Subject: below --
2023-12-02  7:56 Sam James

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox