Annotation of embedaddon/ntp/lib/isc/unix/strerror.c, revision 1.1

1.1     ! misho       1: /*
        !             2:  * Copyright (C) 2004, 2005, 2007, 2009  Internet Systems Consortium, Inc. ("ISC")
        !             3:  * Copyright (C) 2001  Internet Software Consortium.
        !             4:  *
        !             5:  * Permission to use, copy, modify, and/or distribute this software for any
        !             6:  * purpose with or without fee is hereby granted, provided that the above
        !             7:  * copyright notice and this permission notice appear in all copies.
        !             8:  *
        !             9:  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
        !            10:  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
        !            11:  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
        !            12:  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
        !            13:  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
        !            14:  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
        !            15:  * PERFORMANCE OF THIS SOFTWARE.
        !            16:  */
        !            17: 
        !            18: /* $Id: strerror.c,v 1.8.332.2 2009/02/16 23:47:15 tbox Exp $ */
        !            19: 
        !            20: /*! \file */
        !            21: 
        !            22: #include <config.h>
        !            23: 
        !            24: #include <stdio.h>
        !            25: #include <string.h>
        !            26: 
        !            27: #include <isc/mutex.h>
        !            28: #include <isc/once.h>
        !            29: #include <isc/print.h>
        !            30: #include <isc/strerror.h>
        !            31: #include <isc/util.h>
        !            32: 
        !            33: #include "l_stdlib.h"          /* NTP local change */
        !            34: 
        !            35: #ifdef HAVE_STRERROR
        !            36: /*%
        !            37:  * We need to do this this way for profiled locks.
        !            38:  */
        !            39: static isc_mutex_t isc_strerror_lock;
        !            40: static void init_lock(void) {
        !            41:        RUNTIME_CHECK(isc_mutex_init(&isc_strerror_lock) == ISC_R_SUCCESS);
        !            42: }
        !            43: #else
        !            44: extern const char * const sys_errlist[];
        !            45: extern const int sys_nerr;
        !            46: #endif
        !            47: 
        !            48: void
        !            49: isc__strerror(int num, char *buf, size_t size) {
        !            50: #ifdef HAVE_STRERROR
        !            51:        char *msg;
        !            52:        unsigned int unum = (unsigned int)num;
        !            53:        static isc_once_t once = ISC_ONCE_INIT;
        !            54: 
        !            55:        REQUIRE(buf != NULL);
        !            56: 
        !            57:        RUNTIME_CHECK(isc_once_do(&once, init_lock) == ISC_R_SUCCESS);
        !            58: 
        !            59:        LOCK(&isc_strerror_lock);
        !            60:        msg = strerror(num);
        !            61:        if (msg != NULL)
        !            62:                snprintf(buf, size, "%s", msg);
        !            63:        else
        !            64:                snprintf(buf, size, "Unknown error: %u", unum);
        !            65:        UNLOCK(&isc_strerror_lock);
        !            66: #else
        !            67:        unsigned int unum = (unsigned int)num;
        !            68: 
        !            69:        REQUIRE(buf != NULL);
        !            70: 
        !            71:        if (num >= 0 && num < sys_nerr)
        !            72:                snprintf(buf, size, "%s", sys_errlist[num]);
        !            73:        else
        !            74:                snprintf(buf, size, "Unknown error: %u", unum);
        !            75: #endif
        !            76: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>