\"      $NetBSD: _DIAGASSERT.3,v 1.8 2008/04/30 13:10:53 martin Exp $
\"
\" Copyright (c) 2001 The NetBSD Foundation, Inc.
\" All rights reserved.
\"
\" This code is derived from software contributed to The NetBSD Foundation
\" by Luke Mewburn.
\"
\" Redistribution and use in source and binary forms, with or without
\" modification, are permitted provided that the following conditions
\" are met:
\" 1. Redistributions of source code must retain the above copyright
\"    notice, this list of conditions and the following disclaimer.
\" 2. Redistributions in binary form must reproduce the above copyright
\"    notice, this list of conditions and the following disclaimer in the
\"    documentation and/or other materials provided with the distribution.
\"
\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
\" POSSIBILITY OF SUCH DAMAGE.
\"
Dd January 22, 2007
Dt _DIAGASSERT 3
Os
Sh NAME
Nm _DIAGASSERT
Nd expression verification macro
Sh SYNOPSIS
In assert.h
Fn _DIAGASSERT expression
Sh DESCRIPTION
The
Fn _DIAGASSERT
macro tests the given
Ar expression
and if it is false, one or more of the following may occur:
Bl -bullet -offset indent
It
a diagnostic message may be logged to the system logger with
Xr syslog 3 .
This is default behaviour.
It
a diagnostic message may be printed to the
Dv stderr
stream.
It
the calling process will be terminated by calling
Xr abort 3 .
El
Pp
This behaviour may be changed by setting the
Ev LIBC_DIAGASSERT
environment variable (see below).
Pp
The diagnostic message consists of the text of the expression,
the name of the source file, the line number and the enclosing
function.
Pp
If
Ar expression
is true,
the
Fn _DIAGASSERT
macro does nothing.
Pp
The
Fn _DIAGASSERT
macro is not compiled in by default, and will only be compiled in with the
Xr cc 1
option
Fl D_DIAGNOSTIC .
Pp
This macro is used in the various system libraries such as the
Lb libc
to ensure that various library calls are invoked with valid arguments.
Sh ENVIRONMENT
The
Ev LIBC_DIAGASSERT
environment variable can be used to modify the default behaviour of
logging the assertion to the system logger.
Pp
Ev LIBC_DIAGASSERT
may be set to one or more of the following characters:
Bl -tag -width xxx -offset indent
It a
Xr abort 3
once any assertion messages have been logged and/or printed.
It A
Opposite of
Dq a .
It e
Print the assertion message to the
Dv stderr
stream.
It E
Opposite of
Dq e .
It l
Log the assertion message with
Xr syslog 3
to the facility
Dv user.debug .
It L
Opposite of
Dq l .
El
Sh DIAGNOSTICS
The diagnostic message has the following format:
Bd -literal -offset indent
"assertion \e"%s\e" failed: file \e"%s\e", line %d, function \e"%s\e"\en",
           "expression", __FILE__, __LINE__, __func__
Ed
Sh SEE ALSO
Xr cc 1 ,
Xr abort 3 ,
Xr assert 3 ,
Xr syslog 3
Sh HISTORY
The
Nm _DIAGASSERT
macro appeared in
Nx 1.5 .