summaryrefslogtreecommitdiff
path: root/dev-tcltk
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-12-02 11:00:10 +0000
committerV3n3RiX <venerix@koprulu.sector>2023-12-02 11:00:10 +0000
commit4c506c69909bdb43fda5e36c79b165e404d3b86b (patch)
treeb0f9d49fd462021c82f6ebbbbafb92e1a0eae3da /dev-tcltk
parent81f73a84efe20818880d8c52c55a3bd067115b06 (diff)
gentoo auto-resync : 02:12:2023 - 11:00:10
Diffstat (limited to 'dev-tcltk')
-rw-r--r--dev-tcltk/Manifest.gzbin5487 -> 5488 bytes
-rw-r--r--dev-tcltk/expect/Manifest2
-rw-r--r--dev-tcltk/expect/expect-5.45.4-r5.ebuild81
-rw-r--r--dev-tcltk/expect/files/expect-5.45-warnings.patch684
4 files changed, 767 insertions, 0 deletions
diff --git a/dev-tcltk/Manifest.gz b/dev-tcltk/Manifest.gz
index dd8edd1d8085..d62c34407f66 100644
--- a/dev-tcltk/Manifest.gz
+++ b/dev-tcltk/Manifest.gz
Binary files differ
diff --git a/dev-tcltk/expect/Manifest b/dev-tcltk/expect/Manifest
index 50d363c72dc1..fb14e0f6a9ce 100644
--- a/dev-tcltk/expect/Manifest
+++ b/dev-tcltk/expect/Manifest
@@ -3,10 +3,12 @@ AUX expect-5.45-darwin-install_name.patch 727 BLAKE2B fca6df8c6d01bd54f26e6a2311
AUX expect-5.45-format-security.patch 428 BLAKE2B 98e4d1da9f790bb1ab1b0b8481c5c0a747823f0998fff7993316d44cd5b29659467901c9f2e78d6b77342a9f0cb9072730a8600240fa37f240e10cc677162f63 SHA512 b85f0985b908f72d960eeb00567caab048874806c68d259835dc4564e33032524e9026e07ece3ad5f8669d67f7976019efb5dd763ba84b4cc13571ca999c7f06
AUX expect-5.45-gfbsd.patch 996 BLAKE2B 46183afae664e2995403e36b423e0576022063d8acfb681dd98d6e98e54c86588f0e74067b929fe105bc477fedd8709b749857dcdaf5e57fa28445dad34c4139 SHA512 4fa7c4723c9ad2f5811c5762abe202f1d7584a6050c75cab277fe1b6c697809204a9adcf6f6f6c3c215c8df32f3ac9b083da907777b1ea02e1a4e64b8bf91242
AUX expect-5.45-headers.patch 2280 BLAKE2B 6326615eee52aaa7307b32d048af21d657cb308e737995944b7e081a06a4d6b6f3409836b28835e6534ef57215542b524061cb731be3b419b23ab2ba38184079 SHA512 ac55ec9d65e87d5c64327d802fa16eab9f218f71e760090b2afc00b5fdb791859e6d1f35b0d1a5f52e7ff6ffb21e538581a1782976754fe8ae3ca5950c8db55c
+AUX expect-5.45-warnings.patch 18021 BLAKE2B 6223588f347ba4ac5c679fbe0fabc5d4a6ac72603768cef4a166f5bcd0632392d0d8d4d80d747c985b2451cee30cec84a32f219ae19b99add91988d35f3c0dd8 SHA512 5ea67f4a481e9930998297896c31daefbf663cb6a4cae0421bf1d40906e7112a4c0c46da3cfb6a05dc4efd7ddb0543c05db086b7bf59901a1dea75ab9b73fc37
AUX expect-5.45.4-configure-clang16.patch 5377 BLAKE2B dd8a65e98e269f3b3ca086099b1c0cc62fda2357f7441c59f7cad8c168a4d8417bb05ba4e58fd9d2018d01ba66cd72ca0d63fc45e728363032412deb7f5283fb SHA512 34fd8c2a4986a0e085f69a2cb34afeeab3b6e2689cf88793149c8a8d98c1700f15df3b9ad27c74555572928c3e6a577ae44fa4af0b5b82afc7f1e5539d66c6e7
AUX expect-5.45.4-configure-in.patch 2408 BLAKE2B d198b599eeff18833e9532945aaf921779229ddecfbe478f985f2d742a39875e68cdca97fbca6aa5ca572f4c31c3a2491c8ddf473042952213232d3bfd070eee SHA512 7b60a268c6e4c0875978a619a451eb669a519f74623fbcecd90299b22e0ba73f6884177a16367e5ee94828c55636dba2f70c324576c1cc077d389912f4d7409d
AUX expect-5.45.4-examples.patch 935 BLAKE2B df87d211f6693b836e2e8ca2b63c56a9dd073a8e2ab3f71b38523d4797da0c54411d51bd38e5568c0b850b30ce89d7c984945e704486eb61ca5077709de514fc SHA512 0cad9007f82d2e9fb1994e7b8a84858603cca471f34dbbaddadc30b4594c5cb31cb29749629bcea47b1da4abe3526ddc1c5ea36fb816571bc9c6ffadc120667c
DIST expect5.45.4.tar.gz 632363 BLAKE2B a3a936e7644c922fdd474fa08c45926396ccce9a63e5f65f4d5e157f5160cfe4de47688734b39d13281d9548aac492810f19236e06563903d3d8081e4661048d SHA512 a8dc25e8175f67e029e15cbcfca1705165c1c4cb2dd37eaaaebffb61e3ba132d9519cd73ca5add4c3358a2b0b7a91e878279e8d0b72143ff2c287fce07e4659a
EBUILD expect-5.45.4-r3.ebuild 2338 BLAKE2B 4ef237c10d7619323dabc86f100ed340a93d7a8de8c202e7a6b4a473f7d2b03ac9aff2dcc9916019a367777464d1eae42765e0f380e97b0d7ad1c0bed451a358 SHA512 0056240387a1b491d0b6723150ccc607bb679d7546865f40ff753bb2a95c70dd7eeb39c1c0bc4c86c1307315ad222d6fce00e6a30fde0568f7c453859c91ff8b
EBUILD expect-5.45.4-r4.ebuild 2153 BLAKE2B fc8b22a4a98f18a81a7c441d8919c6d6cd3643c9ec74594a3e88d52aaae581341d9f2b91aba24ef52aee3a231e775fcf6f9f264f02f3855a5d9d87ba2264b939 SHA512 8ce792ca6c6b3d49f58217cd44c555456d3f49991ea30782f279b5d76c53fce5c694361096f416a9d1b44bf40b89adba22307de25ea12830691ab603c3c4c0b2
+EBUILD expect-5.45.4-r5.ebuild 2202 BLAKE2B 8451f06a2b945cb4080d475e6eb205b0f1cbd88a143a87d830334137f23e59c820efd376226286f169c35cc7040ff60108438d87e2564001cc0b927bec101629 SHA512 6a4ee9ee88543ba3f45351d810cbd4d91c66db3472e5270bab36a22b00a53c112c179c46430ac4e1c6ec8f15c20c91da733ce33091d1292e098283b60e2f17cc
MISC metadata.xml 330 BLAKE2B 4e561b8ea0a607e2fde49595d4808e51b2df54c2d8f3d65c47a4e592e7d7897db71a6677b0330c7c32a8e5773b9571de0e4c8d33c4f8a5c3f0e0f7192082b177 SHA512 fec72aa15126bbe40bc5277bb743acf07203a6153ee52e69f1e828dfc53757b3d11a8e09175397a06bdb4f2c5e683db1ec74de254a6b36926192e5868f2e5ec6
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];