void BKE_reports_prependf(ReportList *reports, const char *_prepend, ...) { Report *report; DynStr *ds; va_list args; const char *prepend = TIP_(_prepend); if (!reports) return; for (report = reports->list.first; report; report = report->next) { ds = BLI_dynstr_new(); va_start(args, _prepend); BLI_dynstr_vappendf(ds, prepend, args); va_end(args); BLI_dynstr_append(ds, report->message); MEM_freeN((void *)report->message); report->message = BLI_dynstr_get_cstring(ds); report->len = BLI_dynstr_get_len(ds); BLI_dynstr_free(ds); } }
void BKE_reportf(ReportList *reports, ReportType type, const char *format, ...) { DynStr *ds; Report *report; va_list args; if (G.background || !reports || ((reports->flag & RPT_PRINT) && (type >= reports->printlevel))) { va_start(args, format); vprintf(format, args); va_end(args); fprintf(stdout, "\n"); /* otherise each report needs to include a \n */ fflush(stdout); /* this ensures the message is printed before a crash */ } if (reports && (reports->flag & RPT_STORE) && (type >= reports->storelevel)) { report= MEM_callocN(sizeof(Report), "Report"); ds= BLI_dynstr_new(); va_start(args, format); BLI_dynstr_vappendf(ds, format, args); va_end(args); report->message= BLI_dynstr_get_cstring(ds); report->len= BLI_dynstr_get_len(ds); BLI_dynstr_free(ds); report->type= type; report->typestr= report_type_str(type); BLI_addtail(&reports->list, report); } }
char *BLI_sprintfN(const char *format, ...) { DynStr *ds; va_list arg; char *n; va_start(arg, format); ds= BLI_dynstr_new(); BLI_dynstr_vappendf(ds, format, arg); n= BLI_dynstr_get_cstring(ds); BLI_dynstr_free(ds); va_end(arg); return n; }