mirror of
https://repo.or.cz/socat.git
synced 2024-12-22 23:42:34 +00:00
merged socat did not compile on Solaris when configured with --disable-termios
This commit is contained in:
commit
674b0e608d
8 changed files with 34 additions and 8 deletions
3
CHANGES
3
CHANGES
|
@ -91,6 +91,9 @@ corrections:
|
||||||
replaced the select() calls by poll() to cleanly fix the problems with
|
replaced the select() calls by poll() to cleanly fix the problems with
|
||||||
many file descriptors already open
|
many file descriptors already open
|
||||||
|
|
||||||
|
socat did not compile on Solaris when configured without termios
|
||||||
|
feature (thanks to Pavan Gadi for reporting this bug)
|
||||||
|
|
||||||
porting:
|
porting:
|
||||||
socat should now build under MacOS X 10.4 (thanks to Camillo Lugaresi for
|
socat should now build under MacOS X 10.4 (thanks to Camillo Lugaresi for
|
||||||
providing the patch)
|
providing the patch)
|
||||||
|
|
2
filan.c
2
filan.c
|
@ -412,6 +412,7 @@ int devinfo(int fd) {
|
||||||
int cdevan(int fd, FILE *outfile) {
|
int cdevan(int fd, FILE *outfile) {
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
#if _WITH_TERMIOS
|
||||||
if ((ret = Isatty(fd)) < 0) {
|
if ((ret = Isatty(fd)) < 0) {
|
||||||
Warn2("isatty(%d): %s", fd, strerror(errno));
|
Warn2("isatty(%d): %s", fd, strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -458,6 +459,7 @@ int cdevan(int fd, FILE *outfile) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* _WITH_TERMIOS */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
sycls.c
4
sycls.c
|
@ -1271,6 +1271,7 @@ void *Realloc(void *ptr, size_t size) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if _WITH_TERMIOS
|
||||||
int Tcgetattr(int fd, struct termios *termios_p) {
|
int Tcgetattr(int fd, struct termios *termios_p) {
|
||||||
int i, result, _errno;
|
int i, result, _errno;
|
||||||
char chars[5*NCCS], *cp = chars;
|
char chars[5*NCCS], *cp = chars;
|
||||||
|
@ -1290,7 +1291,9 @@ int Tcgetattr(int fd, struct termios *termios_p) {
|
||||||
errno = _errno;
|
errno = _errno;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#endif /* _WITH_TERMIOS */
|
||||||
|
|
||||||
|
#if _WITH_TERMIOS
|
||||||
int Tcsetattr(int fd, int optional_actions, struct termios *termios_p) {
|
int Tcsetattr(int fd, int optional_actions, struct termios *termios_p) {
|
||||||
int i, result, _errno;
|
int i, result, _errno;
|
||||||
char chars[5*NCCS], *cp = chars;
|
char chars[5*NCCS], *cp = chars;
|
||||||
|
@ -1308,6 +1311,7 @@ int Tcsetattr(int fd, int optional_actions, struct termios *termios_p) {
|
||||||
errno = _errno;
|
errno = _errno;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#endif /* _WITH_TERMIOS */
|
||||||
|
|
||||||
char *Ttyname(int fd) {
|
char *Ttyname(int fd) {
|
||||||
char *result;
|
char *result;
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#if HAVE_GRP_H
|
#if HAVE_GRP_H
|
||||||
#include <grp.h> /* getgrnam() */
|
#include <grp.h> /* getgrnam() */
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_PTY_H
|
#if HAVE_PTY_H && _WITH_TERMIOS
|
||||||
#include <pty.h>
|
#include <pty.h>
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_SYS_PARAM_H
|
#if HAVE_SYS_PARAM_H
|
||||||
|
@ -135,7 +135,7 @@
|
||||||
#include <linux/if_tun.h>
|
#include <linux/if_tun.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAVE_TERMIOS_H && WITH_TERMIOS
|
#if HAVE_TERMIOS_H && _WITH_TERMIOS
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_SYS_UTSNAME_H
|
#if HAVE_SYS_UTSNAME_H
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* source: xio-readline.c */
|
/* 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 */
|
/* Published under the GNU General Public License V.2, see file COPYING */
|
||||||
|
|
||||||
/* this file contains the source for opening the readline address */
|
/* 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) {
|
if (xfd->stream.para.readline.history_file) {
|
||||||
Read_history(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, ICANON);
|
||||||
xiotermios_clrflag(xfd->stream.fd, 3, ECHO);
|
xiotermios_clrflag(xfd->stream.fd, 3, ECHO);
|
||||||
|
#endif /* _WITH_TERMIOS */
|
||||||
return _xio_openlate(&xfd->stream, opts);
|
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 &&
|
pipe->para.readline.hasnoecho &&
|
||||||
!regexec(&pipe->para.readline.noecho,
|
!regexec(&pipe->para.readline.noecho,
|
||||||
pipe->para.readline.dynprompt, 0, NULL, 0)) {
|
pipe->para.readline.dynprompt, 0, NULL, 0)) {
|
||||||
|
#if _WITH_TERMIOS
|
||||||
/* under these conditions, we do not echo input, thus we circumvent
|
/* under these conditions, we do not echo input, thus we circumvent
|
||||||
readline */
|
readline */
|
||||||
struct termios saveterm, setterm;
|
struct termios saveterm, setterm;
|
||||||
|
@ -145,6 +148,7 @@ ssize_t xioread_readline(struct single *pipe, void *buff, size_t bufsiz) {
|
||||||
setterm = saveterm;
|
setterm = saveterm;
|
||||||
setterm.c_lflag |= ICANON;
|
setterm.c_lflag |= ICANON;
|
||||||
Tcsetattr(pipe->fd, TCSANOW, &setterm); /*!*/
|
Tcsetattr(pipe->fd, TCSANOW, &setterm); /*!*/
|
||||||
|
#endif /* _WITH_TERMIOS */
|
||||||
do {
|
do {
|
||||||
bytes = Read(pipe->fd, buff, bufsiz);
|
bytes = Read(pipe->fd, buff, bufsiz);
|
||||||
} while (bytes < 0 && errno == EINTR);
|
} while (bytes < 0 && errno == EINTR);
|
||||||
|
@ -155,16 +159,20 @@ ssize_t xioread_readline(struct single *pipe, void *buff, size_t bufsiz) {
|
||||||
errno = _errno;
|
errno = _errno;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#if _WITH_TERMIOS
|
||||||
setterm.c_lflag &= ~ICANON;
|
setterm.c_lflag &= ~ICANON;
|
||||||
Tcgetattr(pipe->fd, &setterm); /*! error */
|
Tcgetattr(pipe->fd, &setterm); /*! error */
|
||||||
Tcsetattr(pipe->fd, TCSANOW, &saveterm); /*!*/
|
Tcsetattr(pipe->fd, TCSANOW, &saveterm); /*!*/
|
||||||
|
#endif /* _WITH_TERMIOS */
|
||||||
pipe->para.readline.dynend = pipe->para.readline.dynprompt;
|
pipe->para.readline.dynend = pipe->para.readline.dynprompt;
|
||||||
/*Write(pipe->fd, "\n", 1);*/ /*!*/
|
/*Write(pipe->fd, "\n", 1);*/ /*!*/
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_REGEX_H */
|
#endif /* HAVE_REGEX_H */
|
||||||
|
|
||||||
|
#if _WITH_TERMIOS
|
||||||
xiotermios_setflag(pipe->fd, 3, ECHO);
|
xiotermios_setflag(pipe->fd, 3, ECHO);
|
||||||
|
#endif /* _WITH_TERMIOS */
|
||||||
if (pipe->para.readline.prompt || pipe->para.readline.dynprompt) {
|
if (pipe->para.readline.prompt || pipe->para.readline.dynprompt) {
|
||||||
/* we must carriage return, because readline will first print the
|
/* we must carriage return, because readline will first print the
|
||||||
prompt */
|
prompt */
|
||||||
|
@ -191,7 +199,9 @@ ssize_t xioread_readline(struct single *pipe, void *buff, size_t bufsiz) {
|
||||||
if (line == NULL) {
|
if (line == NULL) {
|
||||||
return 0; /* EOF */
|
return 0; /* EOF */
|
||||||
}
|
}
|
||||||
|
#if _WITH_TERMIOS
|
||||||
xiotermios_clrflag(pipe->fd, 3, ECHO);
|
xiotermios_clrflag(pipe->fd, 3, ECHO);
|
||||||
|
#endif /* _WITH_TERMIOS */
|
||||||
Add_history(line);
|
Add_history(line);
|
||||||
bytes = strlen(line);
|
bytes = strlen(line);
|
||||||
strncpy(buff, line, bufsiz);
|
strncpy(buff, line, bufsiz);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* source: xio-termios.c */
|
/* 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 */
|
/* Published under the GNU General Public License V.2, see file COPYING */
|
||||||
|
|
||||||
/* this file contains the source for terminal I/O options */
|
/* this file contains the source for terminal I/O options */
|
||||||
|
@ -10,6 +10,7 @@
|
||||||
#include "xio-termios.h"
|
#include "xio-termios.h"
|
||||||
|
|
||||||
/****** TERMIOS addresses ******/
|
/****** TERMIOS addresses ******/
|
||||||
|
#if _WITH_TERMIOS
|
||||||
#if WITH_TERMIOS
|
#if WITH_TERMIOS
|
||||||
const struct optdesc opt_tiocsctty={ "tiocsctty", "ctty",OPT_TIOCSCTTY, GROUP_TERMIOS, PH_LATE2, TYPE_BOOL, OFUNC_SPEC };
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* _WITH_TERMIOS */
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* source: xio-termios.h */
|
/* 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 */
|
/* Published under the GNU General Public License V.2, see file COPYING */
|
||||||
|
|
||||||
#ifndef __xio_termios_h_included
|
#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_ispeed;
|
||||||
extern const struct optdesc opt_ospeed;
|
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_setflag(int fd, int word, tcflag_t mask);
|
||||||
extern int xiotermios_clrflag(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);
|
extern int xiotermiosflag_applyopt(int fd, struct opt *opt);
|
||||||
#endif /* WITH_TERMIOS */
|
#endif /* _WITH_TERMIOS */
|
||||||
|
|
||||||
#endif /* !defined(__xio_termios_h_included) */
|
#endif /* !defined(__xio_termios_h_included) */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* source: xioconfig.h */
|
/* 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 */
|
/* Published under the GNU General Public License V.2, see file COPYING */
|
||||||
|
|
||||||
#ifndef __xioconfig_h_included
|
#ifndef __xioconfig_h_included
|
||||||
|
@ -20,6 +20,10 @@
|
||||||
# define WITH_NAMED 1
|
# define WITH_NAMED 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if WITH_TERMIOS || WITH_PTY || WITH_READLINE
|
||||||
|
# define _WITH_TERMIOS 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#if WITH_SOCKS4A
|
#if WITH_SOCKS4A
|
||||||
# define WITH_SOCKS4 1
|
# define WITH_SOCKS4 1
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue