From 517413f9affae582f5e824ef45805662d676be6a Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Wed, 10 Dec 2008 11:16:47 +0000 Subject: bb_info_msg: make it do atomic, unbuffered writes udhcpc: fix a problem where we don't open listening socket fast enough function old new delta bb_info_msg 70 126 +56 change_listen_mode 37 78 +41 udhcp_listen_socket 151 124 -27 udhcpc_main 2344 2285 -59 --- libbb/info_msg.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'libbb') diff --git a/libbb/info_msg.c b/libbb/info_msg.c index ffef05e54..8b8a1fcca 100644 --- a/libbb/info_msg.c +++ b/libbb/info_msg.c @@ -12,6 +12,7 @@ void FAST_FUNC bb_info_msg(const char *s, ...) { +#ifdef THIS_ONE_DOESNT_DO_SINGLE_WRITE va_list p; /* va_copy is used because it is not portable * to use va_list p twice */ @@ -27,4 +28,29 @@ void FAST_FUNC bb_info_msg(const char *s, ...) vsyslog(LOG_INFO, s, p2); va_end(p2); va_end(p); +#else + int used; + char *msg; + va_list p; + + if (logmode == 0) + return; + + va_start(p, s); + used = vasprintf(&msg, s, p); + if (used < 0) + return; + + if (ENABLE_FEATURE_SYSLOG && (logmode & LOGMODE_SYSLOG)) + syslog(LOG_INFO, "%s", msg); + if (logmode & LOGMODE_STDIO) { + fflush(stdout); + /* used = strlen(msg); - must be true already */ + msg[used++] = '\n'; + full_write(STDOUT_FILENO, msg, used); + } + + free(msg); + va_end(p); +#endif } -- cgit v1.2.3-55-g6feb