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 source tree.
   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