/* * Copyright (c) 2011-2012 - Mauro Carvalho Chehab * Copyright (c) 2012 - Andre Roth * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation version 2 * of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * */ #include #include #include #include #include #ifdef ENABLE_NLS # include "gettext.h" # include # define _(string) dgettext(LIBDVBV5_DOMAIN, string) #else # define _(string) string #endif # define N_(string) string static const struct loglevel { const char *name; const char *color; int fd; } loglevels[9] = { {N_("EMERG "), "\033[31m", STDERR_FILENO }, {N_("ALERT "), "\033[31m", STDERR_FILENO }, {N_("CRITICAL "), "\033[31m", STDERR_FILENO }, {N_("ERROR "), "\033[31m", STDERR_FILENO }, {N_("WARNING "), "\033[33m", STDOUT_FILENO }, {NULL, "\033[36m", STDOUT_FILENO }, /* NOTICE */ {NULL, NULL, STDOUT_FILENO }, /* INFO */ {N_("DEBUG "), "\033[32m", STDOUT_FILENO }, {NULL, "\033[0m", STDOUT_FILENO }, /* reset*/ }; #define LOG_COLOROFF 8 void dvb_default_log(int level, const char *fmt, ...) { if(level > sizeof(loglevels) / sizeof(struct loglevel) - 2) // ignore LOG_COLOROFF as well level = LOG_INFO; va_list ap; va_start(ap, fmt); FILE *out = stdout; if (STDERR_FILENO == loglevels[level].fd) out = stderr; if (loglevels[level].color && isatty(loglevels[level].fd)) fputs(loglevels[level].color, out); if (loglevels[level].name) fprintf(out, "%s", _(loglevels[level].name)); vfprintf(out, fmt, ap); fprintf(out, "\n"); if(loglevels[level].color && isatty(loglevels[level].fd)) fputs(loglevels[LOG_COLOROFF].color, out); va_end(ap); }