pkgsrc/comms/xtel/patches/patch-af

255 lines
5.6 KiB
Text

$NetBSD: patch-af,v 1.1.1.1 2002/01/12 18:34:56 bouyer Exp $
--- modem.c.orig Tue Feb 13 10:39:23 2001
+++ modem.c Sat Jan 12 19:27:52 2002
@@ -32,7 +32,6 @@
#include <sgtty.h>
#else
#ifdef USE_TERMIOS
-#include <sys/ioctl.h>
#include <termios.h>
#else
#include <termio.h>
@@ -44,6 +43,11 @@
#ifdef USE_SYSLOG
#include <syslog.h>
#endif /* USE_SYSLOG */
+#ifdef __STDC__
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
#include "demon.h"
#include "globald.h"
@@ -87,55 +91,56 @@
#endif
}
-/* Syslog or not syslog ? */
-#ifdef USE_SYSLOG
-void log_debug (fmt, p1, p2, p3, p4, p5, p6, p7)
-char *fmt;
-int p1, p2, p3, p4, p5, p6, p7;
-{
- char msg[256];
-
- sprintf (msg, fmt, p1, p2, p3, p4, p5, p6, p7);
- syslog (LOG_INFO, msg);
-}
-
-void log_err (s)
-char *s;
-{
- syslog (LOG_ERR, s);
-}
+#ifdef __STDC__
+void log_debug(const char *fmt, ...)
#else
-void log_debug (fmt, p1, p2, p3, p4, p5, p6, p7)
-char *fmt;
-int p1, p2, p3, p4, p5, p6, p7;
+void log_debug(va_alist)
+ va_dcl
+#endif
{
+ va_list ap;
+#ifdef __STDC__
+ va_start(ap, fmt);
+#else
+ const char *fmt;
+ va_start(ap);
+ fmt = va_arg(ap, const char *);
+#endif
+#ifdef USE_SYSLOG
+ vsyslog(LOG_INFO, fmt, ap);
+#else
fprintf (fp_console, "%s[%d] ", prefix, getpid());
- fprintf (fp_console, fmt, p1, p2, p3, p4, p5, p6, p7);
+ vfprintf (fp_console, fmt, ap);
fprintf (fp_console, "\n\r");
+#endif
+ va_end(ap);
}
-void log_err (s)
-char *s;
+#ifdef __STDC__
+void log_err(const char *fmt, ...)
+#else
+void log_err(va_alist)
+ va_dcl
+#endif
{
+ va_list ap;
+#ifdef __STDC__
+ va_start(ap, fmt);
+#else
+ const char *fmt;
+ va_start(ap);
+ fmt = va_arg(ap, const char *);
+#endif
+#ifdef USE_SYSLOG
+ vsyslog(LOG_ERR, fmt, ap);
+#else
fprintf (fp_console, "%s[%d] ", prefix, getpid());
-
- while (*s) {
- if (*s != '%')
- fputc (*s, fp_console);
- else if (*(s+1) == 'm') {
- fprintf (fp_console, "%s", sys_errlist[errno]);
- s++;
- }
-
- s++;
- }
-
+ vfprintf (fp_console, fmt, ap);
fprintf (fp_console, "\n\r");
+#endif
+ va_end(ap);
}
-#endif /* USE_SYSLOG */
-
-
/* Envoi d'une commande MODEM */
static void writemodem (fd, buf, n)
int fd;
@@ -165,8 +170,10 @@
#else
#ifdef USE_TERMIOS
- ioctl (fd, TIOCGETA, &term);
- memcpy ((char *)&term_sauve, (char *)&term, sizeof(struct termios));
+ if (tcgetattr(fd, &term) < 0) {
+ log_err("tcgetattr: %s", strerror(errno));
+ exit(1);
+ }
#else
ioctl (fd, TCGETA, &term);
memcpy ((char *)&term_sauve, (char *)&term, sizeof(struct termio));
@@ -174,11 +181,21 @@
/* Parametrage de la ligne */
term.c_cc[VMIN] = 1;
+#ifdef __NetBSD__
+ term.c_cc[VTIME] = term.c_cc[VKILL] = term.c_cc[VERASE] = 0;
+ term.c_iflag = IGNBRK | IGNPAR;
+ term.c_oflag = term.c_lflag = 0;
+#else
term.c_cc[VTIME] = 0;
term.c_iflag &= ~(IXON|IXOFF|ICRNL);
term.c_lflag &= ~(ICANON|ISIG|ECHO|IEXTEN);
+#endif
#ifdef USE_TERMIOS
+#ifdef __NetBSD__
+ term.c_cflag = (CREAD | HUPCL | CRTSCTS);
+ cfsetspeed( &term, speed);
+#else
/*
* FreeBSD 1.1 (Beta) n'a pas l'air d'apprecier qu'on mette clocal
* a 0... (blocage au premier write sur /dev/cua01)
@@ -186,6 +203,7 @@
term.c_cflag &= ~(CSIZE|CSTOPB);
term.c_cflag |= (CREAD|HUPCL);
term.c_ispeed = term.c_ospeed = speed;
+#endif /* __NetBSD__ */
#else
term.c_cflag &= ~(CSIZE|CBAUD|CLOCAL);
@@ -223,10 +241,12 @@
#endif /* sun */
#ifdef USE_TERMIOS
+#ifndef __NetBSD__
term.c_iflag &= ~(IGNCR|ICRNL|INLCR|IMAXBEL);
term.c_iflag |= (ISTRIP|INPCK);
term.c_lflag &= ~(ECHOCTL|IEXTEN);
term.c_oflag &= ~OPOST;
+#endif /* __NetBSD__ */
#endif /* USE_TERMIOS */
/* Cas du Minitel 1/2 */
@@ -235,7 +255,10 @@
/* Affectation des parametres */
#ifdef USE_TERMIOS
- ioctl (fd, TIOCSETA, &term);
+ if (tcsetattr (fd, TCSANOW, &term) < 0) {
+ log_err("tcsetattr(1):%s", strerror(errno));
+ exit(1);
+ }
#else
ioctl (fd, TCSETA, &term);
#endif /* USE_TERMIOS */
@@ -256,10 +279,11 @@
ioctl (fd, TIOCSETP, &term_sauve);
#else
#ifdef USE_TERMIOS
- term.c_ispeed = B0;
- term.c_ospeed = B0;
- ioctl (fd, TIOCSETAW, &term);
- ioctl (fd, TIOCSETA, &term_sauve);
+ cfsetspeed(&term_sauve, B0);
+ if (tcsetattr (fd, TCSADRAIN, &term_sauve) < 0) {
+ log_err("tcsetattr(2):%s", strerror(errno));
+ exit(1);
+ }
#else
term.c_cflag &= ~CBAUD;
term.c_cflag |= B0;
@@ -285,7 +309,7 @@
int reply_size;
{
fd_set a_lire, t_a_lire;
- int i, erreur, fin, nbread, cmodem;
+ int i, erreur, fin, nbread, cmodem = 0;
char *pt_chat, c, *q;
delai_maxi.tv_sec = tmax;
@@ -307,14 +331,20 @@
* (comme le Hayes Optima par exemple)...
*/
#ifdef USE_TERMIOS
- ioctl (fd, TCIOCGETA, &term);
+ if (tcgetattr(fd, &term) < 0) {
+ log_err("tcgetattr: %s", strerror(errno));
+ exit(1);
+ }
#else
ioctl (fd, TCGETA, &term);
#endif /* USE_TERMIOS */
- if ((term.c_cflag | CLOCAL) == 0) {
+ if ((term.c_cflag & CLOCAL) == 0) {
term.c_cflag |= CLOCAL;
#ifdef USE_TERMIOS
- ioctl (fd, TCIOCSETA, &term);
+ if (tcsetattr (fd, TCSANOW, &term) < 0) {
+ log_err("tcsetattr(3):%s", strerror(errno));
+ exit(1);
+ }
#else
ioctl (fd, TCSETA, &term);
#endif /* USE_TERMIOS */
@@ -586,13 +616,17 @@
fin = ((erreur != 0 || *(pt_chat-1) == 0) ? 1 : 0);
usleep (30000);
}
+ sleep(3);
#ifndef NO_TERMIO
/* Repasse en controle modem */
if (cmodem) {
term.c_cflag &= ~CLOCAL;
#ifdef USE_TERMIOS
- ioctl (fd, TCIOCSETA, &term);
+ if (tcsetattr (fd, TCSANOW, &term) < 0) {
+ log_err("tcsetattr(4):%s", strerror(errno));
+ exit(1);
+ }
#else
ioctl (fd, TCSETA, &term);
#endif /* USE_TERMIOS */