diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-12-10 11:16:47 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-12-10 11:16:47 +0000 |
commit | 517413f9affae582f5e824ef45805662d676be6a (patch) | |
tree | 624ef48c2de51f7c458b3c2c0b9f17fff0af8da5 /libbb | |
parent | e53738558f2f1aa8cd536545479ab98b0df808c5 (diff) |
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
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/info_msg.c | 26 |
1 files changed, 26 insertions, 0 deletions
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 } |