int tc_scnprintf(char *buf, size_t size, const char *fmt, ...) { int i; va_list args; va_start(args, fmt); i = tc_vscnprintf(buf, size, fmt, args); va_end(args); return i; }
void tc_log_info(int level, int err, const char *fmt, ...) { int n, len; char buffer[LOG_MAX_LEN], *p; va_list args; tc_log_level_t *ll; if (!dbg_level)return; if (log_fd == -1) { return; } #if (TCPCOPY_DEBUG) tc_time_update(); #endif ll = &tc_log_levels[level]; p = buffer; p = tc_cpymem(p, tc_error_log_time, TC_ERR_LOG_TIME_LEN); *p++ = ' '; p = tc_cpymem(p, ll->level, ll->len); *p++ = ' '; n = len = TC_ERR_LOG_TIME_LEN + ll->len + 2; va_start(args, fmt); len += tc_vscnprintf(p, LOG_MAX_LEN - n, fmt, args); va_end(args); if (len < n) { return; } p = buffer + len; if (err > 0) { len += tc_scnprintf(p, LOG_MAX_LEN - len, " (%s)", strerror(err)); if (len < (p - buffer)) { return; } p = buffer + len; } *p++ = '\n'; write(log_fd, buffer, p - buffer); }