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

Annotation of src/lib/libc/gen/assert.c, Revision 1.12

1.12    ! lukem       1: /*     $NetBSD: assert.c,v 1.11 2000/12/19 21:17:16 christos Exp $     */
1.6       cgd         2:
1.5       cgd         3: /*-
                      4:  * Copyright (c) 1992, 1993
                      5:  *     The Regents of the University of California.  All rights reserved.
1.1       jtc         6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
                     15:  * 3. All advertising materials mentioning features or use of this software
                     16:  *    must display the following acknowledgement:
1.5       cgd        17:  *     This product includes software developed by the University of
                     18:  *     California, Berkeley and its contributors.
                     19:  * 4. Neither the name of the University nor the names of its contributors
                     20:  *    may be used to endorse or promote products derived from this software
                     21:  *    without specific prior written permission.
1.1       jtc        22:  *
1.5       cgd        23:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     24:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     25:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     26:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     27:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     28:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     29:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     30:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     31:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     32:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     33:  * SUCH DAMAGE.
1.1       jtc        34:  */
                     35:
1.7       christos   36: #include <sys/cdefs.h>
1.2       mycroft    37: #if defined(LIBC_SCCS) && !defined(lint)
1.6       cgd        38: #if 0
                     39: static char sccsid[] = "@(#)assert.c   8.1 (Berkeley) 6/4/93";
                     40: #else
1.12    ! lukem      41: __RCSID("$NetBSD: assert.c,v 1.11 2000/12/19 21:17:16 christos Exp $");
1.6       cgd        42: #endif
1.2       mycroft    43: #endif /* LIBC_SCCS and not lint */
                     44:
1.5       cgd        45: #include <sys/types.h>
1.8       lukem      46:
1.5       cgd        47: #include <assert.h>
1.1       jtc        48: #include <stdio.h>
                     49: #include <stdlib.h>
1.8       lukem      50: #include <syslog.h>
1.1       jtc        51:
1.9       christos   52: extern char *__progname;
                     53:
1.1       jtc        54: void
1.10      kleink     55: __assert13(file, line, function, failedexpr)
                     56:        const char *file, *function, *failedexpr;
                     57:        int line;
                     58: {
1.12    ! lukem      59:
1.10      kleink     60:        (void)fprintf(stderr,
                     61:            "assertion \"%s\" failed: file \"%s\", line %d%s%s%s\n",
                     62:            failedexpr, file, line,
                     63:            function ? ", function \"" : "",
                     64:            function ? function : "",
                     65:            function ? "\"" : "");
                     66:        abort();
                     67:        /* NOTREACHED */
                     68: }
                     69:
                     70: void
1.5       cgd        71: __assert(file, line, failedexpr)
                     72:        const char *file, *failedexpr;
1.1       jtc        73:        int line;
                     74: {
1.12    ! lukem      75:
        !            76:        __assert13(file, line, NULL, failedexpr);
1.5       cgd        77:        /* NOTREACHED */
1.10      kleink     78: }
                     79:
1.12    ! lukem      80:
        !            81: enum {
        !            82:        DIAGASSERT_ABORT =      1<<0,
        !            83:        DIAGASSERT_STDERR =     1<<1,
        !            84:        DIAGASSERT_SYSLOG =     1<<2
        !            85: };
        !            86:
        !            87: static int     diagassert_flags = -1;
        !            88:
1.10      kleink     89: void
                     90: __diagassert13(file, line, function, failedexpr)
                     91:        const char *file, *function, *failedexpr;
                     92:        int line;
                     93: {
1.12    ! lukem      94:        char buf[1024];
        !            95:
        !            96:        if (diagassert_flags == -1) {
        !            97:                char *p;
        !            98:
        !            99:                diagassert_flags = DIAGASSERT_SYSLOG;
        !           100:
        !           101:                for (p = getenv("LIBC_DIAGASSERT"); p && *p; p++) {
        !           102:                        switch (*p) {
        !           103:                        case 'a':
        !           104:                                diagassert_flags |= DIAGASSERT_ABORT;
        !           105:                                break;
        !           106:                        case 'A':
        !           107:                                diagassert_flags &= ~DIAGASSERT_ABORT;
        !           108:                                break;
        !           109:                        case 'e':
        !           110:                                diagassert_flags |= DIAGASSERT_STDERR;
        !           111:                                break;
        !           112:                        case 'E':
        !           113:                                diagassert_flags &= ~DIAGASSERT_STDERR;
        !           114:                                break;
        !           115:                        case 'l':
        !           116:                                diagassert_flags |= DIAGASSERT_SYSLOG;
        !           117:                                break;
        !           118:                        case 'L':
        !           119:                                diagassert_flags &= ~DIAGASSERT_SYSLOG;
        !           120:                                break;
        !           121:                        }
        !           122:                }
        !           123:        }
        !           124:
        !           125:        snprintf(buf, sizeof(buf),
1.10      kleink    126:            "assertion \"%s\" failed: file \"%s\", line %d%s%s%s",
                    127:            failedexpr, file, line,
                    128:            function ? ", function \"" : "",
                    129:            function ? function : "",
                    130:            function ? "\"" : "");
1.12    ! lukem     131:        if (diagassert_flags & DIAGASSERT_STDERR)
        !           132:                (void)fprintf(stderr, "%s: %s\n", __progname, buf);
        !           133:        if (diagassert_flags & DIAGASSERT_SYSLOG)
        !           134:                syslog(LOG_DEBUG | LOG_USER, "%s", buf);
        !           135:        if (diagassert_flags & DIAGASSERT_ABORT)
        !           136:                abort();
1.8       lukem     137: }
                    138:
                    139: void
                    140: __diagassert(file, line, failedexpr)
                    141:        const char *file, *failedexpr;
                    142:        int line;
                    143: {
1.12    ! lukem     144:
        !           145:        __diagassert13(file, line, NULL, failedexpr);
1.1       jtc       146: }

CVSweb <webmaster@jp.NetBSD.org>