1240303Smm/*-
2240303Smm * Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org>
3240303Smm * All rights reserved.
4240303Smm *
5240303Smm * Redistribution and use in source and binary forms, with or without
6240303Smm * modification, are permitted provided that the following conditions
7240303Smm * are met:
8240303Smm * 1. Redistributions of source code must retain the above copyright
9240303Smm *    notice, this list of conditions and the following disclaimer.
10240303Smm * 2. Redistributions in binary form must reproduce the above copyright
11240303Smm *    notice, this list of conditions and the following disclaimer in the
12240303Smm *    documentation and/or other materials provided with the distribution.
13240303Smm *
14240303Smm * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
15240303Smm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16240303Smm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17240303Smm * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
18240303Smm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19240303Smm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20240303Smm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21240303Smm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22240303Smm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23240303Smm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24240303Smm * SUCH DAMAGE.
25240303Smm *
26240303Smm * $FreeBSD$
27240303Smm */
28240303Smm
29240303Smm#ifndef _OPENSOLARIS_SYS_ASSFAIL_H_
30240303Smm#define	_OPENSOLARIS_SYS_ASSFAIL_H_
31240303Smm
32240303Smm#include <sys/types.h>
33243674Smm#ifndef _KERNEL
34243674Smm#include <stdio.h>
35243674Smm#include <stdlib.h>
36243674Smm#endif
37240303Smm
38240303Smm#ifdef	__cplusplus
39240303Smmextern "C" {
40240303Smm#endif
41240303Smm
42243674Smm#ifdef _KERNEL
43240303Smmint assfail(const char *, const char *, int);
44240303Smmvoid assfail3(const char *, uintmax_t, const char *, uintmax_t, const char *,
45240303Smm    int);
46243674Smm#else	/* !defined(_KERNEL) */
47240303Smm
48243674Smm#ifndef HAVE_ASSFAIL
49243674Smmstatic __inline int
50243674Smm__assfail(const char *expr, const char *file, int line)
51243674Smm{
52243674Smm
53243674Smm	(void)fprintf(stderr, "Assertion failed: (%s), file %s, line %d.\n",
54243674Smm	    expr, file, line);
55243674Smm	abort();
56243674Smm	/* NOTREACHED */
57243674Smm	return (0);
58243674Smm}
59243674Smm#define assfail __assfail
60243674Smm#endif
61243674Smm
62243674Smm#ifndef HAVE_ASSFAIL3
63243674Smmstatic __inline void
64243674Smm__assfail3(const char *expr, uintmax_t lv, const char *op, uintmax_t rv,
65243674Smm    const char *file, int line) {
66243674Smm
67243674Smm	(void)fprintf(stderr,
68243674Smm	    "Assertion failed: %s (0x%jx %s 0x%jx), file %s, line %d.\n",
69243674Smm	    expr, lv, op, rv, file, line);
70243674Smm        abort();
71243674Smm        /* NOTREACHED */
72243674Smm}
73243674Smm#define assfail3 __assfail3
74243674Smm#endif
75243674Smm
76243674Smm#endif	/* !defined(_KERNEL) */
77243674Smm
78240303Smm#ifdef	__cplusplus
79240303Smm}
80240303Smm#endif
81240303Smm
82240303Smm#endif	/* _OPENSOLARIS_SYS_ASSFAIL_H_ */
83