/*
* This file is part of cparser.
- * Copyright (C) 2007-2009 Matthias Braun <matze@braunis.de>
- *
- * 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; either version 2
- * of the License, or (at your option) any later version.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
+ * Copyright (C) 2012 Matthias Braun <matze@braunis.de>
*/
#include <stdarg.h>
#include <stdio.h>
bool show_column = true;
bool diagnostics_show_option = true;
-static const source_position_t *curr_pos = NULL;
+static const position_t *curr_pos = NULL;
/**
* prints an additional source position
*/
-static void print_source_position(FILE *out, const source_position_t *pos)
+static void print_position(FILE *out, const position_t *pos)
{
fprintf(out, "at line %u", pos->lineno);
if (show_column)
}
case 'X': {
- unsigned int const val = va_arg(ap, unsigned int);
- char const *const fmt = flag_zero ? "%0*X" : "%*X";
- fprintf(stderr, fmt, field_width, val);
+ unsigned int const val = va_arg(ap, unsigned int);
+ char const *const xfmt = flag_zero ? "%0*X" : "%*X";
+ fprintf(stderr, xfmt, field_width, val);
break;
}
}
case 'P': {
- const source_position_t *pos = va_arg(ap, const source_position_t *);
- print_source_position(stderr, pos);
+ const position_t *pos = va_arg(ap, const position_t *);
+ print_position(stderr, pos);
break;
}
va_end(ap);
}
-static void diagnosticposvf(source_position_t const *const pos, char const *const kind, char const *const fmt, va_list ap)
+static void diagnosticposvf(position_t const *const pos, char const *const kind, char const *const fmt, va_list ap)
{
FILE *const out = stderr;
if (pos) {
diagnosticvf(fmt, ap);
}
-static void errorvf(const source_position_t *pos,
+static void errorvf(const position_t *pos,
const char *const fmt, va_list ap)
{
++error_count;
exit(EXIT_FAILURE);
}
-void errorf(const source_position_t *pos, const char *const fmt, ...)
+void errorf(const position_t *pos, const char *const fmt, ...)
{
va_list ap;
va_start(ap, fmt);
va_end(ap);
}
-void warningf(warning_t const warn, source_position_t const* pos, char const *const fmt, ...)
+void warningf(warning_t const warn, position_t const* pos, char const *const fmt, ...)
{
- va_list ap;
- va_start(ap, fmt);
+ if (pos->is_system_header && !is_warn_on(WARN_SYSTEM))
+ return;
+
warning_switch_t const *const s = get_warn_switch(warn);
switch ((unsigned) s->state) {
char const* kind;
++warning_count;
kind = "warning";
}
+ va_list ap;
+ va_start(ap, fmt);
diagnosticposvf(pos, kind, fmt, ap);
+ va_end(ap);
if (diagnostics_show_option)
fprintf(stderr, " [-W%s]\n", s->name);
else
default:
break;
}
- va_end(ap);
}
-static void internal_errorvf(const source_position_t *pos,
+static void internal_errorvf(const position_t *pos,
const char *const fmt, va_list ap)
{
diagnosticposvf(pos, "internal error", fmt, ap);
fputc('\n', stderr);
}
-void internal_errorf(const source_position_t *pos, const char *const fmt, ...)
+void internal_errorf(const position_t *pos, const char *const fmt, ...)
{
va_list ap;
va_start(ap, fmt);