1/* vi: set sw=4 ts=4: */
2/*
3 * Utility routines.
4 *
5 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
6 *
7 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
8 */
9
10#include "libbb.h"
11#if ENABLE_FEATURE_SYSLOG
12# include <syslog.h>
13#endif
14
15void FAST_FUNC bb_info_msg(const char *s, ...)
16{
17#ifdef THIS_ONE_DOESNT_DO_SINGLE_WRITE
18	va_list p;
19	/* va_copy is used because it is not portable
20	 * to use va_list p twice */
21	va_list p2;
22
23	va_start(p, s);
24	va_copy(p2, p);
25	if (logmode & LOGMODE_STDIO) {
26		vprintf(s, p);
27		fputs(msg_eol, stdout);
28	}
29# if ENABLE_FEATURE_SYSLOG
30	if (logmode & LOGMODE_SYSLOG)
31		vsyslog(LOG_INFO, s, p2);
32# endif
33	va_end(p2);
34	va_end(p);
35#else
36	int used;
37	char *msg;
38	va_list p;
39
40	if (logmode == 0)
41		return;
42
43	va_start(p, s);
44	used = vasprintf(&msg, s, p);
45	va_end(p);
46	if (used < 0)
47		return;
48
49# if ENABLE_FEATURE_SYSLOG
50	if (logmode & LOGMODE_SYSLOG)
51		syslog(LOG_INFO, "%s", msg);
52# endif
53	if (logmode & LOGMODE_STDIO) {
54		fflush_all();
55		/* used = strlen(msg); - must be true already */
56		msg[used++] = '\n';
57		full_write(STDOUT_FILENO, msg, used);
58	}
59
60	free(msg);
61#endif
62}
63