$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 #else #ifdef USE_TERMIOS -#include #include #else #include @@ -44,6 +43,11 @@ #ifdef USE_SYSLOG #include #endif /* USE_SYSLOG */ +#ifdef __STDC__ +#include +#else +#include +#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 */