diff options
author | pfg <pfg@FreeBSD.org> | 2013-12-21 18:47:00 +0000 |
---|---|---|
committer | pfg <pfg@FreeBSD.org> | 2013-12-21 18:47:00 +0000 |
commit | 68205669abdad29d13f7e6b34f483ac1298065ed (patch) | |
tree | b0b89f0ab157d77eed267e3b82dd3ee8ed9e980b /contrib/gcclibs/libiberty/cp-demangle.h | |
parent | 8f82fe8c1f4a70975704e71ccca87132e0d9af6c (diff) | |
download | FreeBSD-src-68205669abdad29d13f7e6b34f483ac1298065ed.zip FreeBSD-src-68205669abdad29d13f7e6b34f483ac1298065ed.tar.gz |
MFC r258017, r258429, r258748, r258817:
Merge updates from FSF pre4.3 GCC inspired on Apple's gcc:
Updates to libiberty and mangling.
New align attribute.
Merge Apple updates to libstdc++.
Diffstat (limited to 'contrib/gcclibs/libiberty/cp-demangle.h')
-rw-r--r-- | contrib/gcclibs/libiberty/cp-demangle.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/contrib/gcclibs/libiberty/cp-demangle.h b/contrib/gcclibs/libiberty/cp-demangle.h index 2517a57..920ca47 100644 --- a/contrib/gcclibs/libiberty/cp-demangle.h +++ b/contrib/gcclibs/libiberty/cp-demangle.h @@ -123,10 +123,16 @@ struct d_info int expansion; }; +/* To avoid running past the ending '\0', don't: + - call d_peek_next_char if d_peek_char returned '\0' + - call d_advance with an 'i' that is too large + - call d_check_char(di, '\0') + Everything else is safe. */ #define d_peek_char(di) (*((di)->n)) #define d_peek_next_char(di) ((di)->n[1]) #define d_advance(di, i) ((di)->n += (i)) -#define d_next_char(di) (*((di)->n++)) +#define d_check_char(di, c) (d_peek_char(di) == c ? ((di)->n++, 1) : 0) +#define d_next_char(di) (d_peek_char(di) == '\0' ? '\0' : *((di)->n++)) #define d_str(di) ((di)->n) /* Functions and arrays in cp-demangle.c which are referenced by |