mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
src/cmd/ksh93/data/signals.c includes two checks for the JOBS identifier; if it is not defined then the interactive shell's background job signal messages for SIGINT and SIGPIPE are empty. The cause was that the "jobs.h" header, which defines that ID, was not #included in signals.c. This commit adds that #include. (ksh 93u+, ksh 93v- and ksh2020 all have this bug as well.) Before: $ sleep 30 & [1] 86430 $ kill -s INT "$!" [1] + sleep 30 & $ After: $ sleep 30 & [1] 86445 $ kill -s INT "$!" [1] + Interrupt sleep 30 & $
251 lines
8.4 KiB
C
251 lines
8.4 KiB
C
/***********************************************************************
|
|
* *
|
|
* This software is part of the ast package *
|
|
* Copyright (c) 1982-2012 AT&T Intellectual Property *
|
|
* and is licensed under the *
|
|
* Eclipse Public License, Version 1.0 *
|
|
* by AT&T Intellectual Property *
|
|
* *
|
|
* A copy of the License is available at *
|
|
* http://www.eclipse.org/org/documents/epl-v10.html *
|
|
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
|
|
* *
|
|
* Information and Software Systems Research *
|
|
* AT&T Research *
|
|
* Florham Park NJ *
|
|
* *
|
|
* David Korn <dgk@research.att.com> *
|
|
* *
|
|
***********************************************************************/
|
|
#include "defs.h"
|
|
#include "jobs.h"
|
|
|
|
#if defined(SIGCLD) && !defined(SIGCHLD)
|
|
# define SIGCHLD SIGCLD
|
|
#endif
|
|
|
|
#define VAL(sig,mode) ((sig+1)|((mode)<<SH_SIGBITS))
|
|
#define TRAP(n) (((n)|SH_TRAP)-1)
|
|
|
|
#ifndef ERROR_dictionary
|
|
# define ERROR_dictionary(s) (s)
|
|
#endif
|
|
#define S(s) ERROR_dictionary(s)
|
|
|
|
/*
|
|
* This is a table that gives numbers and default settings to each signal.
|
|
* The signal numbers go in the low bits and the attributes go in the high bits.
|
|
* The names must be ASCII sorted lo-hi.
|
|
*/
|
|
|
|
const struct shtable2 shtab_signals[] =
|
|
{
|
|
#ifdef SIGABRT
|
|
"ABRT", VAL(SIGABRT,SH_SIGDONE), S("Abort"),
|
|
#endif /*SIGABRT */
|
|
#ifdef SIGAIO
|
|
"AIO", VAL(SIGAIO,SH_SIGIGNORE), S("Asynchronous I/O"),
|
|
#endif /*SIGAIO */
|
|
#ifdef SIGALRM
|
|
"ALRM", VAL(SIGALRM,SH_SIGDONE), S("Alarm call"),
|
|
#endif /* SIGALRM */
|
|
#ifdef SIGALRM1
|
|
"ALRM1", VAL(SIGALRM1,SH_SIGDONE), S("Scheduling - reserved"),
|
|
#endif /* SIGALRM */
|
|
#ifdef SIGAPOLLO
|
|
"APOLLO", VAL(SIGAPOLLO,0), S("SIGAPOLLO"),
|
|
#endif /* SIGAPOLLO */
|
|
#ifdef SIGBUS
|
|
"BUS", VAL(SIGBUS,SH_SIGDONE), S("Bus error"),
|
|
#endif /* SIGBUS */
|
|
#ifdef SIGCANCEL
|
|
"CANCEL", VAL(SIGCANCEL,SH_SIGIGNORE), S("Thread cancellation"),
|
|
#endif /*SIGCANCEL */
|
|
#ifdef SIGCHLD
|
|
"CHLD", VAL(SIGCHLD,SH_SIGFAULT), S("Death of Child"),
|
|
# ifdef SIGCLD
|
|
# if SIGCLD!=SIGCHLD
|
|
"CLD", VAL(SIGCLD,SH_SIGFAULT), S("Death of Child"),
|
|
# endif
|
|
# endif /* SIGCLD */
|
|
#else
|
|
# ifdef SIGCLD
|
|
"CLD", VAL(SIGCLD,SH_SIGFAULT), S("Death of Child"),
|
|
# endif /* SIGCLD */
|
|
#endif /* SIGCHLD */
|
|
#ifdef SIGCONT
|
|
"CONT", VAL(SIGCONT,SH_SIGIGNORE), S("Stopped process continued"),
|
|
#endif /* SIGCONT */
|
|
#ifdef SIGCPUFAIL
|
|
"CPUFAIL", VAL(SIGCPUFAIL,0), S("Predictive processor deconfiguration"),
|
|
#endif /* SIGRETRACT */
|
|
"DEBUG", VAL(TRAP(SH_DEBUGTRAP),0), "",
|
|
#ifdef SIGDANGER
|
|
"DANGER", VAL(SIGDANGER,0), S("System crash soon"),
|
|
#endif /* SIGDANGER */
|
|
#ifdef SIGDIL
|
|
"DIL", VAL(SIGDIL,0), S("DIL signal"),
|
|
#endif /* SIGDIL */
|
|
#ifdef SIGEMT
|
|
"EMT", VAL(SIGEMT,SH_SIGDONE), S("EMT trap"),
|
|
#endif /* SIGEMT */
|
|
"ERR", VAL(TRAP(SH_ERRTRAP),0), "",
|
|
#ifdef SIGERR
|
|
"ERR", VAL(SIGERR,0), "",
|
|
#endif /* SIGERR */
|
|
"EXIT", VAL(0,0), "",
|
|
"FPE", VAL(SIGFPE,SH_SIGDONE), S("Floating exception"),
|
|
#ifdef SIGFREEZE
|
|
"FREEZE", VAL(SIGFREEZE,SH_SIGIGNORE), S("Special signal used by CPR"),
|
|
#endif /* SIGFREEZE */
|
|
#ifdef SIGGRANT
|
|
"GRANT", VAL(SIGGRANT,0), S("Grant monitor mode"),
|
|
#endif /* SIGGRANT */
|
|
"HUP", VAL(SIGHUP,SH_SIGDONE), S("Hangup"),
|
|
"ILL", VAL(SIGILL,SH_SIGDONE), S("Illegal instruction"),
|
|
#ifdef JOBS
|
|
"INT", VAL(SIGINT,SH_SIGINTERACTIVE), S("Interrupt"),
|
|
#else
|
|
"INT", VAL(SIGINT,SH_SIGINTERACTIVE), "",
|
|
#endif /* JOBS */
|
|
#ifdef SIGINFO
|
|
"INFO", VAL(SIGINFO,SH_SIGIGNORE), S("Information request"),
|
|
#endif /* SIGINFO */
|
|
#ifdef SIGIO
|
|
"IO", VAL(SIGIO,SH_SIGDONE), S("IO signal"),
|
|
#endif /* SIGIO */
|
|
#ifdef SIGIOT
|
|
"IOT", VAL(SIGIOT,SH_SIGDONE), S("Abort"),
|
|
#endif /* SIGIOT */
|
|
#ifdef SIGJVM1
|
|
"JVM1", VAL(SIGJVM1,SH_SIGIGNORE), S("Special signal used by Java Virtual Machine"),
|
|
#endif /*SIGJVM1 */
|
|
#ifdef SIGJVM2
|
|
"JVM2", VAL(SIGJVM2,SH_SIGIGNORE), S("Special signal used by Java Virtual Machine"),
|
|
#endif /*SIGJVM2 */
|
|
"KEYBD", VAL(TRAP(SH_KEYTRAP),0), "",
|
|
#ifdef SIGKILL
|
|
"KILL", VAL(SIGKILL,0), S("Killed"),
|
|
#endif /* SIGKILL */
|
|
#ifdef SIGLAB
|
|
"LAB", VAL(SIGLAB,0), S("Security label changed"),
|
|
#endif /* SIGLAB */
|
|
#ifdef SIGLOST
|
|
"LOST", VAL(SIGLOST,SH_SIGDONE), S("Resources lost"),
|
|
#endif /* SIGLOST */
|
|
#ifdef SIGLWP
|
|
"LWP", VAL(SIGLWP,SH_SIGIGNORE), S("Special signal used by thread library"),
|
|
#endif /* SIGLWP */
|
|
#ifdef SIGMIGRATE
|
|
"MIGRATE", VAL(SIGMIGRATE,0), S("Migrate process"),
|
|
#endif /* SIGMIGRATE */
|
|
#ifdef SIGMSG
|
|
"MSG", VAL(SIGMSG,0), S("Ring buffer input data"),
|
|
#endif /* SIGMSG */
|
|
#ifdef SIGPHONE
|
|
"PHONE", VAL(SIGPHONE,0), S("Phone interrupt"),
|
|
#endif /* SIGPHONE */
|
|
#ifdef SIGPIPE
|
|
#ifdef JOBS
|
|
"PIPE", VAL(SIGPIPE,SH_SIGDONE), S("Broken Pipe"),
|
|
#else
|
|
"PIPE", VAL(SIGPIPE,SH_SIGDONE), "",
|
|
#endif /* JOBS */
|
|
#endif /* SIGPIPE */
|
|
#ifdef SIGPOLL
|
|
"POLL", VAL(SIGPOLL,SH_SIGDONE), S("Polling alarm"),
|
|
#endif /* SIGPOLL */
|
|
#ifdef SIGPROF
|
|
"PROF", VAL(SIGPROF,SH_SIGDONE), S("Profiling time alarm"),
|
|
#endif /* SIGPROF */
|
|
#ifdef SIGPRE
|
|
"PRE", VAL(SIGPRE,SH_SIGDONE), S("Programming exception"),
|
|
#endif /* SIGPRE */
|
|
#ifdef SIGPWR
|
|
# if SIGPWR>0
|
|
"PWR", VAL(SIGPWR,SH_SIGIGNORE), S("Power fail"),
|
|
# endif
|
|
#endif /* SIGPWR */
|
|
#ifdef SIGQUIT
|
|
"QUIT", VAL(SIGQUIT,SH_SIGDONE|SH_SIGINTERACTIVE), S("Quit"),
|
|
#endif /* SIGQUIT */
|
|
#ifdef SIGRETRACT
|
|
"RETRACT", VAL(SIGRETRACT,0), S("Relinquish monitor mode"),
|
|
#endif /* SIGRETRACT */
|
|
#ifdef SIGRTMIN
|
|
"RTMIN", VAL(SH_SIGRTMIN,SH_SIGRUNTIME), S("Lowest priority realtime signal"),
|
|
#endif /* SIGRTMIN */
|
|
#ifdef SIGRTMAX
|
|
"RTMAX", VAL(SH_SIGRTMAX,SH_SIGRUNTIME), S("Highest priority realtime signal"),
|
|
#endif /* SIGRTMAX */
|
|
#ifdef SIGSAK
|
|
"SAK", VAL(SIGSAK,0), S("Secure attention key"),
|
|
#endif /* SIGSAK */
|
|
"SEGV", VAL(SIGSEGV,0), S("Memory fault"),
|
|
#ifdef SIGSOUND
|
|
"SOUND", VAL(SIGSOUND,0), S("Sound completed"),
|
|
#endif /* SIGSOUND */
|
|
#ifdef SIGSTOP
|
|
"STOP", VAL(SIGSTOP,0), S("Stopped (SIGSTOP)"),
|
|
#endif /* SIGSTOP */
|
|
#ifdef SIGSYS
|
|
"SYS", VAL(SIGSYS,SH_SIGDONE), S("Bad system call"),
|
|
#endif /* SIGSYS */
|
|
#ifdef SIGSTKFLT
|
|
"STKFLT", VAL(SIGSTKFLT,SH_SIGDONE), S("Stack Fault"),
|
|
#endif /* SIGSTKFLT */
|
|
"TERM", VAL(SIGTERM,SH_SIGDONE|SH_SIGINTERACTIVE), S("Terminated"),
|
|
#ifdef SIGTHAW
|
|
"THAW", VAL(SIGTHAW,SH_SIGIGNORE), S("Special signal used by CPR"),
|
|
#endif /* SIGTHAW */
|
|
#ifdef SIGTINT
|
|
# ifdef JOBS
|
|
"TINT", VAL(SIGTINT,0), S("Interrupt"),
|
|
# else
|
|
"TINT", VAL(SIGTINT,0), "",
|
|
# endif /* JOBS */
|
|
#endif /* SIGTINT */
|
|
#ifdef SIGTRAP
|
|
"TRAP", VAL(SIGTRAP,SH_SIGDONE), S("Trace/BPT trap"),
|
|
#endif /* SIGTRAP */
|
|
#ifdef SIGTSTP
|
|
"TSTP", VAL(SIGTSTP,0), S("Stopped"),
|
|
#endif /* SIGTSTP */
|
|
#ifdef SIGTTIN
|
|
"TTIN", VAL(SIGTTIN,0), S("Stopped (SIGTTIN)"),
|
|
#endif /* SIGTTIN */
|
|
#ifdef SIGTTOU
|
|
"TTOU", VAL(SIGTTOU,0), S("Stopped (SIGTTOU)"),
|
|
#endif /* SIGTTOU */
|
|
#ifdef SIGURG
|
|
"URG", VAL(SIGURG,SH_SIGIGNORE), S("Socket interrupt"),
|
|
#endif /* SIGURG */
|
|
#ifdef SIGUSR1
|
|
"USR1", VAL(SIGUSR1,SH_SIGDONE), S("User signal 1"),
|
|
#endif /* SIGUSR1 */
|
|
#ifdef SIGUSR2
|
|
"USR2", VAL(SIGUSR2,SH_SIGDONE), S("User signal 2"),
|
|
#endif /* SIGUSR2 */
|
|
#ifdef SIGVIRT
|
|
"VIRT", VAL(SIGVIRT,0), S("Virtual timer alarm"),
|
|
#endif /* SIGVIRT */
|
|
#ifdef SIGVTALRM
|
|
"VTALRM", VAL(SIGVTALRM,SH_SIGDONE), S("Virtual time alarm"),
|
|
#endif /* SIGVTALRM */
|
|
#ifdef SIGWAITING
|
|
"WAITING", VAL(SIGWAITING,SH_SIGIGNORE), S("All threads blocked"),
|
|
#endif /* SIGWAITING */
|
|
#ifdef SIGWINCH
|
|
"WINCH", VAL(SIGWINCH,SH_SIGIGNORE), S("Window size change"),
|
|
#endif /* SIGWINCH */
|
|
#ifdef SIGXCPU
|
|
"XCPU", VAL(SIGXCPU,SH_SIGDONE|SH_SIGINTERACTIVE), S("Exceeded CPU time limit"),
|
|
#endif /* SIGXCPU */
|
|
#ifdef SIGXFSZ
|
|
"XFSZ", VAL(SIGXFSZ,SH_SIGDONE|SH_SIGINTERACTIVE), S("Exceeded file size limit"),
|
|
#endif /* SIGXFSZ */
|
|
#ifdef SIGXRES
|
|
"XRES", VAL(SIGXRES,SH_SIGDONE|SH_SIGINTERACTIVE), S("Exceeded resource control"),
|
|
#endif /* SIGRES */
|
|
"", 0, 0
|
|
};
|