DUK_INTERNAL void duk_default_panic_handler(duk_errcode_t code, const char *msg) { #ifdef DUK_USE_FILE_IO DUK_FPRINTF(DUK_STDERR, "PANIC %ld: %s (" #if defined(DUK_USE_PANIC_ABORT) "calling abort" #elif defined(DUK_USE_PANIC_EXIT) "calling exit" #elif defined(DUK_USE_PANIC_SEGFAULT) "segfaulting on purpose" #else #error no DUK_USE_PANIC_xxx macro defined #endif ")\n", (long) code, (const char *) (msg ? msg : "null")); DUK_FFLUSH(DUK_STDERR); #else /* omit print */ DUK_UNREF(code); DUK_UNREF(msg); #endif #if defined(DUK_USE_PANIC_ABORT) DUK_ABORT(); #elif defined(DUK_USE_PANIC_EXIT) DUK_EXIT(-1); #elif defined(DUK_USE_PANIC_SEGFAULT) /* exit() afterwards to satisfy "noreturn" */ DUK_CAUSE_SEGFAULT(); /* SCANBUILD: "Dereference of null pointer", normal */ DUK_EXIT(-1); #else #error no DUK_USE_PANIC_xxx macro defined #endif DUK_UNREACHABLE(); }
void duk_default_panic_handler(int code, const char *msg) { #ifdef DUK_USE_FILE_IO DUK_FPRINTF(DUK_STDERR, "PANIC %d: %s (" #if defined(DUK_USE_PANIC_ABORT) "calling abort" #elif defined(DUK_USE_PANIC_EXIT) "calling exit" #elif defined(DUK_USE_PANIC_SEGFAULT) "segfaulting on purpose" #else #error no DUK_USE_PANIC_xxx macro defined #endif ")\n", code, msg ? msg : "null"); DUK_FFLUSH(DUK_STDERR); #else /* omit print */ #endif #if defined(DUK_USE_PANIC_ABORT) abort(); #elif defined(DUK_USE_PANIC_EXIT) exit(-1); #elif defined(DUK_USE_PANIC_SEGFAULT) /* exit() afterwards to satisfy "noreturn" */ DUK_CAUSE_SEGFAULT(); exit(-1); #else #error no DUK_USE_PANIC_xxx macro defined #endif DUK_UNREACHABLE(); }
DUK_INTERNAL void duk_default_fatal_handler(duk_context *ctx, duk_errcode_t code, const char *msg) { DUK_UNREF(ctx); #ifdef DUK_USE_FILE_IO DUK_FPRINTF(DUK_STDERR, "FATAL %ld: %s\n", (long) code, (const char *) (msg ? msg : "null")); DUK_FFLUSH(DUK_STDERR); #else /* omit print */ #endif DUK_D(DUK_DPRINT("default fatal handler called, code %ld -> calling DUK_PANIC()", (long) code)); DUK_PANIC(code, msg); DUK_UNREACHABLE(); }
/* Default function to write a formatted log line. Writes to stderr, * appending a newline to the log line. * * The argument is a buffer whose visible size contains the log message. * This function should avoid coercing the buffer to a string to avoid * string table traffic. */ DUK_INTERNAL duk_ret_t duk_bi_logger_prototype_raw(duk_context *ctx) { const char *data; duk_size_t data_len; DUK_UNREF(ctx); DUK_UNREF(data); DUK_UNREF(data_len); #ifdef DUK_USE_FILE_IO data = (const char *) duk_require_buffer(ctx, 0, &data_len); DUK_FWRITE((const void *) data, 1, data_len, DUK_STDERR); DUK_FPUTC((int) '\n', DUK_STDERR); DUK_FFLUSH(DUK_STDERR); #else /* nop */ #endif return 0; }