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>
33240415Smm#ifndef _KERNEL
34240415Smm#include <stdio.h>
35240415Smm#include <stdlib.h>
36240415Smm#endif
37240303Smm
38240303Smm#ifdef	__cplusplus
39240303Smmextern "C" {
40240303Smm#endif
41240303Smm
42240415Smm#ifdef _KERNEL
43240303Smmint assfail(const char *, const char *, int);
44240303Smmvoid assfail3(const char *, uintmax_t, const char *, uintmax_t, const char *,
45240303Smm    int);
46240415Smm#else	/* !defined(_KERNEL) */
47240303Smm
48240415Smm#ifndef HAVE_ASSFAIL
49240415Smmstatic __inline int
50240415Smm__assfail(const char *expr, const char *file, int line)
51240415Smm{
52240415Smm
53240415Smm	(void)fprintf(stderr, "Assertion failed: (%s), file %s, line %d.\n",
54240415Smm	    expr, file, line);
55240415Smm	abort();
56240415Smm	/* NOTREACHED */
57240415Smm	return (0);
58240415Smm}
59240415Smm#define assfail __assfail
60240415Smm#endif
61240415Smm
62240415Smm#ifndef HAVE_ASSFAIL3
63240415Smmstatic __inline void
64240415Smm__assfail3(const char *expr, uintmax_t lv, const char *op, uintmax_t rv,
65240415Smm    const char *file, int line) {
66240415Smm
67240415Smm	(void)fprintf(stderr,
68240415Smm	    "Assertion failed: %s (0x%jx %s 0x%jx), file %s, line %d.\n",
69240415Smm	    expr, lv, op, rv, file, line);
70240415Smm        abort();
71240415Smm        /* NOTREACHED */
72240415Smm}
73240415Smm#define assfail3 __assfail3
74240415Smm#endif
75240415Smm
76240415Smm#endif	/* !defined(_KERNEL) */
77240415Smm
78240303Smm#ifdef	__cplusplus
79240303Smm}
80240303Smm#endif
81240303Smm
82240303Smm#endif	/* _OPENSOLARIS_SYS_ASSFAIL_H_ */
83