static void log_recursion(const char* file, const char* fkt, int line) { size_t used, i; void* bt = winpr_backtrace(20); char** msg = winpr_backtrace_symbols(bt, &used); #if defined(ANDROID) const char* tag = WINPR_TAG("utils.wlog"); __android_log_print(ANDROID_LOG_FATAL, tag, "Recursion detected!!!"); __android_log_print(ANDROID_LOG_FATAL, tag, "Check %s [%s:%d]", fkt, file, line); for (i=0; i<used; i++) __android_log_print(ANDROID_LOG_FATAL, tag, "%d: %s", msg[i]); #else fprintf(stderr, "[%s]: Recursion detected!\n", fkt); fprintf(stderr, "[%s]: Check %s:%d\n", fkt, file, line); for (i=0; i<used; i++) fprintf(stderr, "%s: %zd: %s\n", fkt, i, msg[i]); #endif if (msg) free(msg); winpr_backtrace_free(bt); }
static BOOL log_recursion(LPCSTR file, LPCSTR fkt, int line) { char** msg; size_t used, i; void* bt = winpr_backtrace(20); #if defined(ANDROID) LPCSTR tag = WINPR_TAG("utils.wlog"); #endif if (!bt) return FALSE; msg = winpr_backtrace_symbols(bt, &used); if (!msg) return FALSE; #if defined(ANDROID) if (__android_log_print(ANDROID_LOG_FATAL, tag, "Recursion detected!!!") < 0) return FALSE; if (__android_log_print(ANDROID_LOG_FATAL, tag, "Check %s [%s:%d]", fkt, file, line) < 0) return FALSE; for (i = 0; i < used; i++) if (__android_log_print(ANDROID_LOG_FATAL, tag, "%d: %s", i, msg[i]) < 0) return FALSE; #else if (fprintf(stderr, "[%s]: Recursion detected!\n", fkt) < 0) return FALSE; if (fprintf(stderr, "[%s]: Check %s:%d\n", fkt, file, line) < 0) return FALSE; for (i = 0; i < used; i++) if (fprintf(stderr, "%s: %lu: %s\n", fkt, (unsigned long)i, msg[i]) < 0) return FALSE; #endif free(msg); winpr_backtrace_free(bt); return TRUE; }