diff options
Diffstat (limited to 'lib/dpkg/report.c')
-rw-r--r-- | lib/dpkg/report.c | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/lib/dpkg/report.c b/lib/dpkg/report.c new file mode 100644 index 0000000..f7763b3 --- /dev/null +++ b/lib/dpkg/report.c @@ -0,0 +1,132 @@ +/* + * libdpkg - Debian packaging suite library routines + * report.c - message reporting + * + * Copyright © 2004-2005 Scott James Remnant <scott@netsplit.com> + * Copyright © 2008-2013 Guillem Jover <guillem@debian.org> + * + * This 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; either version 2 of the License, or + * (at your option) any later version. + * + * This 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, see <https://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <compat.h> + +#include <stdarg.h> +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> + +#include <dpkg/dpkg.h> +#include <dpkg/macros.h> +#include <dpkg/i18n.h> +#include <dpkg/progname.h> +#include <dpkg/color.h> +#include <dpkg/report.h> + +static int piped_mode = _IOLBF; + +void +dpkg_set_report_piped_mode(int mode) +{ + piped_mode = mode; +} + +void +dpkg_set_report_buffer(FILE *fp) +{ + if (isatty(fileno(fp))) + setvbuf(fp, NULL, _IONBF, 0); + else + setvbuf(fp, NULL, piped_mode, 0); +} + +void +dpkg_warning_printer(const char *msg, void *data) +{ + fprintf(stderr, "%s%s:%s %s%s:%s %s\n", + color_get(COLOR_PROG), dpkg_get_progname(), color_reset(), + color_get(COLOR_WARN), _("warning"), color_reset(), msg); +} + +static dpkg_warning_printer_func *warning_printer_func = dpkg_warning_printer; +static void *warning_printer_data; + +void +dpkg_set_warning_printer(dpkg_warning_printer_func *printer, void *data) +{ + warning_printer_func = printer; + warning_printer_data = data; +} + +static int warn_count = 0; + +int +warning_get_count(void) +{ + return warn_count; +} + +void +warningv(const char *fmt, va_list args) +{ + char *buf = NULL; + + warn_count++; + + m_vasprintf(&buf, fmt, args); + warning_printer_func(buf, warning_printer_data); + free(buf); +} + +void +warning(const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + warningv(fmt, args); + va_end(args); +} + +void +notice(const char *fmt, ...) +{ + char *buf = NULL; + va_list args; + + va_start(args, fmt); + m_vasprintf(&buf, fmt, args); + va_end(args); + + fprintf(stderr, "%s%s:%s %s\n", + color_get(COLOR_PROG), dpkg_get_progname(), color_reset(), buf); + + free(buf); +} + +void +info(const char *fmt, ...) +{ + char *buf; + va_list args; + + va_start(args, fmt); + m_vasprintf(&buf, fmt, args); + va_end(args); + + printf("%s%s:%s %s\n", + color_get(COLOR_PROG), dpkg_get_progname(), color_reset(), buf); + + free(buf); +} |