48
47
openlog(progname, LOG_PID, LOG_DAEMON);
51
51
void printerr(int priority, char *format, ...)
56
/* aggregate lines: only print buffer when we get to the end of a
57
* line or run out of space: */
55
int buf_used, buf_available;
58
/* Don't bother formatting a message we're never going to print! */
59
if (priority > verbosity)
62
buf_used = strlen(message_buf);
63
/* subtract 4 to leave room for "...\n" if necessary */
64
buf_available = sizeof(message_buf) - buf_used - 4;
65
buf = message_buf + buf_used;
68
* Aggregate lines: only print buffer when we get to the
69
* end of a line or run out of space
58
71
va_start(args, format);
59
ret = vsnprintf(tmp_buf, sizeof(tmp_buf), format, args);
72
ret = vsnprintf(buf, buf_available, format, args);
61
if ((ret < 0) || (ret >= sizeof(tmp_buf)))
63
if (strlen(tmp_buf) + strlen(message_buf) + 1 > sizeof(message_buf))
65
strcat(message_buf, tmp_buf);
66
if (tmp_buf[strlen(tmp_buf) - 1] == '\n')
77
if (ret >= buf_available) {
78
/* Indicate we're truncating */
79
strcat(message_buf, "...\n");
82
if (message_buf[strlen(message_buf) - 1] == '\n')
70
priority -= verbosity;
75
fprintf(stderr, "%s", message_buf);
87
fprintf(stderr, "%s", message_buf);
88
syslog(sys_pri, "%s", message_buf);
89
syslog(LOG_ERR, "%s", message_buf);
91
/* reset the buffer */
91
92
memset(message_buf, 0, sizeof(message_buf));