ssize_t tapdisk_logfile_vprintf(td_logfile_t *log, const char *fmt, va_list ap) { char buf[1024]; size_t size, n; ssize_t len; struct timeval tv; if (!log->file) return -EBADF; gettimeofday(&tv, NULL); size = sizeof(buf); len = 0; len += tapdisk_syslog_strftime(buf, size, &tv); len += snprintf(buf + len, size - len, ": "); len += tapdisk_syslog_strftv(buf + len, size - len, &tv); len += snprintf(buf + len, size - len, " "); len += vsnprintf(buf + len, size - len, fmt, ap); if (buf[len-1] != '\n') len += snprintf(buf + len, size - len, "\n"); n = fwrite(buf, len, 1, log->file); if (n != len) len = -ferror(log->file); return len; }
static int tapdisk_syslog_vsprintf(char *buf, size_t size, int prio, const struct timeval *tv, const char *ident, const char *fmt, va_list ap) { char tsbuf[TD_SYSLOG_STRTIME_LEN+1]; size_t len; /* * PKT := PRI HEADER MSG * PRI := "<" {"0" .. "9"} ">" * HEADER := TIMESTAMP HOSTNAME * MSG := <TAG> <SEP> <CONTENT> * SEP := ":" | " " | "[" */ tapdisk_syslog_strftime(tsbuf, sizeof(tsbuf), tv); len = 0; /* NB. meant to work with c99 null buffers */ len += snprintf(buf ? buf + len : NULL, buf ? size - len : 0, "<%d>%s %s: ", prio, tsbuf, ident); len += vsnprintf(buf ? buf + len : NULL, buf ? size - len : 0, fmt, ap); return MIN(len, size); }