static void print_integer(FILE *fp, int val, int base) { switch (base) { case 8: fprintf(fp, "0%o", val); break; case 10: fprintf(fp, "%d", val); break; case 16: fprintf(fp, "0x%x", val); break; default: abort2("bad base", 0, NULL); break; } }
static void pan_ic(const char *func, const char *file, int line, const char *cond, int err, int xxx) { const char *q; const struct sess *sp; AZ(pthread_mutex_lock(&panicstr_mtx)); /* Won't be released, we're going to die anyway */ switch(xxx) { case 3: VSB_printf(vsp, "Wrong turn at %s:%d:\n%s\n", file, line, cond); break; case 2: VSB_printf(vsp, "Panic from VCL:\n %s\n", cond); break; case 1: VSB_printf(vsp, "Missing errorhandling code in %s(), %s line %d:\n" " Condition(%s) not true.", func, file, line, cond); break; default: case 0: VSB_printf(vsp, "Assert error in %s(), %s line %d:\n" " Condition(%s) not true.\n", func, file, line, cond); break; } if (err) VSB_printf(vsp, "errno = %d (%s)\n", err, strerror(err)); q = THR_GetName(); if (q != NULL) VSB_printf(vsp, "thread = (%s)\n", q); VSB_printf(vsp, "ident = %s,%s\n", VSB_data(vident) + 1, WAIT_GetName()); pan_backtrace(); if (!(cache_param->diag_bitmap & 0x2000)) { sp = THR_GetSession(); if (sp != NULL) pan_sess(sp); } VSB_printf(vsp, "\n"); VSB_bcat(vsp, "", 1); /* NUL termination */ if (cache_param->diag_bitmap & 0x4000) (void)fputs(VSM_head->panicstr, stderr); #ifdef HAVE_ABORT2 if (cache_param->diag_bitmap & 0x8000) { void *arg[1]; char *p; for (p = VSM_head->panicstr; *p; p++) if (*p == '\n') *p = ' '; arg[0] = VSM_head->panicstr; abort2(VSM_head->panicstr, 1, arg); } #endif if (cache_param->diag_bitmap & 0x1000) exit(4); else abort(); }