1 /** @file
2   The implementation of the __assert function used internally by the assert macro
3   to insert diagnostic messages into code.
4 
5   Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
6   This program and the accompanying materials are licensed and made available under
7   the terms and conditions of the BSD License that accompanies this distribution.
8   The full text of the license may be found at
9   http://opensource.org/licenses/bsd-license.
10 
11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 **/
14 #include  <LibConfig.h>
15 #include  <sys/EfiCdefs.h>
16 
17 #include  <stdio.h>
18 #include  <stdlib.h>
19 
20 /** Internal helper function for the assert macro.
21     The __assert function prints a diagnostic message then exits the
22     currently running application.
23 
24     This function should NEVER be called directly.
25 
26     Some pre-processors do not provide the __func__ identifier.  When that is
27     the case, __func__ will be NULL.  This function accounts for this and
28     will modify the diagnostic message appropriately.
29 
30 
31     @param[in]    file          The name of the file containing the assert.
32     @param[in]    func          The name of the function containing the assert
33                                 or NULL.
34     @param[in]    line          The line number the assert is located on.
35     @param[in]    failedexpr    A literal representation of the assert's expression.
36 
37     @return       The __assert function will never return.  It terminates execution
38                   of the current application and returns to the environment that
39                   the application was launched from.
40 **/
41 void
__assert(IN const char * file,IN const char * func,IN int line,IN const char * failedexpr)42 __assert(
43   IN  const char *file,
44   IN  const char *func,
45   IN  int         line,
46   IN  const char *failedexpr
47   )
48 {
49   if (func == NULL)
50     printf("Assertion failed: (%s), file %s, line %d.\n",
51                 failedexpr, file, line);
52   else
53     printf("Assertion failed: (%s), file %s, function %s, line %d.\n",
54                 failedexpr, file, func, line);
55   abort();
56   /* NOTREACHED */
57 }
58