36 return RPT_(
"Operator");
38 return RPT_(
"Property");
40 return RPT_(
"Warning");
44 return RPT_(
"Invalid Input Error");
46 return RPT_(
"Invalid Context Error");
48 return RPT_(
"Out Of Memory Error");
50 return RPT_(
"Undefined Type");
66 reports->
lock = MEM_new<std::mutex>(__func__);
77 MEM_delete(reports->
lock);
78 reports->
lock =
nullptr;
83 Report *report, *report_next;
89 std::scoped_lock
lock(*reports->
lock);
94 report_next = report->
next;
105 reports->
lock->lock();
110 reports->
lock->unlock();
120 std::scoped_lock
lock(*reports_src->
lock, *reports_dst->
lock);
129 const char *message =
RPT_(_message);
137 std::scoped_lock
lock(*reports->
lock);
144 len = strlen(message);
145 message_alloc =
static_cast<char *
>(
MEM_mallocN(
sizeof(
char) * (
len + 1),
"ReportMessage"));
146 memcpy(message_alloc, message,
sizeof(
char) * (
len + 1));
147 report->
message = message_alloc;
161 va_start(args, _format);
164 fprintf(stdout,
"\n");
169 std::scoped_lock
lock(*reports->
lock);
173 va_start(args, _format);
193 std::scoped_lock
lock(*reports->
lock);
195 const size_t prefix_len = strlen(prepend);
199 report->message = message;
200 report->len += prefix_len;
219 va_start(args, prepend_format);
243 std::scoped_lock
lock(*reports->
lock);
263 std::scoped_lock
lock(*reports->
lock);
277 std::scoped_lock
lock(*reports->
lock);
281 if (report->type >= level) {
299 if (reports ==
nullptr) {
319 if (cstring ==
nullptr) {
324 fputs(cstring, stdout);
331 std::scoped_lock
lock(*reports->
lock);
344 if (reports !=
nullptr) {
345 std::scoped_lock
lock(*reports->
lock);
348 if (report->type >= level) {
362 std::scoped_lock
lock(*reports->
lock);
365 fprintf((FILE *)fp,
"%s # %s\n", report->message, report->typestr);
379 "Unable to save '%s': %s\n",
381 errno ? strerror(errno) :
"Unknown error opening file");
A dynamically sized string ADT.
char * BLI_dynstr_get_cstring(const DynStr *ds) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
int BLI_dynstr_get_len(const DynStr *ds) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
DynStr * BLI_dynstr_new(void) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_dynstr_free(DynStr *ds) ATTR_NONNULL()
void BLI_dynstr_appendf(DynStr *__restrict ds, const char *__restrict format,...) ATTR_PRINTF_FORMAT(2
FILE * BLI_fopen(const char *filepath, const char *mode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void void void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
char char * BLI_vsprintfN(const char *__restrict format, va_list args) ATTR_NONNULL(1
#define BLI_string_joinN(...)
@ RPT_PRINT_HANDLED_BY_OWNER
@ RPT_ERROR_OUT_OF_MEMORY
@ RPT_ERROR_INVALID_INPUT
@ RPT_ERROR_INVALID_CONTEXT
Read Guarded memory(de)allocation.
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
bool BKE_reports_contain(ReportList *reports, eReportType level)
void BKE_reports_unlock(ReportList *reports)
bool BKE_reports_print_test(const ReportList *reports, eReportType type)
eReportType BKE_report_store_level(ReportList *reports)
bool BKE_report_write_file(const char *filepath, ReportList *reports, const char *header)
char * BKE_reports_string(ReportList *reports, eReportType level)
static void reports_prepend_impl(ReportList *reports, const char *prepend)
bool BKE_report_write_file_fp(FILE *fp, ReportList *reports, const char *header)
Report * BKE_reports_last_displayable(ReportList *reports)
void BKE_reports_free(ReportList *reports)
const char * BKE_report_type_str(eReportType type)
void BKE_reports_prepend(ReportList *reports, const char *prepend)
void BKE_report_print_level_set(ReportList *reports, eReportType level)
void BKE_report_store_level_set(ReportList *reports, eReportType level)
eReportType BKE_report_print_level(ReportList *reports)
void BKE_reports_clear(ReportList *reports)
void BKE_reportf(ReportList *reports, eReportType type, const char *_format,...)
void BKE_report(ReportList *reports, eReportType type, const char *_message)
void BKE_reports_prependf(ReportList *reports, const char *prepend_format,...)
void BKE_reports_lock(ReportList *reports)
void BKE_reports_init(ReportList *reports, int flag)
void BKE_reports_print(ReportList *reports, eReportType level)
void BKE_reports_move_to_reports(ReportList *reports_dst, ReportList *reports_src)