178121e79SPeter Wemm /* 278121e79SPeter Wemm * Copyright (c) 1988, 1993 378121e79SPeter Wemm * The Regents of the University of California. All rights reserved. 478121e79SPeter Wemm * 578121e79SPeter Wemm * Redistribution and use in source and binary forms, with or without 678121e79SPeter Wemm * modification, are permitted provided that the following conditions 778121e79SPeter Wemm * are met: 878121e79SPeter Wemm * 1. Redistributions of source code must retain the above copyright 978121e79SPeter Wemm * notice, this list of conditions and the following disclaimer. 1078121e79SPeter Wemm * 2. Redistributions in binary form must reproduce the above copyright 1178121e79SPeter Wemm * notice, this list of conditions and the following disclaimer in the 1278121e79SPeter Wemm * documentation and/or other materials provided with the distribution. 1378121e79SPeter Wemm * 3. All advertising materials mentioning features or use of this software 1478121e79SPeter Wemm * must display the following acknowledgement: 1578121e79SPeter Wemm * This product includes software developed by the University of 1678121e79SPeter Wemm * California, Berkeley and its contributors. 1778121e79SPeter Wemm * 4. Neither the name of the University nor the names of its contributors 1878121e79SPeter Wemm * may be used to endorse or promote products derived from this software 1978121e79SPeter Wemm * without specific prior written permission. 2078121e79SPeter Wemm * 2178121e79SPeter Wemm * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2278121e79SPeter Wemm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2378121e79SPeter Wemm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2478121e79SPeter Wemm * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2578121e79SPeter Wemm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2678121e79SPeter Wemm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2778121e79SPeter Wemm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2878121e79SPeter Wemm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2978121e79SPeter Wemm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3078121e79SPeter Wemm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3178121e79SPeter Wemm * SUCH DAMAGE. 3278121e79SPeter Wemm */ 3378121e79SPeter Wemm 3478121e79SPeter Wemm #if defined(LIBC_SCCS) && !defined(lint) 3578121e79SPeter Wemm static char sccsid[] = "@(#)strerror.c 8.1 (Berkeley) 6/4/93"; 3678121e79SPeter Wemm #endif /* LIBC_SCCS and not lint */ 37de5fe5d5SDavid E. O'Brien #include <sys/cdefs.h> 38de5fe5d5SDavid E. O'Brien __FBSDID("$FreeBSD$"); 3978121e79SPeter Wemm 40fba5c5faSAlexey Zelkin #if defined(NLS) 41fba5c5faSAlexey Zelkin #include <nl_types.h> 42fba5c5faSAlexey Zelkin #endif 43fba5c5faSAlexey Zelkin 44fc7c3528SAlexey Zelkin #include <limits.h> 45fba5c5faSAlexey Zelkin #include <errno.h> 4678121e79SPeter Wemm #include <string.h> 4778121e79SPeter Wemm #include <signal.h> 4878121e79SPeter Wemm 49fba5c5faSAlexey Zelkin #define UPREFIX "Unknown signal" 50fba5c5faSAlexey Zelkin 51fba5c5faSAlexey Zelkin /* XXX: negative 'num' ? (REGR) */ 5278121e79SPeter Wemm char * 53fba5c5faSAlexey Zelkin strsignal(int num) 5478121e79SPeter Wemm { 55fba5c5faSAlexey Zelkin static char ebuf[NL_TEXTMAX]; 56fba5c5faSAlexey Zelkin char tmp[20]; 57fba5c5faSAlexey Zelkin int signum, n; 58fba5c5faSAlexey Zelkin char *t, *p; 5978121e79SPeter Wemm 60fba5c5faSAlexey Zelkin #if defined(NLS) 61fba5c5faSAlexey Zelkin int saved_errno = errno; 62fba5c5faSAlexey Zelkin nl_catd catd; 63fba5c5faSAlexey Zelkin catd = catopen("libc", NL_CAT_LOCALE); 64fba5c5faSAlexey Zelkin #endif 6578121e79SPeter Wemm 66fba5c5faSAlexey Zelkin if (num > 0 && num < sys_nsig) { 67fba5c5faSAlexey Zelkin strlcpy(ebuf, 68fba5c5faSAlexey Zelkin #if defined(NLS) 69fba5c5faSAlexey Zelkin catgets(catd, 2, num, sys_siglist[num]), 70fba5c5faSAlexey Zelkin #else 71fba5c5faSAlexey Zelkin sys_siglist[num], 72fba5c5faSAlexey Zelkin #endif 73fba5c5faSAlexey Zelkin sizeof(ebuf)); 74fba5c5faSAlexey Zelkin } else { 75fba5c5faSAlexey Zelkin n = strlcpy(ebuf, 76fba5c5faSAlexey Zelkin #if defined(NLS) 77fba5c5faSAlexey Zelkin catgets(catd, 2, 0xffff, UPREFIX), 78fba5c5faSAlexey Zelkin #else 79fba5c5faSAlexey Zelkin UPREFIX, 80fba5c5faSAlexey Zelkin #endif 81fba5c5faSAlexey Zelkin sizeof(ebuf)); 82fba5c5faSAlexey Zelkin } 83fba5c5faSAlexey Zelkin 84fba5c5faSAlexey Zelkin signum = num; 8578121e79SPeter Wemm if (num < 0) 8678121e79SPeter Wemm signum = -signum; 87fba5c5faSAlexey Zelkin 88fba5c5faSAlexey Zelkin t = tmp; 8978121e79SPeter Wemm do { 9078121e79SPeter Wemm *t++ = "0123456789"[signum % 10]; 9178121e79SPeter Wemm } while (signum /= 10); 9278121e79SPeter Wemm if (num < 0) 9378121e79SPeter Wemm *t++ = '-'; 94fba5c5faSAlexey Zelkin 95fba5c5faSAlexey Zelkin p = (ebuf + n); 96fba5c5faSAlexey Zelkin *p++ = ':'; 97fba5c5faSAlexey Zelkin *p++ = ' '; 98fba5c5faSAlexey Zelkin 99fba5c5faSAlexey Zelkin for (;;) { 10078121e79SPeter Wemm *p++ = *--t; 10178121e79SPeter Wemm if (t <= tmp) 10278121e79SPeter Wemm break; 10378121e79SPeter Wemm } 10478121e79SPeter Wemm *p = '\0'; 105fba5c5faSAlexey Zelkin 106fba5c5faSAlexey Zelkin #if defined(NLS) 107fba5c5faSAlexey Zelkin catclose(catd); 108fba5c5faSAlexey Zelkin errno = saved_errno; 109fba5c5faSAlexey Zelkin #endif 11078121e79SPeter Wemm return (ebuf); 11178121e79SPeter Wemm } 112