SHA256
1
0
forked from pool/uucp
uucp/option-to-not-force-hw-control.patch

318 lines
10 KiB
Diff
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Description: avoid forcing hw control
Author: Michal Suchanek
Index: uucp-1.07/conn.h
===================================================================
---
conn.c | 5 +++--
conn.h | 4 ++--
cu.1 | 3 +++
cu.c | 12 ++++++++++--
unix/pipe.c | 5 +++--
unix/serial.c | 25 +++++++++++++++++--------
unix/tcp.c | 5 +++--
unix/tli.c | 5 +++--
uucico.c | 6 +++---
9 files changed, 47 insertions(+), 23 deletions(-)
--- conn.c
+++ conn.c 2013-12-04 10:20:26.026181299 +0000
@@ -114,12 +114,13 @@ fconn_unlock (qconn)
/* Open a connection. */
boolean
-fconn_open (qconn, ibaud, ihighbaud, fwait, fuser)
+fconn_open (qconn, ibaud, ihighbaud, fwait, fuser, nortscts)
struct sconnection *qconn;
long ibaud;
long ihighbaud;
boolean fwait;
boolean fuser;
+ boolean nortscts;
{
boolean fret;
@@ -177,7 +178,7 @@ fconn_open (qconn, ibaud, ihighbaud, fwa
else
ulog_device (qconn->qport->uuconf_zname);
- fret = (*qconn->qcmds->pfopen) (qconn, ibaud, fwait, fuser);
+ fret = (*qconn->qcmds->pfopen) (qconn, ibaud, fwait, fuser, nortscts);
if (! fret)
ulog_device ((const char *) NULL);
--- conn.h
+++ conn.h 2013-12-04 10:20:26.022181350 +0000
@@ -117,7 +117,7 @@ struct sconncmds
boolean (*pfunlock) P((struct sconnection *qconn));
/* Open the connection. */
boolean (*pfopen) P((struct sconnection *qconn, long ibaud,
- boolean fwait, boolean fuser));
+ boolean fwait, boolean fuser, boolean nortscts));
/* Close the connection. */
boolean (*pfclose) P((struct sconnection *qconn,
pointer puuconf,
@@ -198,7 +198,7 @@ extern boolean fconn_unlock P((struct sc
than the effective permissions. */
extern boolean fconn_open P((struct sconnection *qconn, long ibaud,
long ihighbaud, boolean fwait,
- boolean fuser));
+ boolean fuser, boolean nortscts));
/* Close a connection. The fsuccess argument is TRUE if the
conversation completed normally, FALSE if it is being aborted. */
--- cu.1
+++ cu.1 2013-12-04 10:20:26.026181299 +0000
@@ -233,6 +233,9 @@ Echo characters locally (half-duplex mod
.B \-\-nostop
Turn off XON/XOFF handling (it is on by default).
.TP 5
+.B \-f, \-\-nortscts
+Do not use hardware flow control.
+.TP 5
.B \-E char, \-\-escape char
Set the escape character. Initially
.B ~
--- cu.c
+++ cu.c 2013-12-04 10:27:03.353425764 +0000
@@ -223,6 +223,7 @@ static const struct option asCulongopts[
{ "baud", required_argument, NULL, 's' },
{ "mapcr", no_argument, NULL, 't' },
{ "nostop", no_argument, NULL, 3 },
+ { "nortscts", no_argument, NULL, 'f' },
{ "system", required_argument, NULL, 'z' },
{ "config", required_argument, NULL, 'I' },
{ "debug", required_argument, NULL, 'x' },
@@ -258,6 +259,8 @@ main (argc, argv)
enum txonxoffsetting txonxoff = XONXOFF_ON;
/* -I: configuration file name. */
const char *zconfig = NULL;
+ /* -f: no hardware flow control */
+ boolean nortscts = FALSE;
int iopt;
pointer puuconf;
int iuuconf;
@@ -295,7 +298,7 @@ main (argc, argv)
}
}
- while ((iopt = getopt_long (argc, argv, "a:c:deE:hnI:l:op:s:tvx:z:",
+ while ((iopt = getopt_long (argc, argv, "a:c:deE:fhnI:l:op:s:tvx:z:",
asCulongopts, (int *) NULL)) != EOF)
{
switch (iopt)
@@ -322,6 +325,11 @@ main (argc, argv)
zCuvar_escape = optarg;
break;
+ case 'f':
+ /* No hardware flow control. */
+ nortscts = TRUE;
+ break;
+
case 'h':
/* Local echo. */
fCulocalecho = TRUE;
@@ -687,7 +695,7 @@ main (argc, argv)
}
/* Here we have locked a connection to use. */
- if (! fconn_open (&sconn, iusebaud, ihighbaud, FALSE, sinfo.fdirect))
+ if (! fconn_open (&sconn, iusebaud, ihighbaud, FALSE, sinfo.fdirect, nortscts))
ucuabort ();
fCuclose_conn = TRUE;
--- uucico.c
+++ uucico.c 2013-12-04 10:20:26.026181299 +0000
@@ -695,7 +695,7 @@ main (argc, argv)
if (fret)
{
- if (! fconn_open (&sconn, (long) 0, (long) 0, TRUE, FALSE))
+ if (! fconn_open (&sconn, (long) 0, (long) 0, TRUE, FALSE, FALSE))
fret = FALSE;
qConn = &sconn;
}
@@ -714,7 +714,7 @@ main (argc, argv)
(struct uuconf_dialer *) NULL,
TRUE)
|| ! fconn_open (&sconn, (long) 0, (long) 0, TRUE,
- FALSE))
+ FALSE, FALSE))
break;
}
fret = FALSE;
@@ -1179,7 +1179,7 @@ fconn_call (qdaemon, qport, qstat, cretr
}
if (! fconn_open (&sconn, qsys->uuconf_ibaud, qsys->uuconf_ihighbaud,
- FALSE, FALSE))
+ FALSE, FALSE, FALSE))
{
terr = STATUS_PORT_FAILED;
fret = FALSE;
--- unix/pipe.c
+++ unix/pipe.c 2013-12-04 10:20:26.026181299 +0000
@@ -49,7 +49,7 @@ const char pipe_rcsid[] = "$Id: pipe.c,v
static void uspipe_free P((struct sconnection *qconn));
static boolean fspipe_open P((struct sconnection *qconn, long ibaud,
- boolean fwait, boolean fuser));
+ boolean fwait, boolean fuser, boolean nortscts));
static boolean fspipe_close P((struct sconnection *qconn,
pointer puuconf,
struct uuconf_dialer *qdialer,
@@ -115,11 +115,12 @@ uspipe_free (qconn)
/*ARGSUSED*/
static boolean
-fspipe_open (qconn, ibaud, fwait, fuser)
+fspipe_open (qconn, ibaud, fwait, fuser, nortscts)
struct sconnection *qconn ATTRIBUTE_UNUSED;
long ibaud ATTRIBUTE_UNUSED;
boolean fwait;
boolean fuser ATTRIBUTE_UNUSED;
+ boolean nortscts ATTRIBUTE_UNUSED;
{
/* We don't do incoming waits on pipes. */
if (fwait)
--- unix/serial.c
+++ unix/serial.c 2013-12-04 10:20:26.026181299 +0000
@@ -246,11 +246,11 @@ static boolean fsserial_open P((struct s
boolean fwait, boolean fuser,
enum tclocal_setting tlocal));
static boolean fsstdin_open P((struct sconnection *qconn, long ibaud,
- boolean fwait, boolean fuser));
+ boolean fwait, boolean fuser, boolean nortscts));
static boolean fsmodem_open P((struct sconnection *qconn, long ibaud,
- boolean fwait, boolean fuser));
+ boolean fwait, boolean fuser, boolean nortscts));
static boolean fsdirect_open P((struct sconnection *qconn, long ibaud,
- boolean fwait, boolean fuser));
+ boolean fwait, boolean fuser, boolean nortscts));
static boolean fsblock P((struct ssysdep_conn *q, boolean fblock));
static boolean fsserial_close P((struct ssysdep_conn *q));
static boolean fsstdin_close P((struct sconnection *qconn,
@@ -1375,11 +1375,12 @@ fsserial_open (qconn, ibaud, fwait, fuse
call to fsblock. */
static boolean
-fsstdin_open (qconn, ibaud, fwait, fuser)
+fsstdin_open (qconn, ibaud, fwait, fuser, nortscts)
struct sconnection *qconn;
long ibaud;
boolean fwait;
boolean fuser;
+ boolean nortscts;
{
struct ssysdep_conn *q;
@@ -1390,6 +1391,9 @@ fsstdin_open (qconn, ibaud, fwait, fuser
q->o = q->ord;
if (! fsserial_open (qconn, ibaud, fwait, fuser, IGNORE_CLOCAL))
return FALSE;
+ if (nortscts
+ && ! fsserial_hardflow (qconn, FALSE))
+ return FALSE;
q->iwr_flags = fcntl (q->owr, F_GETFL, 0);
if (q->iwr_flags < 0)
{
@@ -1402,11 +1406,12 @@ fsstdin_open (qconn, ibaud, fwait, fuser
/* Open a modem port. */
static boolean
-fsmodem_open (qconn, ibaud, fwait, fuser)
+fsmodem_open (qconn, ibaud, fwait, fuser, nortscts)
struct sconnection *qconn;
long ibaud;
boolean fwait;
boolean fuser;
+ boolean nortscts;
{
struct uuconf_modem_port *qm;
@@ -1423,7 +1428,10 @@ fsmodem_open (qconn, ibaud, fwait, fuser
out, because some modems don't assert the necessary signals until
they see carrier. Instead, we turn on hardware flow control in
fsmodem_carrier. */
- if (fwait
+ if (nortscts
+ && ! fsserial_hardflow (qconn, FALSE))
+ return FALSE;
+ else if (fwait
&& ! fsserial_hardflow (qconn, qm->uuconf_fhardflow))
return FALSE;
@@ -1433,11 +1441,12 @@ fsmodem_open (qconn, ibaud, fwait, fuser
/* Open a direct port. */
static boolean
-fsdirect_open (qconn, ibaud, fwait, fuser)
+fsdirect_open (qconn, ibaud, fwait, fuser, nortscts)
struct sconnection *qconn;
long ibaud;
boolean fwait;
boolean fuser;
+ boolean nortscts;
{
struct uuconf_direct_port *qd;
@@ -1450,7 +1459,7 @@ fsdirect_open (qconn, ibaud, fwait, fuse
/* Always turn on hardware flow control for a direct port when it is
opened. There is no other sensible time to turn it on. */
- return fsserial_hardflow (qconn, qd->uuconf_fhardflow);
+ return fsserial_hardflow (qconn, qd->uuconf_fhardflow && ! nortscts);
}
/* Change the blocking status of the port. We keep track of the
--- unix/tcp.c
+++ unix/tcp.c 2013-12-04 10:20:26.026181299 +0000
@@ -78,7 +78,7 @@ static boolean ftcp_set_hints P((int ive
#endif
static boolean ftcp_set_flags P((struct ssysdep_conn *qsysdep));
static boolean ftcp_open P((struct sconnection *qconn, long ibaud,
- boolean fwait, boolean fuser));
+ boolean fwait, boolean fuser, boolean nortscts));
static boolean ftcp_close P((struct sconnection *qconn,
pointer puuconf,
struct uuconf_dialer *qdialer,
@@ -208,11 +208,12 @@ ftcp_set_flags (qsysdep)
system. */
static boolean
-ftcp_open (qconn, ibaud, fwait, fuser)
+ftcp_open (qconn, ibaud, fwait, fuser, nortscts)
struct sconnection *qconn;
long ibaud ATTRIBUTE_UNUSED;
boolean fwait;
boolean fuser ATTRIBUTE_UNUSED;
+ boolean nortscts ATTRIBUTE_UNUSED;
{
struct ssysdep_conn *qsysdep;
const char *zport;
--- unix/tli.c
+++ unix/tli.c 2013-12-04 10:20:26.026181299 +0000
@@ -106,7 +106,7 @@ static const char *ztlierror P((void));
static void utli_free P((struct sconnection *qconn));
static boolean ftli_push P((struct sconnection *qconn));
static boolean ftli_open P((struct sconnection *qconn, long ibaud,
- boolean fwait, boolean fuser));
+ boolean fwait, boolean fuser, boolean nortscts));
static boolean ftli_close P((struct sconnection *qconn,
pointer puuconf,
struct uuconf_dialer *qdialer,
@@ -238,11 +238,12 @@ ftli_push (qconn)
system. */
static boolean
-ftli_open (qconn, ibaud, fwait, fuser)
+ftli_open (qconn, ibaud, fwait, fuser, nortscts)
struct sconnection *qconn;
long ibaud;
boolean fwait;
boolean fuser ATTRIBUTE_UNUSED;
+ boolean nortscts ATTRIBUTE_UNUSED;
{
struct ssysdep_conn *qsysdep;
const char *zdevice;