=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/less/signal.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- src/usr.bin/less/signal.c 2014/04/25 13:38:21 1.9 +++ src/usr.bin/less/signal.c 2015/11/05 22:08:44 1.10 @@ -6,8 +6,11 @@ * * For more information, see the README file. */ +/* + * Modified for use with illumos. + * Copyright 2015 Garrett D'Amore + */ - /* * Routines dealing with signals. * @@ -22,11 +25,10 @@ /* * "sigs" contains bits indicating signals which need to be processed. */ -public volatile sig_atomic_t sigs; +volatile sig_atomic_t sigs; extern int sc_width, sc_height; extern int screen_trashed; -extern int lnloop; extern int linenums; extern int wscroll; extern int quit_on_intr; @@ -35,137 +37,55 @@ /* * Interrupt signal handler. */ - /* ARGSUSED*/ - static RETSIGTYPE -u_interrupt(type) - int type; +/* ARGSUSED */ +static void +u_interrupt(int type) { -#if OS2 - LSIGNAL(SIGINT, SIG_ACK); -#endif sigs |= S_INTERRUPT; -#if MSDOS_COMPILER==DJGPPC - /* - * If a keyboard has been hit, it must be Ctrl-C - * (as opposed to Ctrl-Break), so consume it. - * (Otherwise, Less will beep when it sees Ctrl-C from keyboard.) - */ - if (kbhit()) - getkey(); -#endif } -#ifdef SIGTSTP /* * "Stop" (^Z) signal handler. */ - /* ARGSUSED*/ - static RETSIGTYPE -stop(type) - int type; +/* ARGSUSED */ +static void +stop(int type) { sigs |= S_STOP; } -#endif -#ifdef SIGWINCH /* * "Window" change handler */ - /* ARGSUSED*/ - public RETSIGTYPE -winch(type) - int type; +/* ARGSUSED */ +void +sigwinch(int type) { sigs |= S_WINCH; } -#else -#ifdef SIGWIND -/* - * "Window" change handler - */ - /* ARGSUSED*/ - public RETSIGTYPE -winch(type) - int type; -{ - sigs |= S_WINCH; -} -#endif -#endif -#if MSDOS_COMPILER==WIN32C /* - * Handle CTRL-C and CTRL-BREAK keys. - */ -#include "windows.h" - - static BOOL WINAPI -wbreak_handler(dwCtrlType) - DWORD dwCtrlType; -{ - switch (dwCtrlType) - { - case CTRL_C_EVENT: - case CTRL_BREAK_EVENT: - sigs |= S_INTERRUPT; - return (TRUE); - default: - break; - } - return (FALSE); -} -#endif - -/* * Set up the signal handlers. */ - public void -init_signals(on) - int on; +void +init_signals(int on) { - if (on) - { + if (on) { /* * Set signal handlers. */ (void) LSIGNAL(SIGINT, u_interrupt); -#if MSDOS_COMPILER==WIN32C - SetConsoleCtrlHandler(wbreak_handler, TRUE); -#endif -#ifdef SIGTSTP (void) LSIGNAL(SIGTSTP, stop); -#endif -#ifdef SIGWINCH - (void) LSIGNAL(SIGWINCH, winch); -#endif -#ifdef SIGWIND - (void) LSIGNAL(SIGWIND, winch); -#endif -#ifdef SIGQUIT + (void) LSIGNAL(SIGWINCH, sigwinch); (void) LSIGNAL(SIGQUIT, SIG_IGN); -#endif - } else - { + } else { /* * Restore signals to defaults. */ (void) LSIGNAL(SIGINT, SIG_DFL); -#if MSDOS_COMPILER==WIN32C - SetConsoleCtrlHandler(wbreak_handler, FALSE); -#endif -#ifdef SIGTSTP (void) LSIGNAL(SIGTSTP, SIG_DFL); -#endif -#ifdef SIGWINCH (void) LSIGNAL(SIGWINCH, SIG_IGN); -#endif -#ifdef SIGWIND - (void) LSIGNAL(SIGWIND, SIG_IGN); -#endif -#ifdef SIGQUIT (void) LSIGNAL(SIGQUIT, SIG_DFL); -#endif } } @@ -173,8 +93,8 @@ * Process any signals we have received. * A received signal cause a bit to be set in "sigs". */ - public void -psignals() +void +psignals(void) { register int tsignals; @@ -182,22 +102,16 @@ return; sigs = 0; -#ifdef SIGTSTP - if (tsignals & S_STOP) - { + if (tsignals & S_STOP) { /* * Clean up the terminal. */ -#ifdef SIGTTOU LSIGNAL(SIGTTOU, SIG_IGN); -#endif clear_bot(); deinit(); flush(); raw_mode(0); -#ifdef SIGTTOU LSIGNAL(SIGTTOU, SIG_DFL); -#endif LSIGNAL(SIGTSTP, SIG_DFL); kill(getpid(), SIGTSTP); /* @@ -212,10 +126,7 @@ screen_trashed = 1; tsignals |= S_WINCH; } -#endif -#ifdef S_WINCH - if (tsignals & S_WINCH) - { + if (tsignals & S_WINCH) { int old_width, old_height; /* * Re-execute scrsize() to read the new window size. @@ -223,18 +134,15 @@ old_width = sc_width; old_height = sc_height; get_term(); - if (sc_width != old_width || sc_height != old_height) - { + if (sc_width != old_width || sc_height != old_height) { wscroll = (sc_height + 1) / 2; calc_jump_sline(); calc_shift_count(); screen_trashed = 1; } } -#endif - if (tsignals & S_INTERRUPT) - { - bell(); + if (tsignals & S_INTERRUPT) { + ring_bell(); if (quit_on_intr) quit(QUIT_INTERRUPT); } @@ -243,16 +151,14 @@ /* * Custom version of signal() that causes syscalls to be interrupted. */ - public void -(*lsignal(s, a))() - int s; - void (*a) (); +void * +lsignal(int s, void (*a)(int)) { struct sigaction sa, osa; sa.sa_handler = a; sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; /* don't restart system calls */ + sa.sa_flags = 0; /* don't restart system calls */ if (sigaction(s, &sa, &osa) != 0) return (SIG_ERR); return (osa.sa_handler);