//lint -e{818} void vtc_log(struct vtclog *vl, int lvl, const char *fmt, ...) { double tx; CHECK_OBJ_NOTNULL(vl, VTCLOG_MAGIC); tx = VTIM_mono() - t0; AZ(pthread_mutex_lock(&vl->mtx)); vl->act = 1; assert(lvl < (int)NLEAD); VSB_clear(vl->vsb); VSB_printf(vl->vsb, "%s %-4s %4.1f ", lead[lvl < 0 ? 1: lvl], vl->id, tx); va_list ap; va_start(ap, fmt); (void)VSB_vprintf(vl->vsb, fmt, ap); va_end(ap); VSB_putc(vl->vsb, '\n'); AZ(VSB_finish(vl->vsb)); vtc_log_emit(vl, lvl); VSB_clear(vl->vsb); vl->act = 0; AZ(pthread_mutex_unlock(&vl->mtx)); if (lvl > 0) return; if (lvl == 0) vtc_error = 1; if (pthread_self() != vtc_thread) pthread_exit(NULL); }
/* * Format the given arguments and append the resulting string to an vsb. */ int VSB_printf(struct vsb *s, const char *fmt, ...) { va_list ap; int result; va_start(ap, fmt); result = VSB_vprintf(s, fmt, ap); va_end(ap); return (result); }
static void vtc_leadinv(const struct vtclog *vl, int lvl, const char *fmt, va_list ap) { assert(lvl < (int)NLEAD); assert(lvl >= 0); VSB_printf(vl->vsb, "%s %-4s %4.1f ", lead[lvl < 0 ? 1: lvl], vl->id, vl->tx); if (fmt != NULL) (void)VSB_vprintf(vl->vsb, fmt, ap); }
/*lint -e{818} cli could be const */ void VCLI_Out(struct cli *cli, const char *fmt, ...) { va_list ap; va_start(ap, fmt); if (cli != NULL) (void)VSB_vprintf(cli->sb, fmt, ap); else (void)vfprintf(stdout, fmt, ap); va_end(ap); }
static struct expr * vcc_mk_expr(enum var_type fmt, const char *str, ...) { va_list ap; struct expr *e; e = vcc_new_expr(); e->fmt = fmt; va_start(ap, str); VSB_vprintf(e->vsb, str, ap); va_end(ap); AZ(VSB_finish(e->vsb)); return (e); }
/*lint -e{818} cli could be const */ void VCLI_Out(struct cli *cli, const char *fmt, ...) { va_list ap; va_start(ap, fmt); if (cli != NULL) { CHECK_OBJ_NOTNULL(cli, CLI_MAGIC); if (VSB_len(cli->sb) < *cli->limit) (void)VSB_vprintf(cli->sb, fmt, ap); else if (cli->result == CLIS_OK) cli->result = CLIS_TRUNCATED; } else { (void)vfprintf(stdout, fmt, ap); } va_end(ap); }
int mgt_cli_askchild(unsigned *status, char **resp, const char *fmt, ...) { int i, j; va_list ap; unsigned u; if (cli_buf == NULL) { cli_buf = VSB_new_auto(); AN(cli_buf); } else { VSB_clear(cli_buf); } if (resp != NULL) *resp = NULL; if (status != NULL) *status = 0; if (cli_i < 0 || cli_o < 0) { if (status != NULL) *status = CLIS_CANT; return (CLIS_CANT); } va_start(ap, fmt); AZ(VSB_vprintf(cli_buf, fmt, ap)); va_end(ap); AZ(VSB_finish(cli_buf)); i = VSB_len(cli_buf); assert(i > 0 && VSB_data(cli_buf)[i - 1] == '\n'); j = write(cli_o, VSB_data(cli_buf), i); if (j != i) { if (status != NULL) *status = CLIS_COMMS; if (resp != NULL) *resp = strdup("CLI communication error"); MCH_Cli_Fail(); return (CLIS_COMMS); } if (VCLI_ReadResult(cli_i, &u, resp, mgt_param.cli_timeout)) MCH_Cli_Fail(); if (status != NULL) *status = u; return (u == CLIS_OK ? 0 : u); }
int vsl_diag(struct VSL_data *vsl, const char *fmt, ...) { va_list ap; CHECK_OBJ_NOTNULL(vsl, VSL_MAGIC); AN(fmt); if (vsl->diag == NULL) vsl->diag = VSB_new_auto(); AN(vsl->diag); VSB_clear(vsl->diag); va_start(ap, fmt); VSB_vprintf(vsl->diag, fmt, ap); va_end(ap); AZ(VSB_finish(vsl->diag)); return (-1); }
static const char * ban_error(struct ban_proto *bp, const char *fmt, ...) { va_list ap; CHECK_OBJ_NOTNULL(bp, BAN_PROTO_MAGIC); AN(bp->vsb); /* First error is sticky */ if (bp->err == NULL) { if (fmt == ban_build_err_no_mem) { bp->err = ban_build_err_no_mem; } else { /* Record the error message in the vsb */ VSB_clear(bp->vsb); va_start(ap, fmt); (void)VSB_vprintf(bp->vsb, fmt, ap); va_end(ap); AZ(VSB_finish(bp->vsb)); bp->err = VSB_data(bp->vsb); } } return (bp->err); }
VCL_BACKEND VRT_AddDirector(VRT_CTX, const struct vdi_methods *m, void *priv, const char *fmt, ...) { struct vsb *vsb; struct vcl *vcl; struct vcldir *vdir; struct director *d; va_list ap; int i; CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(m, VDI_METHODS_MAGIC); AN(fmt); vcl = ctx->vcl; CHECK_OBJ_NOTNULL(vcl, VCL_MAGIC); AZ(errno=pthread_rwlock_rdlock(&vcl->temp_rwl)); if (vcl->temp == VCL_TEMP_COOLING) { AZ(errno=pthread_rwlock_unlock(&vcl->temp_rwl)); return (NULL); } ALLOC_OBJ(d, DIRECTOR_MAGIC); AN(d); ALLOC_OBJ(vdir, VCLDIR_MAGIC); AN(vdir); vdir->dir = d; d->vdir = vdir; vdir->methods = m; d->priv = priv; vsb = VSB_new_auto(); AN(vsb); VSB_printf(vsb, "%s.", VCL_Name(vcl)); i = VSB_len(vsb); va_start(ap, fmt); VSB_vprintf(vsb, fmt, ap); va_end(ap); AZ(VSB_finish(vsb)); REPLACE((vdir->cli_name), VSB_data(vsb)); VSB_destroy(&vsb); d->vcl_name = vdir->cli_name + i; vdir->vcl = vcl; d->sick = 0; vdir->admin_health = VDI_AH_PROBE; vdir->health_changed = VTIM_real(); Lck_Lock(&vcl_mtx); VTAILQ_INSERT_TAIL(&vcl->director_list, vdir, list); Lck_Unlock(&vcl_mtx); if (VCL_WARM(vcl)) /* Only when adding backend to already warm VCL */ VDI_Event(d, VCL_EVENT_WARM); else if (vcl->temp != VCL_TEMP_INIT) WRONG("Dynamic Backends can only be added to warm VCLs"); AZ(errno=pthread_rwlock_unlock(&vcl->temp_rwl)); return (d); }