[BACK]Return to assertions.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / isc

Annotation of src/lib/libc/isc/assertions.c, Revision 1.7

1.7     ! joerg       1: /*     $NetBSD: assertions.c,v 1.6 2009/04/12 17:07:17 christos Exp $  */
1.1       christos    2:
                      3: /*
1.6       christos    4:  * Copyright (C) 2004, 2005, 2008  Internet Systems Consortium, Inc. ("ISC")
                      5:  * Copyright (C) 1997, 1999, 2001  Internet Software Consortium.
1.1       christos    6:  *
1.6       christos    7:  * Permission to use, copy, modify, and/or distribute this software for any
1.1       christos    8:  * purpose with or without fee is hereby granted, provided that the above
                      9:  * copyright notice and this permission notice appear in all copies.
                     10:  *
1.6       christos   11:  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
                     12:  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
                     13:  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
                     14:  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
                     15:  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
                     16:  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
                     17:  * PERFORMANCE OF THIS SOFTWARE.
1.1       christos   18:  */
                     19:
1.2       christos   20: #include <sys/cdefs.h>
                     21: #if !defined(LINT) && !defined(CODECENTER) && !defined(lint)
                     22: #ifdef notdef
1.6       christos   23: static const char rcsid[] = "Id: assertions.c,v 1.5 2008/11/14 02:36:51 marka Exp";
1.2       christos   24: #else
1.7     ! joerg      25: __RCSID("$NetBSD: assertions.c,v 1.6 2009/04/12 17:07:17 christos Exp $");
1.2       christos   26: #endif
1.1       christos   27: #endif
                     28:
                     29: #include "port_before.h"
                     30:
                     31: #include <errno.h>
                     32: #include <stdio.h>
                     33: #include <stdlib.h>
                     34: #include <string.h>
                     35:
                     36: #include <isc/assertions.h>
                     37:
                     38: #include "port_after.h"
                     39:
                     40: /*
                     41:  * Forward.
                     42:  */
                     43:
1.7     ! joerg      44: __dead static void default_assertion_failed(const char *, int, assertion_type,
1.1       christos   45:                                     const char *, int);
                     46:
                     47: /*
                     48:  * Public.
                     49:  */
                     50:
                     51: assertion_failure_callback __assertion_failed = default_assertion_failed;
                     52:
                     53: void
                     54: set_assertion_failure_callback(assertion_failure_callback f) {
                     55:        if (f == NULL)
                     56:                __assertion_failed = default_assertion_failed;
                     57:        else
                     58:                __assertion_failed = f;
                     59: }
                     60:
                     61: const char *
                     62: assertion_type_to_text(assertion_type type) {
                     63:        const char *result;
                     64:
                     65:        switch (type) {
                     66:        case assert_require:
                     67:                result = "REQUIRE";
                     68:                break;
                     69:        case assert_ensure:
                     70:                result = "ENSURE";
                     71:                break;
                     72:        case assert_insist:
                     73:                result = "INSIST";
                     74:                break;
                     75:        case assert_invariant:
                     76:                result = "INVARIANT";
                     77:                break;
                     78:        default:
                     79:                result = NULL;
                     80:        }
                     81:        return (result);
                     82: }
                     83:
                     84: /*
                     85:  * Private.
                     86:  */
                     87:
1.6       christos   88: /* coverity[+kill] */
1.1       christos   89: static void
                     90: default_assertion_failed(const char *file, int line, assertion_type type,
                     91:                         const char *cond, int print_errno)
                     92: {
                     93:        fprintf(stderr, "%s:%d: %s(%s)%s%s failed.\n",
                     94:                file, line, assertion_type_to_text(type), cond,
                     95:                (print_errno) ? ": " : "",
                     96:                (print_errno) ? strerror(errno) : "");
                     97:        abort();
                     98:        /* NOTREACHED */
                     99: }
1.3       christos  100:
                    101: /*! \file */

CVSweb <webmaster@jp.NetBSD.org>