static int arch_bfdFPrintF(void *buf, const char *fmt, ...) { va_list args; va_start(args, fmt); int ret = util_vssnprintf(buf, _HF_INSTR_SZ, fmt, args); va_end(args); return ret; }
void log_msg(log_level_t dl, bool perr, const char *file, const char *func, int line, const char *fmt, ...) { char msg[8192] = { "\0" }; if (dl > log_minLevel) { if (dl == l_FATAL) { exit(EXIT_FAILURE); } return; } char strerr[512]; if (perr) { snprintf(strerr, sizeof(strerr), "%s", strerror(errno)); } struct tm tm; struct timeval tv; gettimeofday(&tv, NULL); localtime_r((const time_t *)&tv.tv_sec, &tm); if (log_isStdioTTY == true) { util_ssnprintf(msg, sizeof(msg), "%s", logLevels[dl].prefix); } #if defined(_HF_ARCH_LINUX) #include <unistd.h> #include <sys/syscall.h> pid_t pid = (pid_t) syscall(__NR_gettid); #else /* defined(_HF_ARCH_LINUX) */ pid_t pid = getpid(); #endif /* defined(_HF_ARCH_LINUX) */ if (log_minLevel != l_INFO || !log_isStdioTTY) { util_ssnprintf(msg, sizeof(msg), "%s [%d] %d/%02d/%02d %02d:%02d:%02d (%s:%s %d) ", logLevels[dl].descr, pid, tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, file, func, line); } else { util_ssnprintf(msg, sizeof(msg), "%s ", logLevels[dl].descr); } va_list args; va_start(args, fmt); util_vssnprintf(msg, sizeof(msg), fmt, args); va_end(args); if (perr) { util_ssnprintf(msg, sizeof(msg), ": %s", strerr); } if (log_isStdioTTY == true) { util_ssnprintf(msg, sizeof(msg), "\033[0m"); } util_ssnprintf(msg, sizeof(msg), "\n"); log_mutexLock(); if (write(STDOUT_FILENO, msg, strlen(msg)) == -1) { } log_mutexUnLock(); if (dl == l_FATAL) { exit(EXIT_FAILURE); } }