X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ffix-header.c;h=5402e949db47288d6b680fa043859324d1856e57;hb=d4c3dca6accbdc3c4573c6078880ad1b36a81d44;hp=f01eadc1b30a9d85e26a26ddfc5c539316189cfa;hpb=745272dbe781216d3b1bb4848b3af9a9d8dda016;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/fix-header.c b/gcc/fix-header.c index f01eadc1b30..5402e949db4 100644 --- a/gcc/fix-header.c +++ b/gcc/fix-header.c @@ -1,19 +1,20 @@ /* fix-header.c - Make C header file suitable for C++. - Copyright (C) 1993, 94-99, 2000 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, + 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. -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, or (at your option) any -later version. + 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 3, 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. + 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING3. If not see + . */ /* This program massages a system include file (such as stdio.h), into a form that is compatible with GNU C and GNU C++. @@ -66,18 +67,39 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ * INFILE.H is a full pathname for the input file (e.g. /usr/include/stdio.h) * OUTFILE.H is the full pathname for where to write the output file, if anything needs to be done. (e.g. ./include/stdio.h) - * OPTIONS are such as you would pass to cpp. + * OPTIONS can be -D or -I switches as you would pass to cpp. Written by Per Bothner , July 1993. */ -#include "hconfig.h" +#include "bconfig.h" #include "system.h" +#include "coretypes.h" +#include "tm.h" #include "obstack.h" #include "scan.h" #include "cpplib.h" +#include "incpath.h" +#include "errors.h" -static void v_fatal PARAMS ((const char *, va_list)) ATTRIBUTE_NORETURN; -static void fatal PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; +#ifdef TARGET_EXTRA_INCLUDES +void +TARGET_EXTRA_INCLUDES (const char *sysroot ATTRIBUTE_UNUSED, + const char *iprefix ATTRIBUTE_UNUSED, + int stdinc ATTRIBUTE_UNUSED) +{ +} +#endif + +#ifdef TARGET_EXTRA_PRE_INCLUDES +void +TARGET_EXTRA_PRE_INCLUDES (const char *sysroot ATTRIBUTE_UNUSED, + const char *iprefix ATTRIBUTE_UNUSED, + int stdinc ATTRIBUTE_UNUSED) +{ +} +#endif + +struct line_maps line_table; sstring buf; @@ -85,10 +107,6 @@ int verbose = 0; int partial_count = 0; int warnings = 0; -/* We no longer need to add extern "C", because cpp implicitly - forces the standard include files to be treated as C. */ -/*#define ADD_MISSING_EXTERN_C 1 */ - #if ADD_MISSING_EXTERN_C int missing_extern_C_count = 0; #endif @@ -103,7 +121,7 @@ int missing_extern_C_count = 0; directory. (It might be more efficient to do directory pruning earlier in fixproto, but this is simpler and easier to customize.) */ -static char *files_to_ignore[] = { +static const char *const files_to_ignore[] = { "X11/", FIXPROTO_IGNORE_LIST 0 @@ -113,6 +131,7 @@ static char *files_to_ignore[] = { char *inf_buffer; char *inf_limit; char *inf_ptr; +static const char *cur_file; /* Certain standard files get extra treatment */ @@ -186,22 +205,21 @@ struct symbol_list { struct symbol_list symbol_table[SYMBOL_TABLE_SIZE]; int cur_symbol_table_size; -static void add_symbols PARAMS ((symbol_flags, namelist)); -static struct fn_decl *lookup_std_proto PARAMS ((const char *, int)); -static void write_lbrac PARAMS ((void)); -static void recognized_macro PARAMS ((const char *)); -static void check_macro_names PARAMS ((cpp_reader *, namelist)); -static void read_scan_file PARAMS ((char *, int, char **)); -static void write_rbrac PARAMS ((void)); -static int inf_skip_spaces PARAMS ((int)); -static int inf_read_upto PARAMS ((sstring *, int)); -static int inf_scan_ident PARAMS ((sstring *, int)); -static int check_protection PARAMS ((int *, int *)); +static void add_symbols (symbol_flags, namelist); +static struct fn_decl *lookup_std_proto (const char *, int); +static void write_lbrac (void); +static void recognized_macro (const char *); +static void check_macro_names (cpp_reader *, namelist); +static void read_scan_file (char *, int, char **); +static void write_rbrac (void); +static int inf_skip_spaces (int); +static int inf_read_upto (sstring *, int); +static int inf_scan_ident (sstring *, int); +static int check_protection (int *, int *); +static void cb_file_change (cpp_reader *, const struct line_map *); static void -add_symbols (flags, names) - symbol_flags flags; - namelist names; +add_symbols (symbol_flags flags, namelist names) { symbol_table[cur_symbol_table_size].flags = flags; symbol_table[cur_symbol_table_size].names = names; @@ -212,9 +230,9 @@ add_symbols (flags, names) } struct std_include_entry { - const char *name; - symbol_flags flags; - namelist names; + const char *const name; + const symbol_flags flags; + const namelist names; }; const char NONE[] = ""; /* The empty namelist. */ @@ -222,9 +240,9 @@ const char NONE[] = ""; /* The empty namelist. */ /* Special name to indicate a continuation line in std_include_table. */ const char CONTINUED[] = ""; -struct std_include_entry *include_entry; +const struct std_include_entry *include_entry; -struct std_include_entry std_include_table [] = { +const struct std_include_entry std_include_table [] = { { "ctype.h", ANSI_SYMBOL, "isalnum\0isalpha\0iscntrl\0isdigit\0isgraph\0islower\0\ isprint\0ispunct\0isspace\0isupper\0isxdigit\0tolower\0toupper\0" }, @@ -266,7 +284,8 @@ tan\0tanh\0" }, sigfillset sigismember sigpending sigprocmask sigsuspend" because these need sigset_t or struct sigaction. Most systems that provide them will also declare them. */ - { "signal.h", ANSI_SYMBOL, "kill\0raise\0" }, + { "signal.h", ANSI_SYMBOL, "raise\0" }, + { CONTINUED, POSIX1_SYMBOL, "kill\0" }, { "stdio.h", ANSI_SYMBOL, "clearerr\0fclose\0feof\0ferror\0fflush\0fgetc\0fgetpos\0\ @@ -285,9 +304,10 @@ tmpnam\0ungetc\0" }, Should perhaps also add NULL */ { "stdlib.h", ANSI_SYMBOL, "abort\0abs\0atexit\0atof\0atoi\0atol\0bsearch\0calloc\0\ -exit\0free\0getenv\0labs\0malloc\0putenv\0qsort\0rand\0realloc\0\ +exit\0free\0getenv\0labs\0malloc\0qsort\0rand\0realloc\0\ srand\0strtod\0strtol\0strtoul\0system\0" }, { CONTINUED, ANSI_SYMBOL|MACRO_SYMBOL, "EXIT_FAILURE\0EXIT_SUCCESS\0" }, + { CONTINUED, POSIX1_SYMBOL, "putenv\0" }, { "string.h", ANSI_SYMBOL, "memchr\0memcmp\0memcpy\0memmove\0memset\0\ strcat\0strchr\0strcmp\0strcoll\0strcpy\0strcspn\0strerror\0\ @@ -336,7 +356,8 @@ WTERMSIG\0WNOHANG\0WNOTRACED\0" }, "cfgetispeed\0cfgetospeed\0cfsetispeed\0cfsetospeed\0tcdrain\0tcflow\0tcflush\0tcgetattr\0tcsendbreak\0tcsetattr\0" }, { "time.h", ANSI_SYMBOL, - "asctime\0clock\0ctime\0difftime\0gmtime\0localtime\0mktime\0strftime\0time\0tzset\0" }, + "asctime\0clock\0ctime\0difftime\0gmtime\0localtime\0mktime\0strftime\0time\0" }, + { CONTINUED, POSIX1_SYMBOL, "tzset\0" }, { "unistd.h", POSIX1_SYMBOL, "_exit\0access\0alarm\0chdir\0chown\0close\0ctermid\0cuserid\0\ @@ -369,16 +390,12 @@ int seen_errno = 0; /* The following are only used when handling stdlib.h */ int seen_EXIT_FAILURE = 0, seen_EXIT_SUCCESS = 0; -#define obstack_chunk_alloc xmalloc -#define obstack_chunk_free free struct obstack scan_file_obstack; /* NOTE: If you edit this, also edit gen-protos.c !! */ static struct fn_decl * -lookup_std_proto (name, name_length) - const char *name; - int name_length; +lookup_std_proto (const char *name, int name_length) { int i = hashstr (name, name_length) % HASH_SIZE; int i0 = i; @@ -392,14 +409,12 @@ lookup_std_proto (name, name_length) && strncmp (fn->fname, name, name_length) == 0) return fn; i = (i+1) % HASH_SIZE; - if (i == i0) - abort (); + gcc_assert (i != i0); } } char *inc_filename; int inc_filename_length; -const char *progname = "fix-header"; FILE *outf; sstring line; @@ -408,15 +423,9 @@ int lbrac_line, rbrac_line; int required_unseen_count = 0; int required_other = 0; -static void -write_lbrac () +static void +write_lbrac (void) { - -#if ADD_MISSING_EXTERN_C - if (missing_extern_C_count + required_unseen_count > 0) - fprintf (outf, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n"); -#endif - if (partial_count) { fprintf (outf, "#ifndef _PARAMS\n"); @@ -431,8 +440,6 @@ write_lbrac () struct partial_proto { struct partial_proto *next; - char *fname; /* name of function */ - char *rtype; /* return type */ struct fn_decl *fn; int line_seen; }; @@ -446,8 +453,7 @@ struct partial_proto required_dummy_proto, seen_dummy_proto; #define SEEN(FN) ((FN)->partial == &seen_dummy_proto) static void -recognized_macro (fname) - const char *fname; +recognized_macro (const char *fname) { /* The original include file defines fname as a macro. */ struct fn_decl *fn = lookup_std_proto (fname, strlen (fname)); @@ -496,15 +502,12 @@ recognized_macro (fname) } void -recognized_extern (name, name_length, type, type_length) - const char *name; - const char *type ATTRIBUTE_UNUSED; - int name_length, type_length ATTRIBUTE_UNUSED; +recognized_extern (const cpp_token *name) { switch (special_file_handling) { case errno_h: - if (name_length == 5 && strncmp (name, "errno", 5) == 0 && !seen_errno) + if (cpp_ideq (name, "errno")) seen_errno = 1, required_other--; break; @@ -514,35 +517,20 @@ recognized_extern (name, name_length, type, type_length) } /* Called by scan_decls if it saw a function definition for a function - named FNAME, with return type RTYPE, and argument list ARGS, - in source file FILE_SEEN on line LINE_SEEN. - KIND is 'I' for an inline function; - 'F' if a normal function declaration preceded by 'extern "C"' - (or nested inside 'extern "C"' braces); or - 'f' for other function declarations. */ + named FNAME. KIND is 'I' for an inline function; 'F' if a normal + function declaration preceded by 'extern "C"' (or nested inside + 'extern "C"' braces); or 'f' for other function declarations. */ void -recognized_function (fname, fname_length, - kind, rtype, rtype_length, - have_arg_list, file_seen, line_seen) - const char *fname; - int fname_length; - int kind; /* One of 'f' 'F' or 'I' */ - const char *rtype; - int rtype_length; - int have_arg_list; - const char *file_seen; - int line_seen; +recognized_function (const cpp_token *fname, unsigned int line, int kind, + int have_arg_list) { struct partial_proto *partial; int i; struct fn_decl *fn; -#if ADD_MISSING_EXTERN_C - if (kind == 'f') - missing_extern_C_count++; -#endif - fn = lookup_std_proto (fname, fname_length); + fn = lookup_std_proto ((const char *) NODE_NAME (fname->val.node), + NODE_LEN (fname->val.node)); /* Remove the function from the list of required function. */ if (fn) @@ -555,33 +543,30 @@ recognized_function (fname, fname_length, /* If we have a full prototype, we're done. */ if (have_arg_list) return; - + if (kind == 'I') /* don't edit inline function */ return; /* If the partial prototype was included from some other file, we don't need to patch it up (in this run). */ - i = strlen (file_seen); + i = strlen (cur_file); if (i < inc_filename_length - || strcmp (inc_filename, file_seen + (i - inc_filename_length)) != 0) + || strcmp (inc_filename, cur_file + (i - inc_filename_length)) != 0) return; if (fn == NULL) return; - if (fn->params[0] == '\0' || strcmp (fn->params, "void") == 0) + if (fn->params[0] == '\0') return; /* We only have a partial function declaration, so remember that we have to add a complete prototype. */ partial_count++; - partial = (struct partial_proto *) - obstack_alloc (&scan_file_obstack, sizeof (struct partial_proto)); - partial->fname = obstack_alloc (&scan_file_obstack, fname_length + 1); - bcopy (fname, partial->fname, fname_length); - partial->fname[fname_length] = 0; - partial->rtype = obstack_alloc (&scan_file_obstack, rtype_length + 1); - sprintf (partial->rtype, "%.*s", rtype_length, rtype); - partial->line_seen = line_seen; + partial + = (struct partial_proto *) + obstack_alloc (&scan_file_obstack, + sizeof (struct partial_proto)); + partial->line_seen = line; partial->fn = fn; fn->partial = partial; partial->next = partial_proto_list; @@ -589,7 +574,7 @@ recognized_function (fname, fname_length, if (verbose) { fprintf (stderr, "(%s: %s non-prototype function declaration.)\n", - inc_filename, partial->fname); + inc_filename, fn->fname); } } @@ -597,83 +582,126 @@ recognized_function (fname, fname_length, call recognized_macro on it. */ static void -check_macro_names (pfile, names) - cpp_reader *pfile; - namelist names; +check_macro_names (cpp_reader *pfile, namelist names) { + size_t len; while (*names) { - if (cpp_lookup (pfile, names, -1, -1)) + len = strlen (names); + if (cpp_defined (pfile, (const unsigned char *)names, len)) recognized_macro (names); - names += strlen (names) + 1; + names += len + 1; } } static void -read_scan_file (in_fname, argc, argv) - char *in_fname; - int argc; - char **argv; +cb_file_change (cpp_reader *pfile ATTRIBUTE_UNUSED, + const struct line_map *map) { - cpp_reader scan_in; - cpp_options scan_options; + /* Just keep track of current file name. */ + cur_file = map == NULL ? NULL : map->to_file; +} + +static void +read_scan_file (char *in_fname, int argc, char **argv) +{ + cpp_reader *scan_in; + cpp_callbacks *cb; + cpp_options *options; struct fn_decl *fn; - int i; - register struct symbol_list *cur_symbols; + int i, strings_processed; + struct symbol_list *cur_symbols; - obstack_init (&scan_file_obstack); + obstack_init (&scan_file_obstack); - cpp_reader_init (&scan_in); - scan_in.opts = &scan_options; - cpp_options_init (&scan_options); - i = cpp_handle_options (&scan_in, argc, argv); - if (i < argc && ! CPP_FATAL_ERRORS (&scan_in)) - cpp_fatal (&scan_in, "Invalid option `%s'", argv[i]); - if (CPP_FATAL_ERRORS (&scan_in)) + linemap_init (&line_table); + scan_in = cpp_create_reader (CLK_GNUC89, NULL, &line_table); + cb = cpp_get_callbacks (scan_in); + cb->file_change = cb_file_change; + + /* We are going to be scanning a header file out of its proper context, + so ignore warnings and errors. */ + options = cpp_get_options (scan_in); + options->inhibit_warnings = 1; + options->inhibit_errors = 1; + cpp_post_options (scan_in); + + if (!cpp_read_main_file (scan_in, in_fname)) exit (FATAL_EXIT_CODE); - if (! cpp_start_read (&scan_in, in_fname)) + cpp_change_file (scan_in, LC_RENAME, ""); + cpp_init_builtins (scan_in, true); + cpp_change_file (scan_in, LC_RENAME, in_fname); + + /* Process switches after builtins so -D can override them. */ + for (i = 0; i < argc; i += strings_processed) + { + strings_processed = 0; + if (argv[i][0] == '-') + { + if (argv[i][1] == 'I') + { + if (argv[i][2] != '\0') + { + strings_processed = 1; + add_path (xstrdup (argv[i] + 2), BRACKET, false, false); + } + else if (i + 1 != argc) + { + strings_processed = 2; + add_path (xstrdup (argv[i + 1]), BRACKET, false, false); + } + } + else if (argv[i][1] == 'D') + { + if (argv[i][2] != '\0') + strings_processed = 1, cpp_define (scan_in, argv[i] + 2); + else if (i + 1 != argc) + strings_processed = 2, cpp_define (scan_in, argv[i + 1]); + } + } + + if (strings_processed == 0) + break; + } + + if (i < argc) + cpp_error (scan_in, CPP_DL_ERROR, "invalid option `%s'", argv[i]); + if (cpp_errors (scan_in)) exit (FATAL_EXIT_CODE); - CPP_OPTIONS (&scan_in)->no_line_commands = 1; - scan_decls (&scan_in, argc, argv); - for (cur_symbols = &symbol_table[0]; cur_symbols->names; cur_symbols++) - check_macro_names (&scan_in, cur_symbols->names); + register_include_chains (scan_in, NULL /* sysroot */, NULL /* iprefix */, + NULL /* imultilib */, true /* stdinc */, + false /* cxx_stdinc */, false /* verbose */); - if (verbose && (scan_in.errors + warnings) > 0) - fprintf (stderr, "(%s: %d errors and %d warnings from cpp)\n", - inc_filename, scan_in.errors, warnings); - if (scan_in.errors) - exit (SUCCESS_EXIT_CODE); + /* We are scanning a system header, so mark it as such. */ + cpp_make_system_header (scan_in, 1, 0); + + scan_decls (scan_in, argc, argv); + for (cur_symbols = &symbol_table[0]; cur_symbols->names; cur_symbols++) + check_macro_names (scan_in, cur_symbols->names); /* Traditionally, getc and putc are defined in terms of _filbuf and _flsbuf. If so, those functions are also required. */ if (special_file_handling == stdio_h && (fn = lookup_std_proto ("_filbuf", 7)) != NULL) { - static char getchar_call[] = "getchar();"; - cpp_buffer *buf - = cpp_push_buffer (&scan_in, getchar_call, sizeof(getchar_call) - 1); - int old_written = CPP_WRITTEN (&scan_in); + unsigned char getchar_call[] = "getchar();\n"; int seen_filbuf = 0; /* Scan the macro expansion of "getchar();". */ + cpp_push_buffer (scan_in, getchar_call, sizeof(getchar_call) - 1, + /* from_stage3 */ true); for (;;) { - enum cpp_token token = cpp_get_token (&scan_in); - int length = CPP_WRITTEN (&scan_in) - old_written; - CPP_SET_WRITTEN (&scan_in, old_written); - if (token == CPP_EOF) /* Should not happen ... */ + const cpp_token *t = cpp_get_token (scan_in); + + if (t->type == CPP_EOF) break; - if (token == CPP_POP && CPP_BUFFER (&scan_in) == buf) - { - cpp_pop_buffer (&scan_in); - break; - } - if (token == CPP_NAME && length == 7 - && strcmp ("_filbuf", scan_in.token_buffer + old_written) == 0) + else if (cpp_ideq (t, "_filbuf")) seen_filbuf++; } + if (seen_filbuf) { int need_filbuf = !SEEN (fn) && !REQUIRED (fn); @@ -689,7 +717,7 @@ read_scan_file (in_fname, argc, argv) SET_REQUIRED (fn); if (need_flsbuf) SET_REQUIRED (flsbuf_fn); - if (need_flsbuf + need_filbuf == 2) + if (need_flsbuf && need_filbuf) new_list = "_filbuf\0_flsbuf\0"; else if (need_flsbuf) new_list = "_flsbuf\0"; @@ -701,11 +729,7 @@ read_scan_file (in_fname, argc, argv) } } - if (required_unseen_count + partial_count + required_other -#if ADD_MISSING_EXTERN_C - + missing_extern_C_count -#endif - == 0) + if (required_unseen_count + partial_count + required_other == 0) { if (verbose) fprintf (stderr, "%s: OK, nothing needs to be done.\n", inc_filename); @@ -721,21 +745,15 @@ read_scan_file (in_fname, argc, argv) if (partial_count) fprintf (stderr, "%s: %d non-prototype function declarations.\n", inc_filename, partial_count); -#if ADD_MISSING_EXTERN_C - if (missing_extern_C_count) - fprintf (stderr, - "%s: %d declarations not protected by extern \"C\".\n", - inc_filename, missing_extern_C_count); -#endif } } static void -write_rbrac () +write_rbrac (void) { struct fn_decl *fn; const char *cptr; - register struct symbol_list *cur_symbols; + struct symbol_list *cur_symbols; if (required_unseen_count) { @@ -794,6 +812,8 @@ write_rbrac () /* In the case of memmove, protect in case the application defines it as a macro before including the header. */ if (!strcmp (fn->fname, "memmove") + || !strcmp (fn->fname, "putc") + || !strcmp (fn->fname, "getc") || !strcmp (fn->fname, "vprintf") || !strcmp (fn->fname, "vfprintf") || !strcmp (fn->fname, "vsprintf") @@ -856,11 +876,6 @@ write_rbrac () break; } - -#if ADD_MISSING_EXTERN_C - if (missing_extern_C_count + required_unseen_count > 0) - fprintf (outf, "#ifdef __cplusplus\n}\n#endif\n"); -#endif } /* Returns 1 iff the file is properly protected from multiple inclusion: @@ -874,8 +889,7 @@ write_rbrac () #define INF_UNGET(c) ((c)!=EOF && inf_ptr--) static int -inf_skip_spaces (c) - int c; +inf_skip_spaces (int c) { for (;;) { @@ -913,9 +927,7 @@ inf_skip_spaces (c) /* Read into STR from inf_buffer upto DELIM. */ static int -inf_read_upto (str, delim) - sstring *str; - int delim; +inf_read_upto (sstring *str, int delim) { int ch; for (;;) @@ -931,18 +943,16 @@ inf_read_upto (str, delim) } static int -inf_scan_ident (s, c) - register sstring *s; - int c; +inf_scan_ident (sstring *s, int c) { s->ptr = s->base; - if (ISALPHA (c) || c == '_') + if (ISIDST (c)) { for (;;) { SSTRING_PUT (s, c); c = INF_GET (); - if (c == EOF || !(ISALNUM (c) || c == '_')) + if (c == EOF || !(ISIDNUM (c))) break; } } @@ -957,8 +967,7 @@ inf_scan_ident (s, c) Otherwise return 0. */ static int -check_protection (ifndef_line, endif_line) - int *ifndef_line, *endif_line; +check_protection (int *ifndef_line, int *endif_line) { int c; int if_nesting = 1; /* Level of nesting of #if's */ @@ -1026,8 +1035,6 @@ check_protection (ifndef_line, endif_line) } else if (!strcmp (buf.base, "define")) { - if (if_nesting != 1) - goto skip_to_eol; c = inf_skip_spaces (c); c = inf_scan_ident (&buf, c); if (buf.base[0] > 0 && strcmp (buf.base, protect_name) == 0) @@ -1061,12 +1068,10 @@ check_protection (ifndef_line, endif_line) return 1; } -extern int main PARAMS ((int, char **)); +extern int main (int, char **); int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { int inf_fd; struct stat sbuf; @@ -1079,16 +1084,17 @@ main (argc, argv) int endif_line; long to_read; long int inf_size; - register struct symbol_list *cur_symbols; + struct symbol_list *cur_symbols; + progname = "fix-header"; if (argv[0] && argv[0][0]) { - register char *p; + char *p; progname = 0; for (p = argv[0]; *p; p++) - if (*p == '/') - progname = p; + if (*p == '/') + progname = p; progname = progname ? progname+1 : argv[0]; } @@ -1105,7 +1111,7 @@ main (argc, argv) #ifdef FIXPROTO_IGNORE_LIST for (i = 0; files_to_ignore[i] != NULL; i++) { - char *ignore_name = files_to_ignore[i]; + const char *const ignore_name = files_to_ignore[i]; int ignore_len = strlen (ignore_name); if (strncmp (inc_filename, ignore_name, ignore_len) == 0) { @@ -1117,7 +1123,7 @@ main (argc, argv) exit (SUCCESS_EXIT_CODE); } } - + } #endif @@ -1137,7 +1143,7 @@ main (argc, argv) if (include_entry->name != NULL) { - struct std_include_entry *entry; + const struct std_include_entry *entry; cur_symbol_table_size = 0; for (entry = include_entry; ;) { @@ -1151,7 +1157,7 @@ main (argc, argv) else symbol_table[0].names = NULL; - /* Count and mark the prototypes required for this include file. */ + /* Count and mark the prototypes required for this include file. */ for (cur_symbols = &symbol_table[0]; cur_symbols->names; cur_symbols++) { int name_len; @@ -1186,10 +1192,7 @@ main (argc, argv) exit (FATAL_EXIT_CODE); } inf_size = sbuf.st_size; - inf_buffer = (char *) xmalloc (inf_size + 2); - inf_buffer[inf_size] = '\n'; - inf_buffer[inf_size + 1] = '\0'; - inf_limit = inf_buffer + inf_size; + inf_buffer = XNEWVEC (char, inf_size + 2); inf_ptr = inf_buffer; to_read = inf_size; @@ -1212,6 +1215,11 @@ main (argc, argv) close (inf_fd); + /* Inf_size may have changed if read was short (as on VMS) */ + inf_buffer[inf_size] = '\n'; + inf_buffer[inf_size + 1] = '\0'; + inf_limit = inf_buffer + inf_size; + /* If file doesn't end with '\n', add one. */ if (inf_limit > inf_buffer && inf_limit[-1] != '\n') inf_limit++; @@ -1255,7 +1263,7 @@ main (argc, argv) c = INF_GET (); if (c == EOF) break; - if (ISALPHA (c) || c == '_') + if (ISIDST (c)) { c = inf_scan_ident (&buf, c); (void) INF_UNGET (c); @@ -1304,34 +1312,3 @@ main (argc, argv) return 0; } - - -static void -v_fatal (str, ap) - const char * str; - va_list ap; -{ - fprintf (stderr, "%s: %s: ", progname, inc_filename); - vfprintf (stderr, str, ap); - fprintf (stderr, "\n"); - - exit (FATAL_EXIT_CODE); -} - -static void -fatal VPARAMS ((const char *str, ...)) -{ -#ifndef ANSI_PROTOTYPES - const char *str; -#endif - va_list ap; - - VA_START(ap, str); - -#ifndef ANSI_PROTOTYPES - str = va_arg (ap, const char *); -#endif - - v_fatal(str, ap); - va_end(ap); -}