/* external test: handle -> unit = "stub_xtl_test" */ CAMLprim value stub_xtl_test(value handle) { unsigned long l; CAMLparam1(handle); xtl_log(XTL, XTL_DEBUG, -1, "debug", "%s -- debug", __func__); xtl_log(XTL, XTL_INFO, -1, "test", "%s -- test 1", __func__); xtl_log(XTL, XTL_INFO, ENOSYS, "test errno", "%s -- test 2", __func__); xtl_log(XTL, XTL_CRITICAL, -1, "critical", "%s -- critical", __func__); for (l = 0UL; l<=100UL; l += 10UL) { xtl_progress(XTL, "progress", "testing", l, 100UL); usleep(10000); } CAMLreturn(Val_unit); }
static void complete(int retval) { int errnoval = retval ? errno : 0; /* suppress irrelevant errnos */ xtl_log(&logger,XTL_DEBUG,errnoval,program,"complete r=%d",retval); helper_stub_complete(retval,errnoval,0); xc_interface_close(xch); exit(0); }
void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file, int line, const char *func, const char *fmt, va_list ap) { /* WARNING this function may not call any libxl-provided * memory allocation function, as those may * call libxl__alloc_failed which calls libxl__logv. */ char *enomem = "[out of memory formatting log message]"; char *base = NULL; int rc, esave; char fileline[256]; esave = errno; rc = vasprintf(&base, fmt, ap); if (rc<0) { base = enomem; goto x; } fileline[0] = 0; if (file) snprintf(fileline, sizeof(fileline), "%s:%d",file,line); fileline[sizeof(fileline)-1] = 0; x: xtl_log(ctx->lg, msglevel, errnoval, "libxl", "%s%s%s%s" "%s", fileline, func&&file?":":"", func?func:"", func||file?": ":"", base); if (base != enomem) free(base); errno = esave; }
void libxl__srm_callout_callback_log(uint32_t level, uint32_t errnoval, const char *context, const char *formatted, void *user) { libxl__save_helper_state *shs = user; STATE_AO_GC(shs->ao); xtl_log(CTX->lg, level, errnoval, context, "%s", formatted); }
void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file, int line, const char *func, char *fmt, va_list ap) { char *enomem = "[out of memory formatting log message]"; char *base = NULL; int rc, esave; char fileline[256]; esave = errno; rc = vasprintf(&base, fmt, ap); if (rc<0) { base = enomem; goto x; } fileline[0] = 0; if (file) snprintf(fileline, sizeof(fileline), "%s:%d",file,line); fileline[sizeof(fileline)-1] = 0; x: xtl_log(ctx->lg, msglevel, errnoval, "libxl", "%s%s%s%s" "%s", fileline, func&&file?":":"", func?func:"", func||file?" ":"", base); if (base != enomem) free(base); errno = esave; }
void xc_reportv(xc_interface *xch, xentoollog_logger *lg, xentoollog_level level, int code, const char *fmt, va_list args) { int saved_errno = errno; char msgbuf[XC_MAX_ERROR_MSG_LEN]; char *msg; /* Strip newlines from messages. * XXX really the messages themselves should have the newlines removed. */ char fmt_nonewline[512]; int fmt_l; fmt_l = strlen(fmt); if (fmt_l && fmt[fmt_l-1]=='\n' && fmt_l < sizeof(fmt_nonewline)) { memcpy(fmt_nonewline, fmt, fmt_l-1); fmt_nonewline[fmt_l-1] = 0; fmt = fmt_nonewline; } if ( level >= XTL_ERROR ) { msg = xch->last_error.message; xch->last_error.code = code; } else { msg = msgbuf; } vsnprintf(msg, XC_MAX_ERROR_MSG_LEN-1, fmt, args); msg[XC_MAX_ERROR_MSG_LEN-1] = '\0'; xtl_log(lg, level, -1, "xc", "%s" "%s%s", msg, code?": ":"", code ? xc_error_code_to_desc(code) : ""); errno = saved_errno; }
static void startup(const char *op) { logger = (xentoollog_logger*)createlogger_tellparent(); if (!logger) { fprintf(stderr, "%s: cannot initialise logger\n", program); exit(-1); } xtl_log(logger,XTL_DEBUG,0,program,"starting %s",op); xch = xc_interface_open(logger,logger,0); if (!xch) fail(errno,"xc_interface_open failed"); }
static void startup(const char *op) { xtl_log(&logger,XTL_DEBUG,0,program,"starting %s",op); xch = xc_interface_open(&logger,&logger,0); if (!xch) fail(errno,"xc_interface_open failed"); }