void vfail(const char *format, va_list alist) { extern const char *volatile _mdb_abort_str; static char buf[256]; static int nfail; if (_mdb_abort_str == NULL) { _mdb_abort_str = buf; /* Do this first so we don't recurse */ (void) mdb_iob_vsnprintf(buf, sizeof (buf), format, alist); nfail = 1; } /* * We'll try to print failure messages twice. Any more than that, * and we're probably hitting an assertion or some other problem in * the printing routines, and will recurse until we run out of stack. */ if (nfail++ < 3) { mdb_iob_printf(mdb.m_err, "%s ABORT: ", mdb.m_pname); mdb_iob_vprintf(mdb.m_err, format, alist); mdb_iob_flush(mdb.m_err); (void) mdb_signal_blockall(); (void) mdb_signal_raise(SIGABRT); (void) mdb_signal_unblock(SIGABRT); } exit(1); }
void mdb_printf(const char *format, ...) { va_list alist; va_start(alist, format); mdb_iob_vprintf(mdb.m_out, format, alist); va_end(alist); }
void mdb_dvprintf(uint_t mode, const char *format, va_list alist) { if ((mdb.m_debug & mode) == mode && format != NULL && *format != '\0' && mdb.m_err != NULL) { mdb_iob_puts(mdb.m_err, dbg_prefix); mdb_iob_vprintf(mdb.m_err, format, alist); if (format[strlen(format) - 1] != '\n') mdb_iob_nl(mdb.m_err); } }
void vwarn(const char *format, va_list alist) { int err = errno; mdb_iob_printf(mdb.m_err, "%s: ", mdb.m_pname); mdb_iob_vprintf(mdb.m_err, format, alist); if (strchr(format, '\n') == NULL) mdb_iob_printf(mdb.m_err, ": %s\n", mdb_strerror(err)); }
/*PRINTFLIKE2*/ void mdb_dprintf(uint_t mode, const char *format, ...) { if ((mdb.m_debug & mode) == mode && mdb.m_err != NULL) { va_list alist; mdb_iob_puts(mdb.m_err, dbg_prefix); va_start(alist, format); mdb_iob_vprintf(mdb.m_err, format, alist); va_end(alist); } }