projects
/
cparser
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Do not change the local prev_type in record_entity(). The warning about missing...
[cparser]
/
format_check.c
diff --git
a/format_check.c
b/format_check.c
index
f47cc67
..
5d7f0a1
100644
(file)
--- a/
format_check.c
+++ b/
format_check.c
@@
-20,6
+20,7
@@
#include <ctype.h>
#include <wctype.h>
#include <ctype.h>
#include <wctype.h>
+#include "adt/util.h"
#include "format_check.h"
#include "symbol_t.h"
#include "ast_t.h"
#include "format_check.h"
#include "symbol_t.h"
#include "ast_t.h"
@@
-86,7
+87,7
@@
static const char* get_length_modifier_name(const format_length_modifier_t mod)
[FMT_MOD_I32] = "I32",
[FMT_MOD_I64] = "I64"
};
[FMT_MOD_I32] = "I32",
[FMT_MOD_I64] = "I64"
};
- assert(mod <
sizeof(names) / sizeof(*
names));
+ assert(mod <
lengthof(
names));
return names[mod];
}
return names[mod];
}
@@
-114,39
+115,46
@@
struct vchar_t {
int (*is_digit)(unsigned vchar);
};
int (*is_digit)(unsigned vchar);
};
-static unsigned string_first(vchar_t *self) {
+static unsigned string_first(vchar_t *self)
+{
self->position = 0;
const string_t *string = self->string;
return string->begin[0];
}
self->position = 0;
const string_t *string = self->string;
return string->begin[0];
}
-static unsigned string_next(vchar_t *self) {
+static unsigned string_next(vchar_t *self)
+{
++self->position;
const string_t *string = self->string;
return string->begin[self->position];
}
++self->position;
const string_t *string = self->string;
return string->begin[self->position];
}
-static int string_isdigit(unsigned vchar) {
+static int string_isdigit(unsigned vchar)
+{
return isdigit(vchar);
}
return isdigit(vchar);
}
-static unsigned wstring_first(vchar_t *self) {
+static unsigned wstring_first(vchar_t *self)
+{
self->position = 0;
const wide_string_t *wstring = self->string;
return wstring->begin[0];
}
self->position = 0;
const wide_string_t *wstring = self->string;
return wstring->begin[0];
}
-static unsigned wstring_next(vchar_t *self) {
+static unsigned wstring_next(vchar_t *self)
+{
++self->position;
const wide_string_t *wstring = self->string;
return wstring->begin[self->position];
}
++self->position;
const wide_string_t *wstring = self->string;
return wstring->begin[self->position];
}
-static int wstring_isdigit(unsigned vchar) {
+static int wstring_isdigit(unsigned vchar)
+{
return iswdigit(vchar);
}
return iswdigit(vchar);
}
-static bool atend(vchar_t *self) {
+static bool atend(vchar_t *self)
+{
return self->position + 1 == self->size;
}
return self->position + 1 == self->size;
}
@@
-910,7
+918,7
@@
next_arg:
++num_args;
arg = arg->next;
}
++num_args;
arg = arg->next;
}
- warningf(pos, "%u argument%s but only %u format s
tring
%s",
+ warningf(pos, "%u argument%s but only %u format s
pecifier
%s",
num_args, num_args != 1 ? "s" : "",
num_fmt, num_fmt != 1 ? "s" : "");
}
num_args, num_args != 1 ? "s" : "",
num_fmt, num_fmt != 1 ? "s" : "");
}
@@
-985,7
+993,7
@@
void check_format(const call_expression_t *const call)
* This allows to check format even in MS mode or without header included.
*/
const char *const name = entity->base.symbol->string;
* This allows to check format even in MS mode or without header included.
*/
const char *const name = entity->base.symbol->string;
- for (size_t i = 0; i <
sizeof(builtin_table) / sizeof(builtin_table[0]
); ++i) {
+ for (size_t i = 0; i <
lengthof(builtin_table
); ++i) {
if (strcmp(name, builtin_table[i].name) == 0) {
switch (builtin_table[i].fmt_kind) {
case FORMAT_PRINTF:
if (strcmp(name, builtin_table[i].name) == 0) {
switch (builtin_table[i].fmt_kind) {
case FORMAT_PRINTF: