1 /* Copyright (C) 2008 The Android Open Source Project 2 ** 3 ** This software is licensed under the terms of the GNU General Public 4 ** License version 2, as published by the Free Software Foundation, and 5 ** may be copied, distributed, and modified under those terms. 6 ** 7 ** This program is distributed in the hope that it will be useful, 8 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 9 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 ** GNU General Public License for more details. 11 */ 12 #include "android/utils/panic.h" 13 #include <stdio.h> 14 #include <stdlib.h> 15 16 static void __attribute__((noreturn)) 17 _android_panic_defaultHandler( const char* fmt, va_list args ) 18 { 19 fprintf(stderr, "PANIC: "); 20 vfprintf(stderr, fmt, args); 21 exit(1); 22 } 23 24 static APanicHandlerFunc _panicHandler = _android_panic_defaultHandler; 25 26 void android_panic( const char* fmt, ... ) 27 { 28 va_list args; 29 va_start(args, fmt); 30 android_vpanic(fmt, args); 31 va_end(args); 32 } 33 34 /* Variant of android_vpanic which take va_list formating arguments */ 35 void android_vpanic( const char* fmt, va_list args ) 36 { 37 _panicHandler(fmt, args); 38 } 39 40 void android_panic_registerHandler( APanicHandlerFunc handler ) 41 { 42 if (handler == NULL) 43 android_panic("Passing NULL to %s", __FUNCTION__); 44 45 _panicHandler = handler; 46 } 47