Skip to content
Browse files

socat socat did not compile on Solaris when configured with --disable…

…-termios
  • Loading branch information...
1 parent d37e8ac commit b7dc45661e7de53f08a1d969d4bf97c9776fd53f Gerhard Rieger committed Sep 24, 2008
Showing with 39 additions and 12 deletions.
  1. +4 −0 CHANGES
  2. +1 −1 VERSION
  3. +3 −1 filan.c
  4. +5 −1 sycls.c
  5. +3 −3 sysincludes.h
  6. +11 −1 xio-readline.c
  7. +4 −1 xio-termios.c
  8. +3 −3 xio-termios.h
  9. +5 −1 xioconfig.h
View
4 CHANGES
@@ -1,4 +1,8 @@
+corrections:
+ socat did not compile on Solaris when configured without termios
+ feature (thanks to Pavan Gadi for reporting this bug)
+
####################### V 1.6.0.1:
new features:
View
2 VERSION
@@ -1 +1 @@
-"1.6.0.1"
+"1.6.0.1+disable_termios"
View
4 filan.c
@@ -1,5 +1,5 @@
/* source: filan.c */
-/* Copyright Gerhard Rieger 2001-2007 */
+/* Copyright Gerhard Rieger 2001-2008 */
/* Published under the GNU General Public License V.2, see file COPYING */
/* the subroutine filan makes a "FILe descriptor ANalysis". It checks the
@@ -412,6 +412,7 @@ int devinfo(int fd) {
int cdevan(int fd, FILE *outfile) {
int ret;
+#if _WITH_TERMIOS
if ((ret = Isatty(fd)) < 0) {
Warn2("isatty(%d): %s", fd, strerror(errno));
return -1;
@@ -458,6 +459,7 @@ int cdevan(int fd, FILE *outfile) {
}
}
}
+#endif /* _WITH_TERMIOS */
return 0;
}
View
6 sycls.c
@@ -1,5 +1,5 @@
/* source: sycls.c */
-/* Copyright Gerhard Rieger 2001-2007 */
+/* Copyright Gerhard Rieger 2001-2008 */
/* Published under the GNU General Public License V.2, see file COPYING */
/* explicit system call and C library trace function, for those who miss strace
@@ -1233,6 +1233,7 @@ void *Realloc(void *ptr, size_t size) {
return result;
}
+#if _WITH_TERMIOS
int Tcgetattr(int fd, struct termios *termios_p) {
int i, result, _errno;
char chars[5*NCCS], *cp = chars;
@@ -1252,7 +1253,9 @@ int Tcgetattr(int fd, struct termios *termios_p) {
errno = _errno;
return result;
}
+#endif /* _WITH_TERMIOS */
+#if _WITH_TERMIOS
int Tcsetattr(int fd, int optional_actions, struct termios *termios_p) {
int i, result, _errno;
char chars[5*NCCS], *cp = chars;
@@ -1270,6 +1273,7 @@ int Tcsetattr(int fd, int optional_actions, struct termios *termios_p) {
errno = _errno;
return result;
}
+#endif /* _WITH_TERMIOS */
char *Ttyname(int fd) {
char *result;
View
6 sysincludes.h
@@ -1,5 +1,5 @@
/* source: sysincludes.h */
-/* Copyright Gerhard Rieger 2001-2007 */
+/* Copyright Gerhard Rieger 2001-2008 */
/* Published under the GNU General Public License V.2, see file COPYING */
#ifndef __sysincludes_h_included
@@ -34,7 +34,7 @@
#if HAVE_GRP_H
#include <grp.h> /* getgrnam() */
#endif
-#if HAVE_PTY_H
+#if HAVE_PTY_H && _WITH_TERMIOS
#include <pty.h>
#endif
#if HAVE_SYS_PARAM_H
@@ -120,7 +120,7 @@
#include <linux/if_tun.h>
#endif
-#if HAVE_TERMIOS_H && WITH_TERMIOS
+#if HAVE_TERMIOS_H && _WITH_TERMIOS
#include <termios.h>
#endif
#if HAVE_SYS_UTSNAME_H
View
12 xio-readline.c
@@ -1,5 +1,5 @@
/* source: xio-readline.c */
-/* Copyright Gerhard Rieger 2002-2007 */
+/* Copyright Gerhard Rieger 2002-2008 */
/* Published under the GNU General Public License V.2, see file COPYING */
/* this file contains the source for opening the readline address */
@@ -120,8 +120,10 @@ static int xioopen_readline(int argc, const char *argv[], struct opt *opts,
if (xfd->stream.para.readline.history_file) {
Read_history(xfd->stream.para.readline.history_file);
}
+#if _WITH_TERMIOS
xiotermios_clrflag(xfd->stream.fd, 3, ICANON);
xiotermios_clrflag(xfd->stream.fd, 3, ECHO);
+#endif /* _WITH_TERMIOS */
return _xio_openlate(&xfd->stream, opts);
}
@@ -137,6 +139,7 @@ ssize_t xioread_readline(struct single *pipe, void *buff, size_t bufsiz) {
pipe->para.readline.hasnoecho &&
!regexec(&pipe->para.readline.noecho,
pipe->para.readline.dynprompt, 0, NULL, 0)) {
+#if _WITH_TERMIOS
/* under these conditions, we do not echo input, thus we circumvent
readline */
struct termios saveterm, setterm;
@@ -145,6 +148,7 @@ ssize_t xioread_readline(struct single *pipe, void *buff, size_t bufsiz) {
setterm = saveterm;
setterm.c_lflag |= ICANON;
Tcsetattr(pipe->fd, TCSANOW, &setterm); /*!*/
+#endif /* _WITH_TERMIOS */
do {
bytes = Read(pipe->fd, buff, bufsiz);
} while (bytes < 0 && errno == EINTR);
@@ -155,16 +159,20 @@ ssize_t xioread_readline(struct single *pipe, void *buff, size_t bufsiz) {
errno = _errno;
return -1;
}
+#if _WITH_TERMIOS
setterm.c_lflag &= ~ICANON;
Tcgetattr(pipe->fd, &setterm); /*! error */
Tcsetattr(pipe->fd, TCSANOW, &saveterm); /*!*/
+#endif /* _WITH_TERMIOS */
pipe->para.readline.dynend = pipe->para.readline.dynprompt;
/*Write(pipe->fd, "\n", 1);*/ /*!*/
return bytes;
}
#endif /* HAVE_REGEX_H */
+#if _WITH_TERMIOS
xiotermios_setflag(pipe->fd, 3, ECHO);
+#endif /* _WITH_TERMIOS */
if (pipe->para.readline.prompt || pipe->para.readline.dynprompt) {
/* we must carriage return, because readline will first print the
prompt */
@@ -191,7 +199,9 @@ ssize_t xioread_readline(struct single *pipe, void *buff, size_t bufsiz) {
if (line == NULL) {
return 0; /* EOF */
}
+#if _WITH_TERMIOS
xiotermios_clrflag(pipe->fd, 3, ECHO);
+#endif /* _WITH_TERMIOS */
Add_history(line);
bytes = strlen(line);
strncpy(buff, line, bufsiz);
View
5 xio-termios.c
@@ -1,5 +1,5 @@
/* source: xio-termios.c */
-/* Copyright Gerhard Rieger 2001-2006 */
+/* Copyright Gerhard Rieger 2001-2008 */
/* Published under the GNU General Public License V.2, see file COPYING */
/* this file contains the source for terminal I/O options */
@@ -10,6 +10,7 @@
#include "xio-termios.h"
/****** TERMIOS addresses ******/
+#if _WITH_TERMIOS
#if WITH_TERMIOS
const struct optdesc opt_tiocsctty={ "tiocsctty", "ctty",OPT_TIOCSCTTY, GROUP_TERMIOS, PH_LATE2, TYPE_BOOL, OFUNC_SPEC };
@@ -324,3 +325,5 @@ int xiotermios_clrflag(int fd, int word, tcflag_t mask) {
return 0;
}
+#endif /* _WITH_TERMIOS */
+
View
6 xio-termios.h
@@ -1,5 +1,5 @@
/* source: xio-termios.h */
-/* Copyright Gerhard Rieger 2001-2006 */
+/* Copyright Gerhard Rieger 2001-2008 */
/* Published under the GNU General Public License V.2, see file COPYING */
#ifndef __xio_termios_h_included
@@ -138,10 +138,10 @@ extern const struct optdesc opt_sane;
extern const struct optdesc opt_ispeed;
extern const struct optdesc opt_ospeed;
-#if WITH_TERMIOS /* otherwise tcflag_t might be reported undefined */
+#if _WITH_TERMIOS /* otherwise tcflag_t might be reported undefined */
extern int xiotermios_setflag(int fd, int word, tcflag_t mask);
extern int xiotermios_clrflag(int fd, int word, tcflag_t mask);
extern int xiotermiosflag_applyopt(int fd, struct opt *opt);
-#endif /* WITH_TERMIOS */
+#endif /* _WITH_TERMIOS */
#endif /* !defined(__xio_termios_h_included) */
View
6 xioconfig.h
@@ -1,5 +1,5 @@
/* source: xioconfig.h */
-/* Copyright Gerhard Rieger 2001-2007 */
+/* Copyright Gerhard Rieger 2001-2008 */
/* Published under the GNU General Public License V.2, see file COPYING */
#ifndef __xioconfig_h_included
@@ -20,6 +20,10 @@
# define WITH_NAMED 1
#endif
+#if WITH_TERMIOS || WITH_PTY || WITH_READLINE
+# define _WITH_TERMIOS 1
+#endif
+
#if WITH_SOCKS4A
# define WITH_SOCKS4 1
#endif

0 comments on commit b7dc456

Please sign in to comment.
Something went wrong with that request. Please try again.