$NetBSD: patch-ae,v 1.5 2014/09/22 11:56:39 joerg Exp $ - avoid union wait - force termios on all modern systems - declare void functions void - avoid implicit int - don't declare own errno - fix os conditionals (apparently with respect to VMS) - call execl() and execlp() correctly - don't synthesize vsprintf with fake arguments - use ctype.h functions correctly --- main.c.orig 2002-01-09 00:41:11.000000000 +0000 +++ main.c @@ -63,15 +63,7 @@ SOFTWARE. #include #include #include -#ifdef linux -#ifdef __GLIBC__ -#if __GLIBC_MINOR__<1 -#include -#else #include -#endif /* __GLIBC_MINOR__ */ -#endif /* __GLIBC__ */ -#endif #ifdef DGUX /* dkim@surecom.com */ /* DGUX is SVR4 but its SYSV side of TTY has bugs in it */ @@ -239,8 +231,18 @@ static Bool IsPts = False; #ifdef SVR4 #define USE_POSIX_WAIT #endif +#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ + defined(__DragonFly__) || defined(__linux__) +#ifndef USE_POSIX_WAIT +#define USE_POSIX_WAIT +#endif +#ifndef USE_TERMIOS +#define USE_TERMIOS +#endif +#endif #include +#include #include #include @@ -391,6 +393,9 @@ extern char *ptsname(); extern char *strindex (); extern void HandlePopupMenu(); +static void get_terminal (void); +static void resize(TScreen *screen, char *TermName, char *oldtc, char *newtc); + int switchfb[] = {0, 2, 1, 3}; static SIGNAL_T reapchild (); @@ -583,6 +588,8 @@ static int tslot; #endif /* USE_SYSV_UTMP */ static jmp_buf env; +static void spawn (void); + char *ProgramName; Boolean sunFunctionKeys; @@ -805,9 +812,9 @@ static char *message[] = { "will be started. Options that start with a plus sign (+) restore the default.", NULL}; -#ifndef USE_TERMIOS -static remove_termcap_entry (); -#endif +/*#ifndef USE_TERMIOS*/ +static void remove_termcap_entry (char *, const char *); +/*#endif*/ static int abbrev (tst, cmp) char *tst, *cmp; @@ -816,7 +823,7 @@ static int abbrev (tst, cmp) return ((len >= 2) && (!strncmp(tst, cmp, len))); } -static Syntax (badOption) +static void Syntax (badOption) char *badOption; { struct _options *opt; @@ -842,13 +849,13 @@ static Syntax (badOption) exit (1); } -static Version () +static void Version () { printf("%s %s %s %s\n", HANTERM_PRODUCT, HANTERM_VERSION, HANTERM_RELEASE, HANTERM_RELEASEDATE); exit (0); } -static Help () +static void Help () { struct _options *opt; char **cpp; @@ -960,6 +967,7 @@ XtActionsRec actionProcs[] = { Atom wm_delete_window; +int main (argc, argv) int argc; char **argv; @@ -1527,7 +1535,8 @@ char **argv; if (ioctl (pty, FIONBIO, (char *)&mode) == -1) SysError (ERROR_FIONBIO); #endif /* USE_SYSV_TERMIO */ -#if defined(linux)||defined(SVR4)||(defined(hpux)&&OSMAJORVERSION>=10) + +#ifndef VMS pty_mask = pty; X_mask = Xsocket; FD_ZERO(&Select_mask); @@ -1566,6 +1575,7 @@ char *name; * has problems, we can re-enter this function and get another one. */ +int get_pty (pty) int *pty; { @@ -1730,6 +1740,7 @@ int pty_search(pty) return 1; } +static void get_terminal () /* * sets up X and initializes the terminal structure except for term.buf.fildes. @@ -1854,7 +1865,7 @@ void first_map_occurred () #endif /* USE_HANDSHAKE else !USE_HANDSHAKE */ -spawn () +static void spawn (void) /* * Inits pty and tty and forks a login process. * Does not close fd Xsocket. @@ -2983,10 +2994,10 @@ spawn () #ifdef USE_LOGIN_DASH_P if (term->misc.login_shell && pw && added_utmp_entry) - execl (bin_login, "login", "-p", "-f", pw->pw_name, 0); + execl (bin_login, "login", "-p", "-f", pw->pw_name, (void *)NULL); #endif execlp (ptr, (term->misc.login_shell ? shname_minus : shname), - 0); + (void *)NULL); /* Exec failed. */ fprintf (stderr, "%s: Could not exec %s!\n", xterm_name, ptr); @@ -3235,10 +3246,8 @@ Exit(n) } /* ARGSUSED */ -resize(screen, TermName, oldtc, newtc) -TScreen *screen; -char *TermName; -register char *oldtc, *newtc; +static void +resize(TScreen *screen, char *TermName, char *oldtc, char *newtc) { #ifndef USE_SYSV_ENVVARS register char *ptr1, *ptr2; @@ -3329,18 +3338,20 @@ static SIGNAL_T reapchild (n) } /* VARARGS1 */ -consolepr(fmt,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9) -char *fmt; +void +consolepr(const char *fmt, ...) { - extern int errno; extern char *SysErrorMsg(); int oerrno; int f; char buf[ BUFSIZ ]; + va_list ap; oerrno = errno; strcpy(buf, "hanterm: "); - sprintf(buf+strlen(buf), fmt, x0,x1,x2,x3,x4,x5,x6,x7,x8,x9); + va_start(ap, fmt); + vsnprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), fmt, ap); + va_end(ap); strcat(buf, ": "); strcat(buf, SysErrorMsg (oerrno)); strcat(buf, "\n"); @@ -3356,10 +3367,8 @@ char *fmt; } -#ifndef USE_TERMIOS -static remove_termcap_entry (buf, str) - char *buf; - char *str; +/*#ifndef USE_TERMIOS*/ +static void remove_termcap_entry (char *buf, const char *str) { register char *strinbuf; @@ -3377,7 +3386,7 @@ static remove_termcap_entry (buf, str) } return; } -#endif +/*#endif*/ /* * parse_tty_modes accepts lines of the following form: @@ -3396,7 +3405,8 @@ static int parse_tty_modes (s, modelist) int count = 0; while (1) { - while (*s && isascii(*s) && isspace(*s)) s++; + while (*s && isascii((unsigned char)*s) && isspace((unsigned char)*s)) + s++; if (!*s) return count; for (mp = modelist; mp->name; mp++) {