1/* Copyright (C) 1991,1992,1995-1997,2001,2002 Free Software Foundation, Inc.
2   This file is part of the GNU C Library.
3
4   The GNU C Library is free software; you can redistribute it and/or
5   modify it under the terms of the GNU Lesser General Public
6   License as published by the Free Software Foundation; either
7   version 2.1 of the License, or (at your option) any later version.
8
9   The GNU C Library is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   Lesser General Public License for more details.
13
14   You should have received a copy of the GNU Lesser General Public
15   License along with the GNU C Library; if not, write to the Free
16   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17   02111-1307 USA.  */
18
19#include <stdio.h>
20#include <signal.h>
21#include <stdlib.h>
22#include <libintl.h>
23#ifdef USE_IN_LIBIO
24# include <wchar.h>
25#endif
26
27
28#ifndef	HAVE_GNU_LD
29#define	_sys_siglist	sys_siglist
30#endif
31
32/* Defined in sys_siglist.c.  */
33extern const char *const _sys_siglist[];
34extern const char *const _sys_siglist_internal[] attribute_hidden;
35
36
37/* Print out on stderr a line consisting of the test in S, a colon, a space,
38   a message describing the meaning of the signal number SIG and a newline.
39   If S is NULL or "", the colon and space are omitted.  */
40void
41psignal (int sig, const char *s)
42{
43  const char *colon, *desc;
44
45  if (s == NULL || s == '\0')
46    s = colon = "";
47  else
48    colon = ": ";
49
50  if (sig >= 0 && sig < NSIG && (desc = INTUSE(_sys_siglist)[sig]) != NULL)
51    {
52#ifdef USE_IN_LIBIO
53      if (_IO_fwide (stderr, 0) > 0)
54	(void) __fwprintf (stderr, L"%s%s%s\n", s, colon, _(desc));
55      else
56#endif
57	(void) fprintf (stderr, "%s%s%s\n", s, colon, _(desc));
58    }
59  else
60    {
61      char *buf;
62
63      (void) __asprintf (&buf, _("%s%sUnknown signal %d\n"), s, colon, sig);
64
65#ifdef USE_IN_LIBIO
66      if (_IO_fwide (stderr, 0) > 0)
67	(void) __fwprintf (stderr, L"%s",  buf);
68      else
69#endif
70	(void) fputs (buf, stderr);
71
72      free (buf);
73    }
74}
75