busybox/libbb/info_msg.c
<<
>>
Prefs
   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#include <syslog.h>
  12
  13void FAST_FUNC bb_info_msg(const char *s, ...)
  14{
  15#ifdef THIS_ONE_DOESNT_DO_SINGLE_WRITE
  16        va_list p;
  17        /* va_copy is used because it is not portable
  18         * to use va_list p twice */
  19        va_list p2;
  20
  21        va_start(p, s);
  22        va_copy(p2, p);
  23        if (logmode & LOGMODE_STDIO) {
  24                vprintf(s, p);
  25                fputs(msg_eol, stdout);
  26        }
  27        if (ENABLE_FEATURE_SYSLOG && (logmode & LOGMODE_SYSLOG))
  28                vsyslog(LOG_INFO, s, p2);
  29        va_end(p2);
  30        va_end(p);
  31#else
  32        int used;
  33        char *msg;
  34        va_list p;
  35
  36        if (logmode == 0)
  37                return;
  38
  39        va_start(p, s);
  40        used = vasprintf(&msg, s, p);
  41        if (used < 0)
  42                return;
  43
  44        if (ENABLE_FEATURE_SYSLOG && (logmode & LOGMODE_SYSLOG))
  45                syslog(LOG_INFO, "%s", msg);
  46        if (logmode & LOGMODE_STDIO) {
  47                fflush(stdout);
  48                /* used = strlen(msg); - must be true already */
  49                msg[used++] = '\n';
  50                full_write(STDOUT_FILENO, msg, used);
  51        }
  52
  53        free(msg);
  54        va_end(p);
  55#endif
  56}
  57