cpphash.h (U): New define, to correct type of string constants.

gcc:
	* cpphash.h (U): New define, to correct type of string constants.
	(ustrcmp, ustrncmp, ustrlen, uxstrdup, ustrchr): New wrapper
	routines, to do casts when passing unsigned strings to libc.
	* cppexp.c, cppfiles.c, cpphash.c, cppinit.c, cpplib.c: Use them.

	* cppfiles.c (_cpp_execute_include): Make filename an U_CHAR *.
	* cpphash.c (_cpp_quote_string): Make string an U_CHAR *.
	* cppinit.c (dump_special_to_buffer): Make macro name an U_CHAR *.
	* cpplex.c (parse_ifdef, parse_include, validate_else): Make
	second argument an U_CHAR *.

	* cppinit.c (builtin_array): Make name and value U_CHAR *, add
	length field, clean up initializer.
	(ISTABLE): Add __extension__ to designated-
	initializers version.
	* cpplex.c (CHARTAB): Likewise.

	* mbchar.c: Add dummy external declaration to the !MULTIBYTE_CHARS
	case so the file won't be empty.

include:
	* symcat.h: Remove #endif label.

From-SVN: r33657
This commit is contained in:
Zack Weinberg 2000-05-04 04:38:01 +00:00 committed by Zack Weinberg
parent 22a8784041
commit 12cf91fef0
11 changed files with 198 additions and 119 deletions

View File

@ -1,3 +1,25 @@
2000-05-03 Zack Weinberg <zack@wolery.cumb.org>
* cpphash.h (U): New define, to correct type of string constants.
(ustrcmp, ustrncmp, ustrlen, uxstrdup, ustrchr): New wrapper
routines, to do casts when passing unsigned strings to libc.
* cppexp.c, cppfiles.c, cpphash.c, cppinit.c, cpplib.c: Use them.
* cppfiles.c (_cpp_execute_include): Make filename an U_CHAR *.
* cpphash.c (_cpp_quote_string): Make string an U_CHAR *.
* cppinit.c (dump_special_to_buffer): Make macro name an U_CHAR *.
* cpplex.c (parse_ifdef, parse_include, validate_else): Make
second argument an U_CHAR *.
* cppinit.c (builtin_array): Make name and value U_CHAR *, add
length field, clean up initializer.
(ISTABLE): Add __extension__ to designated-
initializers version.
* cpplex.c (CHARTAB): Likewise.
* mbchar.c: Add dummy external declaration to the !MULTIBYTE_CHARS
case so the file won't be empty.
Wed May 3 21:01:46 2000 Jason Eckhardt <jle@cygnus.com> Wed May 3 21:01:46 2000 Jason Eckhardt <jle@cygnus.com>
* bb-reorder.c (struct reorder_block_def): Member succ removed. * bb-reorder.c (struct reorder_block_def): Member succ removed.
@ -175,7 +197,6 @@ Wed May 3 12:40:53 2000 Clinton Popetz <cpopetz@cygnus.com>
* rtl.def (define_insn_and_split): New DEF_RTL_EXPR. * rtl.def (define_insn_and_split): New DEF_RTL_EXPR.
* md.texi (Insn Splitting): Document define_insn_and_split. * md.texi (Insn Splitting): Document define_insn_and_split.
>>>>>>> 1.6464
Tue May 2 00:20:30 2000 Jason Eckhardt <jle@cygnus.com> Tue May 2 00:20:30 2000 Jason Eckhardt <jle@cygnus.com>
* flow.c (verify_flow_info): Added two more sanity checks. The * flow.c (verify_flow_info): Added two more sanity checks. The

View File

@ -313,7 +313,7 @@ parse_charconst (pfile, start, end)
/* If char type is signed, sign-extend the constant. */ /* If char type is signed, sign-extend the constant. */
num_bits = num_chars * width; num_bits = num_chars * width;
if (cpp_defined (pfile, (const U_CHAR *)"__CHAR_UNSIGNED__", if (cpp_defined (pfile, U"__CHAR_UNSIGNED__",
sizeof ("__CHAR_UNSIGNED__")-1) sizeof ("__CHAR_UNSIGNED__")-1)
|| ((result >> (num_bits - 1)) & 1) == 0) || ((result >> (num_bits - 1)) & 1) == 0)
op.value = result & ((unsigned HOST_WIDEST_INT) ~0 op.value = result & ((unsigned HOST_WIDEST_INT) ~0
@ -439,7 +439,7 @@ lex (pfile, skip_evaluation)
return parse_charconst (pfile, tok_start, tok_end); return parse_charconst (pfile, tok_start, tok_end);
case CPP_NAME: case CPP_NAME:
if (!strncmp (tok_start, "defined", 7)) if (!ustrncmp (tok_start, U"defined", 7))
return parse_defined (pfile); return parse_defined (pfile);
op.op = INT; op.op = INT;

View File

@ -74,8 +74,8 @@ eq_IHASH (x, y)
const void *x; const void *x;
const void *y; const void *y;
{ {
const U_CHAR *a = ((const IHASH *)x)->nshort; const char *a = ((const IHASH *)x)->nshort;
const U_CHAR *b = ((const IHASH *)y)->nshort; const char *b = ((const IHASH *)y)->nshort;
return !strcmp (a, b); return !strcmp (a, b);
} }
@ -132,7 +132,7 @@ redundant_include_p (pfile, ihash, ilist)
return (i->control_macro return (i->control_macro
&& (i->control_macro[0] == '\0' && (i->control_macro[0] == '\0'
|| cpp_defined (pfile, i->control_macro, || cpp_defined (pfile, i->control_macro,
strlen (i->control_macro)))) ustrlen (i->control_macro))))
? (IHASH *)-1 : i; ? (IHASH *)-1 : i;
return 0; return 0;
@ -147,7 +147,7 @@ cpp_included (pfile, fname)
{ {
IHASH dummy, *ptr; IHASH dummy, *ptr;
dummy.nshort = fname; dummy.nshort = fname;
dummy.hash = _cpp_calc_hash (fname, strlen (fname)); dummy.hash = _cpp_calc_hash ((const U_CHAR *)fname, strlen (fname));
ptr = htab_find_with_hash (pfile->all_include_files, ptr = htab_find_with_hash (pfile->all_include_files,
(const void *)&dummy, dummy.hash); (const void *)&dummy, dummy.hash);
return (ptr != NULL); return (ptr != NULL);
@ -237,7 +237,7 @@ find_include_file (pfile, fname, search_start, ihash, before)
char *name; char *name;
dummy.nshort = fname; dummy.nshort = fname;
dummy.hash = _cpp_calc_hash (fname, strlen (fname)); dummy.hash = _cpp_calc_hash ((const U_CHAR *)fname, strlen (fname));
path = (fname[0] == '/') ? ABSOLUTE_PATH : search_start; path = (fname[0] == '/') ? ABSOLUTE_PATH : search_start;
slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files, slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files,
(const void *) &dummy, (const void *) &dummy,
@ -308,7 +308,7 @@ _cpp_fake_ihash (pfile, fname)
IHASH dummy; IHASH dummy;
dummy.nshort = fname; dummy.nshort = fname;
dummy.hash = _cpp_calc_hash (fname, strlen (fname)); dummy.hash = _cpp_calc_hash ((const U_CHAR *)fname, strlen (fname));
slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files, slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files,
(const void *) &dummy, (const void *) &dummy,
dummy.hash, INSERT); dummy.hash, INSERT);
@ -515,14 +515,15 @@ remap_filename (pfile, name, loc)
void void
_cpp_execute_include (pfile, fname, len, no_reinclude, search_start) _cpp_execute_include (pfile, f, len, no_reinclude, search_start)
cpp_reader *pfile; cpp_reader *pfile;
char *fname; U_CHAR *f;
unsigned int len; unsigned int len;
int no_reinclude; int no_reinclude;
struct file_name_list *search_start; struct file_name_list *search_start;
{ {
IHASH *ihash; IHASH *ihash;
char *fname = (char *)f;
int fd; int fd;
int angle_brackets = fname[0] == '<'; int angle_brackets = fname[0] == '<';
int before; int before;
@ -615,7 +616,7 @@ _cpp_execute_include (pfile, fname, len, no_reinclude, search_start)
/* Actually process the file. */ /* Actually process the file. */
if (no_reinclude) if (no_reinclude)
ihash->control_macro = (const U_CHAR *) ""; ihash->control_macro = U"";
if (read_include_file (pfile, fd, ihash)) if (read_include_file (pfile, fd, ihash))
{ {
@ -644,7 +645,7 @@ cpp_read_file (pfile, fname)
if (*fname == 0) if (*fname == 0)
dummy.hash = 0; dummy.hash = 0;
else else
dummy.hash = _cpp_calc_hash (fname, strlen (fname)); dummy.hash = _cpp_calc_hash ((const U_CHAR *)fname, strlen (fname));
slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files, slot = (IHASH **) htab_find_slot_with_hash (pfile->all_include_files,
(const void *) &dummy, (const void *) &dummy,
dummy.hash, INSERT); dummy.hash, INSERT);
@ -743,7 +744,7 @@ read_include_file (pfile, fd, ihash)
if (length < 0) if (length < 0)
goto fail; goto fail;
if (length == 0) if (length == 0)
ihash->control_macro = (const U_CHAR *) ""; /* never re-include */ ihash->control_macro = U""; /* never re-include */
close (fd); close (fd);
fp->rlimit = fp->buf + length; fp->rlimit = fp->buf + length;

View File

@ -225,7 +225,7 @@ eq_HASHNODE (x, y)
const HASHNODE *b = (const HASHNODE *)y; const HASHNODE *b = (const HASHNODE *)y;
return (a->length == b->length return (a->length == b->length
&& !strncmp (a->name, b->name, a->length)); && !ustrncmp (a->name, b->name, a->length));
} }
/* Destroy a HASHNODE. */ /* Destroy a HASHNODE. */
@ -377,7 +377,7 @@ warn_trad_stringify (pfile, p, len, argc, argv)
break; break;
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
if (!strncmp (p, argv[i].name, argv[i].len) if (!ustrncmp (p, argv[i].name, argv[i].len)
&& ! is_idchar (p[argv[i].len])) && ! is_idchar (p[argv[i].len]))
{ {
cpp_warning (pfile, cpp_warning (pfile,
@ -416,7 +416,7 @@ trad_stringify (pfile, base, len, argc, argv, pat, endpat, last)
break; break;
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
if (!strncmp (p, argv[i].name, argv[i].len) if (!ustrncmp (p, argv[i].name, argv[i].len)
&& ! is_idchar (p[argv[i].len])) && ! is_idchar (p[argv[i].len]))
{ {
if (CPP_WTRADITIONAL (pfile)) if (CPP_WTRADITIONAL (pfile))
@ -618,11 +618,11 @@ collect_funlike_expansion (pfile, list, arglist, replacement)
warn_trad_stringify (pfile, tok, len, argc, argv); warn_trad_stringify (pfile, tok, len, argc, argv);
goto norm; goto norm;
} }
case CPP_NAME: case CPP_NAME:
for (j = 0; j < argc; j++) for (j = 0; j < argc; j++)
if (argv[j].len == len if (argv[j].len == len
&& !strncmp (tok, argv[j].name, argv[j].len)) && !ustrncmp (tok, argv[j].name, argv[j].len))
goto addref; goto addref;
/* fall through */ /* fall through */
@ -683,12 +683,12 @@ static int
duplicate_arg_p (args, new) duplicate_arg_p (args, new)
U_CHAR *args, *new; U_CHAR *args, *new;
{ {
size_t newlen = strlen (new) + 1; size_t newlen = ustrlen (new) + 1;
size_t oldlen; size_t oldlen;
while (args < new) while (args < new)
{ {
oldlen = strlen (args) + 1; oldlen = ustrlen (args) + 1;
if (!memcmp (args, new, MIN (oldlen, newlen))) if (!memcmp (args, new, MIN (oldlen, newlen)))
return 1; return 1;
args += oldlen; args += oldlen;
@ -795,7 +795,7 @@ collect_params (pfile, list, arglist)
} }
if (CPP_PEDANTIC (pfile) && CPP_OPTION (pfile, c99) if (CPP_PEDANTIC (pfile) && CPP_OPTION (pfile, c99)
&& len == sizeof "__VA_ARGS__" - 1 && len == sizeof "__VA_ARGS__" - 1
&& !strcmp (p, "__VA_ARGS__")) && !ustrcmp (p, U"__VA_ARGS__"))
cpp_pedwarn (pfile, cpp_pedwarn (pfile,
"C99 does not permit use of __VA_ARGS__ as a macro argument name"); "C99 does not permit use of __VA_ARGS__ as a macro argument name");
argv[a].len = len; argv[a].len = len;
@ -817,7 +817,7 @@ collect_params (pfile, list, arglist)
argv[a].len = sizeof "__VA_ARGS__" - 1; argv[a].len = sizeof "__VA_ARGS__" - 1;
argv[a].name = p; argv[a].name = p;
argv[a].rest_arg = 1; argv[a].rest_arg = 1;
strcpy (p, "__VA_ARGS__"); strcpy ((char *)p, "__VA_ARGS__");
} }
else else
{ {
@ -868,8 +868,8 @@ _cpp_create_definition (pfile, list, hp)
ntype = T_EMPTY; /* Empty definition of object-like macro. */ ntype = T_EMPTY; /* Empty definition of object-like macro. */
else if (list->tokens_used == 3 && TOK_TYPE (list, 1) == CPP_NAME else if (list->tokens_used == 3 && TOK_TYPE (list, 1) == CPP_NAME
&& TOK_LEN (list, 0) == TOK_LEN (list, 1) && TOK_LEN (list, 0) == TOK_LEN (list, 1)
&& !strncmp (TOK_NAME (list, 0), TOK_NAME (list, 1), && !ustrncmp (TOK_NAME (list, 0), TOK_NAME (list, 1),
TOK_LEN (list, 0))) TOK_LEN (list, 0)))
ntype = T_IDENTITY; /* Object like macro defined to itself. */ ntype = T_IDENTITY; /* Object like macro defined to itself. */
/* The macro is function-like only if the next character, /* The macro is function-like only if the next character,
@ -926,8 +926,8 @@ _cpp_create_definition (pfile, list, hp)
case T_MACRO: case T_MACRO:
ok = (ntype == hp->type ok = (ntype == hp->type
&& odefn->length == hp->value.odefn->length && odefn->length == hp->value.odefn->length
&& !strncmp (odefn->expansion, hp->value.odefn->expansion, && !ustrncmp (odefn->expansion, hp->value.odefn->expansion,
odefn->length)); odefn->length));
break; break;
case T_FMACRO: case T_FMACRO:
ok = (ntype == hp->type ok = (ntype == hp->type
@ -1050,7 +1050,7 @@ static const char * const monthnames[] =
void void
_cpp_quote_string (pfile, src) _cpp_quote_string (pfile, src)
cpp_reader *pfile; cpp_reader *pfile;
const char *src; const U_CHAR *src;
{ {
U_CHAR c; U_CHAR c;
@ -1091,8 +1091,9 @@ special_symbol (pfile, hp)
cpp_reader *pfile; cpp_reader *pfile;
HASHNODE *hp; HASHNODE *hp;
{ {
const char *buf; const U_CHAR *buf;
cpp_buffer *ip; cpp_buffer *ip;
size_t len;
switch (hp->type) switch (hp->type)
{ {
@ -1108,8 +1109,9 @@ special_symbol (pfile, hp)
while (CPP_PREV_BUFFER (ip) != NULL) while (CPP_PREV_BUFFER (ip) != NULL)
ip = CPP_PREV_BUFFER (ip); ip = CPP_PREV_BUFFER (ip);
buf = ip->nominal_fname; buf = (const U_CHAR *) ip->nominal_fname;
CPP_RESERVE (pfile, 3 + 4 * strlen (buf)); len = ustrlen (buf);
CPP_RESERVE (pfile, 3 + 4 * len);
_cpp_quote_string (pfile, buf); _cpp_quote_string (pfile, buf);
return; return;
@ -1124,8 +1126,9 @@ special_symbol (pfile, hp)
} }
CPP_RESERVE (pfile, 10); CPP_RESERVE (pfile, 10);
sprintf (CPP_PWRITTEN (pfile), "%d", true_indepth); sprintf ((char *)CPP_PWRITTEN (pfile), "%d", true_indepth);
CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile))); len = ustrlen (CPP_PWRITTEN (pfile));
CPP_ADJUST_WRITTEN (pfile, len);
return; return;
} }
@ -1144,7 +1147,8 @@ special_symbol (pfile, hp)
if (!buf || *buf == '\0') if (!buf || *buf == '\0')
return; return;
CPP_PUTS (pfile, buf, strlen (buf)); len = ustrlen (buf);
CPP_PUTS (pfile, buf, len);
return; return;
case T_SPECLINE: case T_SPECLINE:
@ -1155,8 +1159,9 @@ special_symbol (pfile, hp)
return; return;
} }
CPP_RESERVE (pfile, 10); CPP_RESERVE (pfile, 10);
sprintf (CPP_PWRITTEN (pfile), "%u", CPP_BUF_LINE (ip)); sprintf ((char *)CPP_PWRITTEN (pfile), "%u", CPP_BUF_LINE (ip));
CPP_ADJUST_WRITTEN (pfile, strlen (CPP_PWRITTEN (pfile))); len = ustrlen (CPP_PWRITTEN (pfile));
CPP_ADJUST_WRITTEN (pfile, len);
return; return;
case T_DATE: case T_DATE:
@ -1231,7 +1236,7 @@ _cpp_macroexpand (pfile, hp)
{ {
const U_CHAR *cpval = hp->value.cpval; const U_CHAR *cpval = hp->value.cpval;
if (cpval && *cpval != '\0') if (cpval && *cpval != '\0')
push_macro_expansion (pfile, cpval, strlen (cpval), hp); push_macro_expansion (pfile, cpval, ustrlen (cpval), hp);
return; return;
} }
@ -1782,7 +1787,7 @@ compare_defs (pfile, d1, d2)
if (d1->nargs != d2->nargs) if (d1->nargs != d2->nargs)
return 1; return 1;
if (strcmp (d1->expansion, d2->expansion)) if (ustrcmp (d1->expansion, d2->expansion))
return 1; return 1;
if (CPP_PEDANTIC (pfile) if (CPP_PEDANTIC (pfile)
&& d1->argnames && d2->argnames) && d1->argnames && d2->argnames)
@ -1793,8 +1798,8 @@ compare_defs (pfile, d1, d2)
int i = d1->nargs; int i = d1->nargs;
while (i--) while (i--)
{ {
len = strlen (arg1) + 1; len = ustrlen (arg1) + 1;
if (strcmp (arg1, arg2)) if (ustrcmp (arg1, arg2))
return 1; return 1;
arg1 += len; arg1 += len;
arg2 += len; arg2 += len;
@ -1871,7 +1876,7 @@ dump_funlike_macro (pfile, defn)
for (i = 0; i < defn->nargs; i++) for (i = 0; i < defn->nargs; i++)
{ {
argv[i] = x; argv[i] = x;
argl[i] = strlen (x); argl[i] = ustrlen (x);
x += argl[i] + 1; x += argl[i] + 1;
} }
@ -1881,7 +1886,7 @@ dump_funlike_macro (pfile, defn)
{ {
CPP_RESERVE (pfile, argl[i] + 2); CPP_RESERVE (pfile, argl[i] + 2);
if (!(i == defn->nargs-1 && defn->rest_args if (!(i == defn->nargs-1 && defn->rest_args
&& !strcmp (argv[i], "__VA_ARGS__"))) && !ustrcmp (argv[i], U"__VA_ARGS__")))
CPP_PUTS_Q (pfile, argv[i], argl[i]); CPP_PUTS_Q (pfile, argv[i], argl[i]);
if (i < defn->nargs-1) if (i < defn->nargs-1)
CPP_PUTS_Q (pfile, ", ", 2); CPP_PUTS_Q (pfile, ", ", 2);

View File

@ -23,6 +23,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define __GCC_CPPHASH__ #define __GCC_CPPHASH__
typedef unsigned char U_CHAR; typedef unsigned char U_CHAR;
#define U (const U_CHAR *) /* Intended use: U"string" */
/* The structure of a node in the hash table. The hash table /* The structure of a node in the hash table. The hash table
has entries for all tokens defined by #define commands (type T_MACRO), has entries for all tokens defined by #define commands (type T_MACRO),
@ -60,7 +61,7 @@ struct hashnode
char disabled; /* macro turned off for rescan? */ char disabled; /* macro turned off for rescan? */
union { union {
const char *cpval; /* some predefined macros */ const U_CHAR *cpval; /* some predefined macros */
const struct object_defn *odefn; /* #define foo bar */ const struct object_defn *odefn; /* #define foo bar */
const struct funct_defn *fdefn; /* #define foo(x) bar(x) */ const struct funct_defn *fdefn; /* #define foo(x) bar(x) */
struct hashnode *aschain; /* #assert */ struct hashnode *aschain; /* #assert */
@ -217,14 +218,14 @@ extern void _cpp_free_definition PARAMS ((HASHNODE *));
extern int _cpp_create_definition PARAMS ((cpp_reader *, extern int _cpp_create_definition PARAMS ((cpp_reader *,
cpp_toklist *, HASHNODE *)); cpp_toklist *, HASHNODE *));
extern void _cpp_dump_definition PARAMS ((cpp_reader *, HASHNODE *)); extern void _cpp_dump_definition PARAMS ((cpp_reader *, HASHNODE *));
extern void _cpp_quote_string PARAMS ((cpp_reader *, const char *)); extern void _cpp_quote_string PARAMS ((cpp_reader *, const U_CHAR *));
extern void _cpp_macroexpand PARAMS ((cpp_reader *, HASHNODE *)); extern void _cpp_macroexpand PARAMS ((cpp_reader *, HASHNODE *));
extern void _cpp_init_macro_hash PARAMS ((cpp_reader *)); extern void _cpp_init_macro_hash PARAMS ((cpp_reader *));
extern void _cpp_dump_macro_hash PARAMS ((cpp_reader *)); extern void _cpp_dump_macro_hash PARAMS ((cpp_reader *));
/* In cppfiles.c */ /* In cppfiles.c */
extern void _cpp_simplify_pathname PARAMS ((char *)); extern void _cpp_simplify_pathname PARAMS ((char *));
extern void _cpp_execute_include PARAMS ((cpp_reader *, char *, extern void _cpp_execute_include PARAMS ((cpp_reader *, U_CHAR *,
unsigned int, int, unsigned int, int,
struct file_name_list *)); struct file_name_list *));
extern void _cpp_init_include_hash PARAMS ((cpp_reader *)); extern void _cpp_init_include_hash PARAMS ((cpp_reader *));
@ -254,6 +255,43 @@ extern void _cpp_scan_line PARAMS ((cpp_reader *, cpp_toklist *));
/* In cpplib.c */ /* In cpplib.c */
extern int _cpp_handle_directive PARAMS ((cpp_reader *)); extern int _cpp_handle_directive PARAMS ((cpp_reader *));
extern void _cpp_unwind_if_stack PARAMS ((cpp_reader *, cpp_buffer *)); extern void _cpp_unwind_if_stack PARAMS ((cpp_reader *, cpp_buffer *));
extern void _cpp_check_directive PARAMS((cpp_toklist *, cpp_token *)); extern void _cpp_check_directive PARAMS ((cpp_toklist *, cpp_token *));
/* These are inline functions (if __GNUC__) instead of macros so we
can get type checking. */
#if GCC_VERSION >= 2007 && defined __OPTIMIZE__
extern inline int ustrcmp (const U_CHAR *, const U_CHAR *);
extern inline int ustrncmp (const U_CHAR *, const U_CHAR *, size_t);
extern inline size_t ustrlen (const U_CHAR *);
extern inline U_CHAR *uxstrdup (const U_CHAR *);
extern inline U_CHAR *ustrchr (const U_CHAR *, int);
extern inline int
ustrcmp (const U_CHAR *s1, const U_CHAR *s2)
{ return strcmp ((const char *)s1, (const char *)s2); }
extern inline int
ustrncmp (const U_CHAR *s1, const U_CHAR *s2, size_t n)
{ return strncmp ((const char *)s1, (const char *)s2, n); }
extern inline size_t
ustrlen (const U_CHAR *s1)
{ return strlen ((const char *)s1); }
extern inline U_CHAR *
uxstrdup (const U_CHAR *s1)
{ return (U_CHAR *) xstrdup ((const char *)s1); }
extern inline U_CHAR *
ustrchr (const U_CHAR *s1, int c)
{ return (U_CHAR *) strchr ((const char *)s1, c); }
#else
#define ustrcmp(s1_, s2_) strcmp((const char *)s1_, (const char *)s2_)
#define ustrncmp(s1_, s2_, n_) strncmp((const char *)s1_, (const char *)s2_, n_)
#define ustrlen(s1_) strlen((const char *)s1_)
#define uxstrdup(s1_) (U_CHAR *) xstrdup((const char *)s1_)
#define ustrchr(s1_, c_) (U_CHAR *) strchr((const char *)s1_, c_)
#endif
#endif #endif

View File

@ -214,7 +214,8 @@ static void append_include_chain PARAMS ((cpp_reader *,
char *, int, int)); char *, int, int));
static void merge_include_chains PARAMS ((cpp_reader *)); static void merge_include_chains PARAMS ((cpp_reader *));
static void dump_special_to_buffer PARAMS ((cpp_reader *, const char *)); static void dump_special_to_buffer PARAMS ((cpp_reader *, const U_CHAR *,
size_t));
static void initialize_dependency_output PARAMS ((cpp_reader *)); static void initialize_dependency_output PARAMS ((cpp_reader *));
static void initialize_standard_includes PARAMS ((cpp_reader *)); static void initialize_standard_includes PARAMS ((cpp_reader *));
static void new_pending_directive PARAMS ((struct cpp_pending *, static void new_pending_directive PARAMS ((struct cpp_pending *,
@ -229,13 +230,13 @@ static int handle_option PARAMS ((cpp_reader *, int, char **));
/* Fourth argument to append_include_chain: chain to use */ /* Fourth argument to append_include_chain: chain to use */
enum { QUOTE = 0, BRACKET, SYSTEM, AFTER }; enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
/* If we have designated initializers (GCC >2.7, or C99) this table /* If we have designated initializers (GCC >2.7) this table can be
can be initialized, constant data. Otherwise, it has to be filled initialized, constant data. Otherwise, it has to be filled in at
in at runtime. */ runtime. */
#if (GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L) #if (GCC_VERSION >= 2007)
#define init_IStable() /* nothing */ #define init_IStable() /* nothing */
#define ISTABLE const unsigned char _cpp_IStable[256] = { #define ISTABLE __extension__ const unsigned char _cpp_IStable[256] = {
#define END }; #define END };
#define s(p, v) [p] = v, #define s(p, v) [p] = v,
#else #else
@ -514,17 +515,17 @@ merge_include_chains (pfile)
to PFILE's token_buffer. */ to PFILE's token_buffer. */
static void static void
dump_special_to_buffer (pfile, macro_name) dump_special_to_buffer (pfile, macro_name, macro_len)
cpp_reader *pfile; cpp_reader *pfile;
const char *macro_name; const U_CHAR *macro_name;
size_t macro_len;
{ {
static const char define_directive[] = "#define "; static const char define_directive[] = "#define ";
int macro_name_length = strlen (macro_name); CPP_RESERVE (pfile, sizeof(define_directive) + macro_len);
CPP_RESERVE (pfile, sizeof(define_directive) + macro_name_length);
CPP_PUTS_Q (pfile, define_directive, sizeof(define_directive)-1); CPP_PUTS_Q (pfile, define_directive, sizeof(define_directive)-1);
CPP_PUTS_Q (pfile, macro_name, macro_name_length); CPP_PUTS_Q (pfile, macro_name, macro_len);
CPP_PUTC_Q (pfile, ' '); CPP_PUTC_Q (pfile, ' ');
_cpp_expand_to_buffer (pfile, macro_name, macro_name_length); _cpp_expand_to_buffer (pfile, macro_name, macro_len);
CPP_PUTC (pfile, '\n'); CPP_PUTC (pfile, '\n');
} }
@ -617,39 +618,46 @@ cpp_cleanup (pfile)
struct builtin struct builtin
{ {
const char *name; const U_CHAR *name;
const char *value; const U_CHAR *value;
unsigned short type; unsigned short type;
unsigned short flags; unsigned short flags;
unsigned int len;
}; };
#define DUMP 0x01 #define DUMP 0x01
#define VERS 0x02 #define VERS 0x02
#define ULP 0x04 #define ULP 0x04
#define B(n, t) { U n, 0, t, 0, sizeof n - 1 }
#define C(n, v) { U n, U v, T_CONST, DUMP, sizeof n - 1 }
#define X(n, v, t, f) { U n, U v, t, DUMP|f, sizeof n - 1 }
static const struct builtin builtin_array[] = static const struct builtin builtin_array[] =
{ {
{ "__TIME__", 0, T_TIME, 0 }, B("__TIME__", T_TIME),
{ "__DATE__", 0, T_DATE, 0 }, B("__DATE__", T_DATE),
{ "__FILE__", 0, T_FILE, 0 }, B("__FILE__", T_FILE),
{ "__BASE_FILE__", 0, T_BASE_FILE, 0 }, B("__BASE_FILE__", T_BASE_FILE),
{ "__LINE__", 0, T_SPECLINE, 0 }, B("__LINE__", T_SPECLINE),
{ "__INCLUDE_LEVEL__", 0, T_INCLUDE_LEVEL, 0 }, B("__INCLUDE_LEVEL__", T_INCLUDE_LEVEL),
{ "__VERSION__", 0, T_XCONST, DUMP|VERS }, X("__VERSION__", 0, T_XCONST, VERS),
{ "__USER_LABEL_PREFIX__", 0, T_CONST, DUMP|ULP }, X("__USER_LABEL_PREFIX__", 0, T_CONST, ULP),
{ "__STDC__", "1", T_STDC, DUMP }, X("__STDC__", "1", T_STDC, 0),
{ "__REGISTER_PREFIX__", REGISTER_PREFIX, T_CONST, DUMP }, C("__REGISTER_PREFIX__", REGISTER_PREFIX),
{ "__HAVE_BUILTIN_SETJMP__", "1", T_CONST, DUMP }, C("__HAVE_BUILTIN_SETJMP__", "1"),
#ifndef NO_BUILTIN_SIZE_TYPE #ifndef NO_BUILTIN_SIZE_TYPE
{ "__SIZE_TYPE__", SIZE_TYPE, T_CONST, DUMP }, C("__SIZE_TYPE__", SIZE_TYPE),
#endif #endif
#ifndef NO_BUILTIN_PTRDIFF_TYPE #ifndef NO_BUILTIN_PTRDIFF_TYPE
{ "__PTRDIFF_TYPE__", PTRDIFF_TYPE, T_CONST, DUMP }, C("__PTRDIFF_TYPE__", PTRDIFF_TYPE),
#endif #endif
#ifndef NO_BUILTIN_WCHAR_TYPE #ifndef NO_BUILTIN_WCHAR_TYPE
{ "__WCHAR_TYPE__", WCHAR_TYPE, T_CONST, DUMP }, C("__WCHAR_TYPE__", WCHAR_TYPE),
#endif #endif
}; };
#undef B
#undef C
#undef X
#define builtin_array_end \ #define builtin_array_end \
builtin_array + sizeof(builtin_array)/sizeof(struct builtin) builtin_array + sizeof(builtin_array)/sizeof(struct builtin)
@ -659,9 +667,8 @@ static void
initialize_builtins (pfile) initialize_builtins (pfile)
cpp_reader *pfile; cpp_reader *pfile;
{ {
int len;
const struct builtin *b; const struct builtin *b;
const char *val; const U_CHAR *val;
HASHNODE *hp; HASHNODE *hp;
for(b = builtin_array; b < builtin_array_end; b++) for(b = builtin_array; b < builtin_array_end; b++)
{ {
@ -669,22 +676,21 @@ initialize_builtins (pfile)
continue; continue;
if (b->flags & ULP) if (b->flags & ULP)
val = user_label_prefix; val = (const U_CHAR *) user_label_prefix;
else if (b->flags & VERS) else if (b->flags & VERS)
{ {
val = xmalloc (strlen (version_string) + 3); val = (const U_CHAR *) xmalloc (strlen (version_string) + 3);
sprintf ((char *)val, "\"%s\"", version_string); sprintf ((char *)val, "\"%s\"", version_string);
} }
else else
val = b->value; val = b->value;
len = strlen (b->name); hp = _cpp_lookup (pfile, b->name, b->len);
hp = _cpp_lookup (pfile, b->name, len);
hp->value.cpval = val; hp->value.cpval = val;
hp->type = b->type; hp->type = b->type;
if ((b->flags & DUMP) && CPP_OPTION (pfile, debug_output)) if ((b->flags & DUMP) && CPP_OPTION (pfile, debug_output))
dump_special_to_buffer (pfile, b->name); dump_special_to_buffer (pfile, b->name, b->len);
} }
} }
#undef DUMP #undef DUMP

View File

@ -1720,13 +1720,13 @@ find_position (start, limit, linep)
#define UCHAR_MAX 255 /* assume 8-bit bytes */ #define UCHAR_MAX 255 /* assume 8-bit bytes */
#endif #endif
#if (GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L) #if (GCC_VERSION >= 2007)
#define init_chartab() /* nothing */ #define init_chartab() /* nothing */
#define CHARTAB static const unsigned char chartab[UCHAR_MAX + 1] = { #define CHARTAB __extension__ static const U_CHAR chartab[UCHAR_MAX + 1] = {
#define END }; #define END };
#define s(p, v) [p] = v, #define s(p, v) [p] = v,
#else #else
#define CHARTAB static unsigned char chartab[UCHAR_MAX + 1] = { 0 }; \ #define CHARTAB static U_CHAR chartab[UCHAR_MAX + 1] = { 0 }; \
static void init_chartab PARAMS ((void)) { \ static void init_chartab PARAMS ((void)) { \
unsigned char *x = chartab; unsigned char *x = chartab;
#define END } #define END }

View File

@ -32,7 +32,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
struct directive struct directive
{ {
directive_handler func; /* Function to handle directive. */ directive_handler func; /* Function to handle directive. */
const char *name; /* Name of directive. */ const U_CHAR *name; /* Name of directive. */
unsigned short length; /* Length of name. */ unsigned short length; /* Length of name. */
unsigned short flags; /* Flags describing this directive. */ unsigned short flags; /* Flags describing this directive. */
}; };
@ -52,9 +52,9 @@ typedef struct if_stack IF_STACK;
/* Forward declarations. */ /* Forward declarations. */
static void validate_else PARAMS ((cpp_reader *, const char *)); static void validate_else PARAMS ((cpp_reader *, const U_CHAR *));
static int parse_ifdef PARAMS ((cpp_reader *, const char *)); static int parse_ifdef PARAMS ((cpp_reader *, const U_CHAR *));
static unsigned int parse_include PARAMS ((cpp_reader *, const char *)); static unsigned int parse_include PARAMS ((cpp_reader *, const U_CHAR *));
static int conditional_skip PARAMS ((cpp_reader *, int, int, static int conditional_skip PARAMS ((cpp_reader *, int, int,
U_CHAR *)); U_CHAR *));
static int skip_if_group PARAMS ((cpp_reader *)); static int skip_if_group PARAMS ((cpp_reader *));
@ -140,7 +140,8 @@ enum
/* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */ /* Don't invoke CONCAT2 with any whitespace or K&R cc will fail. */
#define D(name, t, flags) \ #define D(name, t, flags) \
{ CONCAT2(do_,name), STRINGX(name), sizeof STRINGX(name) - 1, flags }, { CONCAT2(do_,name), (const U_CHAR *) STRINGX(name), \
sizeof STRINGX(name) - 1, flags },
static const struct directive dtable[] = static const struct directive dtable[] =
{ {
DIRECTIVE_TABLE DIRECTIVE_TABLE
@ -155,7 +156,7 @@ _cpp_check_directive (list, token)
cpp_toklist *list; cpp_toklist *list;
cpp_token *token; cpp_token *token;
{ {
const char *name = list->namebuf + token->val.name.offset; const U_CHAR *name = list->namebuf + token->val.name.offset;
size_t len = token->val.name.len; size_t len = token->val.name.len;
unsigned int i; unsigned int i;
@ -163,7 +164,7 @@ _cpp_check_directive (list, token)
list->dir_flags = 0; list->dir_flags = 0;
for (i = 0; i < N_DIRECTIVES; i++) for (i = 0; i < N_DIRECTIVES; i++)
if (dtable[i].length == len && !strncmp (dtable[i].name, name, len)) if (dtable[i].length == len && !ustrncmp (dtable[i].name, name, len))
{ {
list->dir_handler = dtable[i].func; list->dir_handler = dtable[i].func;
list->dir_flags = dtable[i].flags; list->dir_flags = dtable[i].flags;
@ -237,7 +238,7 @@ _cpp_handle_directive (pfile)
for (i = 0; i < N_DIRECTIVES; i++) for (i = 0; i < N_DIRECTIVES; i++)
{ {
if (dtable[i].length == len if (dtable[i].length == len
&& !strncmp (dtable[i].name, ident, len)) && !ustrncmp (dtable[i].name, ident, len))
goto real_directive; goto real_directive;
} }
/* Don't complain about invalid directives in assembly source, /* Don't complain about invalid directives in assembly source,
@ -361,7 +362,7 @@ do_define (pfile)
/* That NAME is not allowed to be "defined". (Not clear if the /* That NAME is not allowed to be "defined". (Not clear if the
standard requires this.) */ standard requires this.) */
if (len == 7 && !strncmp (sym, "defined", 7)) if (len == 7 && !ustrncmp (sym, U"defined", 7))
{ {
cpp_error_with_line (pfile, list->line, TOK_COL (list, 0), cpp_error_with_line (pfile, list->line, TOK_COL (list, 0),
"\"defined\" is not a legal macro name"); "\"defined\" is not a legal macro name");
@ -398,7 +399,7 @@ do_define (pfile)
static unsigned int static unsigned int
parse_include (pfile, name) parse_include (pfile, name)
cpp_reader *pfile; cpp_reader *pfile;
const char *name; const U_CHAR *name;
{ {
long old_written = CPP_WRITTEN (pfile); long old_written = CPP_WRITTEN (pfile);
enum cpp_ttype token; enum cpp_ttype token;
@ -457,12 +458,12 @@ do_include (pfile)
cpp_reader *pfile; cpp_reader *pfile;
{ {
unsigned int len; unsigned int len;
char *token; U_CHAR *token;
len = parse_include (pfile, dtable[T_INCLUDE].name); len = parse_include (pfile, dtable[T_INCLUDE].name);
if (len == 0) if (len == 0)
return 0; return 0;
token = alloca (len + 1); token = (U_CHAR *) alloca (len + 1);
memcpy (token, CPP_PWRITTEN (pfile), len); memcpy (token, CPP_PWRITTEN (pfile), len);
token[len] = '\0'; token[len] = '\0';
@ -478,7 +479,7 @@ do_import (pfile)
cpp_reader *pfile; cpp_reader *pfile;
{ {
unsigned int len; unsigned int len;
char *token; U_CHAR *token;
if (CPP_OPTION (pfile, warn_import) if (CPP_OPTION (pfile, warn_import)
&& !CPP_BUFFER (pfile)->system_header_p && !pfile->import_warning) && !CPP_BUFFER (pfile)->system_header_p && !pfile->import_warning)
@ -491,7 +492,7 @@ do_import (pfile)
len = parse_include (pfile, dtable[T_IMPORT].name); len = parse_include (pfile, dtable[T_IMPORT].name);
if (len == 0) if (len == 0)
return 0; return 0;
token = alloca (len + 1); token = (U_CHAR *) alloca (len + 1);
memcpy (token, CPP_PWRITTEN (pfile), len); memcpy (token, CPP_PWRITTEN (pfile), len);
token[len] = '\0'; token[len] = '\0';
@ -507,13 +508,13 @@ do_include_next (pfile)
cpp_reader *pfile; cpp_reader *pfile;
{ {
unsigned int len; unsigned int len;
char *token; U_CHAR *token;
struct file_name_list *search_start = 0; struct file_name_list *search_start = 0;
len = parse_include (pfile, dtable[T_INCLUDE_NEXT].name); len = parse_include (pfile, dtable[T_INCLUDE_NEXT].name);
if (len == 0) if (len == 0)
return 0; return 0;
token = alloca (len + 1); token = (U_CHAR *) alloca (len + 1);
memcpy (token, CPP_PWRITTEN (pfile), len); memcpy (token, CPP_PWRITTEN (pfile), len);
token[len] = '\0'; token[len] = '\0';
@ -590,7 +591,8 @@ do_line (pfile)
} }
CPP_PUTC (pfile, '\0'); /* not terminated for us */ CPP_PUTC (pfile, '\0'); /* not terminated for us */
new_lineno = strtoul (pfile->token_buffer + old_written, &x, 10); new_lineno = strtoul ((const char *) (pfile->token_buffer + old_written),
&x, 10);
if (x[0] != '\0') if (x[0] != '\0')
{ {
cpp_error (pfile, "token after `#line' is not an integer"); cpp_error (pfile, "token after `#line' is not an integer");
@ -643,12 +645,12 @@ do_line (pfile)
*end_name = '\0'; *end_name = '\0';
if (strcmp (fname, ip->nominal_fname)) if (strcmp ((const char *)fname, ip->nominal_fname))
{ {
if (!strcmp (fname, ip->ihash->name)) if (!strcmp ((const char *)fname, ip->ihash->name))
ip->nominal_fname = ip->ihash->name; ip->nominal_fname = ip->ihash->name;
else else
ip->nominal_fname = _cpp_fake_ihash (pfile, fname); ip->nominal_fname = _cpp_fake_ihash (pfile, (const char *)fname);
} }
} }
else if (token != CPP_VSPACE && token != CPP_EOF) else if (token != CPP_VSPACE && token != CPP_EOF)
@ -888,7 +890,7 @@ do_pragma_once (pfile)
if (CPP_PREV_BUFFER (ip) == NULL) if (CPP_PREV_BUFFER (ip) == NULL)
cpp_warning (pfile, "`#pragma once' outside include file"); cpp_warning (pfile, "`#pragma once' outside include file");
else else
ip->ihash->control_macro = (const U_CHAR *) ""; /* never repeat */ ip->ihash->control_macro = U""; /* never repeat */
return 1; return 1;
} }
@ -902,7 +904,7 @@ do_pragma_implementation (pfile)
enum cpp_ttype token; enum cpp_ttype token;
long written = CPP_WRITTEN (pfile); long written = CPP_WRITTEN (pfile);
U_CHAR *name; U_CHAR *name;
U_CHAR *copy; char *copy;
size_t len; size_t len;
token = _cpp_get_directive_token (pfile); token = _cpp_get_directive_token (pfile);
@ -917,7 +919,7 @@ do_pragma_implementation (pfile)
/* Trim the leading and trailing quote marks from the string. */ /* Trim the leading and trailing quote marks from the string. */
name = pfile->token_buffer + written + 1; name = pfile->token_buffer + written + 1;
len = CPP_PWRITTEN (pfile) - name; len = CPP_PWRITTEN (pfile) - name;
copy = (U_CHAR *) alloca (len); copy = alloca (len);
memcpy (copy, name, len - 1); memcpy (copy, name, len - 1);
copy[len - 1] = '\0'; copy[len - 1] = '\0';
@ -1026,7 +1028,7 @@ detect_if_not_defined (pfile)
token = _cpp_get_directive_token (pfile); token = _cpp_get_directive_token (pfile);
if (token != CPP_NAME) if (token != CPP_NAME)
goto restore; goto restore;
if (strncmp (pfile->token_buffer + token_offset, "defined", 7)) if (ustrncmp (pfile->token_buffer + token_offset, U"defined", 7))
goto restore; goto restore;
/* ...then an optional '(' and the name, */ /* ...then an optional '(' and the name, */
@ -1122,7 +1124,7 @@ do_elif (pfile)
static int static int
parse_ifdef (pfile, name) parse_ifdef (pfile, name)
cpp_reader *pfile; cpp_reader *pfile;
const char *name; const U_CHAR *name;
{ {
U_CHAR *ident; U_CHAR *ident;
unsigned int len; unsigned int len;
@ -1194,7 +1196,7 @@ do_ifndef (pfile)
skip = parse_ifdef (pfile, dtable[T_IFNDEF].name); skip = parse_ifdef (pfile, dtable[T_IFNDEF].name);
if (start_of_file && !skip) if (start_of_file && !skip)
control_macro = (U_CHAR *) xstrdup (CPP_PWRITTEN (pfile)); control_macro = uxstrdup (CPP_PWRITTEN (pfile));
return conditional_skip (pfile, skip, T_IFNDEF, control_macro); return conditional_skip (pfile, skip, T_IFNDEF, control_macro);
} }
@ -1256,7 +1258,7 @@ consider_directive_while_skipping (pfile, stack)
for (i = 0; i < N_DIRECTIVES; i++) for (i = 0; i < N_DIRECTIVES; i++)
{ {
if (dtable[i].length == len if (dtable[i].length == len
&& !strncmp (dtable[i].name, pfile->token_buffer + ident, len)) && !ustrncmp (dtable[i].name, pfile->token_buffer + ident, len))
goto real_directive; goto real_directive;
} }
return 0; return 0;
@ -1446,7 +1448,7 @@ do_endif (pfile)
static void static void
validate_else (pfile, directive) validate_else (pfile, directive)
cpp_reader *pfile; cpp_reader *pfile;
const char *directive; const U_CHAR *directive;
{ {
long old_written; long old_written;
if (! CPP_PEDANTIC (pfile)) if (! CPP_PEDANTIC (pfile))
@ -1520,7 +1522,7 @@ do_assert (pfile)
goto error; goto error;
} }
blen = (U_CHAR *) strchr (sym, '(') - sym; blen = ustrchr (sym, '(') - sym;
base = _cpp_lookup (pfile, sym, blen); base = _cpp_lookup (pfile, sym, blen);
if (base->type == T_VOID) if (base->type == T_VOID)
{ {
@ -1581,7 +1583,7 @@ do_unassert (pfile)
} }
else else
{ {
baselen = (U_CHAR *) strchr (sym, '(') - sym; baselen = ustrchr (sym, '(') - sym;
base = _cpp_lookup (pfile, sym, baselen); base = _cpp_lookup (pfile, sym, baselen);
if (base->type == T_VOID) goto out; if (base->type == T_VOID) goto out;
this = _cpp_lookup (pfile, sym, thislen); this = _cpp_lookup (pfile, sym, thislen);
@ -1644,7 +1646,7 @@ cpp_define (pfile, str)
strcpy (&buf[count-4], " 1\n"); strcpy (&buf[count-4], " 1\n");
} }
if (cpp_push_buffer (pfile, buf, count - 1) != NULL) if (cpp_push_buffer (pfile, (U_CHAR *)buf, count - 1) != NULL)
{ {
do_define (pfile); do_define (pfile);
cpp_pop_buffer (pfile); cpp_pop_buffer (pfile);
@ -1663,7 +1665,7 @@ cpp_undef (pfile, macro)
memcpy (buf, macro, len); memcpy (buf, macro, len);
buf[len] = '\n'; buf[len] = '\n';
buf[len + 1] = '\0'; buf[len + 1] = '\0';
if (cpp_push_buffer (pfile, buf, len + 1) != NULL) if (cpp_push_buffer (pfile, (U_CHAR *)buf, len + 1) != NULL)
{ {
do_undef (pfile); do_undef (pfile);
cpp_pop_buffer (pfile); cpp_pop_buffer (pfile);
@ -1676,7 +1678,7 @@ cpp_assert (pfile, str)
cpp_reader *pfile; cpp_reader *pfile;
const char *str; const char *str;
{ {
if (cpp_push_buffer (pfile, str, strlen (str)) != NULL) if (cpp_push_buffer (pfile, (const U_CHAR *)str, strlen (str)) != NULL)
{ {
do_assert (pfile); do_assert (pfile);
cpp_pop_buffer (pfile); cpp_pop_buffer (pfile);
@ -1689,7 +1691,7 @@ cpp_unassert (pfile, str)
cpp_reader *pfile; cpp_reader *pfile;
const char *str; const char *str;
{ {
if (cpp_push_buffer (pfile, str, strlen (str)) != NULL) if (cpp_push_buffer (pfile, (const U_CHAR *)str, strlen (str)) != NULL)
{ {
do_unassert (pfile); do_unassert (pfile);
cpp_pop_buffer (pfile); cpp_pop_buffer (pfile);

View File

@ -329,4 +329,6 @@ local_mb_cur_max ()
return 1; /* default */ return 1; /* default */
#endif #endif
} }
#else /* MULTIBYTE_CHARS */
extern int dummy; /* silence 'ANSI C forbids an empty source file' warning */
#endif /* MULTIBYTE_CHARS */ #endif /* MULTIBYTE_CHARS */

View File

@ -1,3 +1,7 @@
2000-05-03 Zack Weinberg <zack@wolery.cumb.org>
* symcat.h: Remove #endif label.
2000-04-28 Kenneth Block <block@zk3.dec.com> 2000-04-28 Kenneth Block <block@zk3.dec.com>
Jason Merrill <jason@casey.cygnus.com> Jason Merrill <jason@casey.cygnus.com>

View File

@ -46,4 +46,4 @@
to "foo". */ to "foo". */
#define XSTRING(s) STRINGX(s) #define XSTRING(s) STRINGX(s)
#endif SYM_CAT_H #endif