/* Protoize program - Original version by Ron Guilmette (rfg@segfault.us.com).
Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of GCC.
GCC 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
+Software Foundation; either version 3, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
for more details.
You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA. */
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
#include "config.h"
#include "system.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-#undef abort
#include "version.h"
/* Include getopt.h for the sake of getopt_long. */
static int errors = 0;
/* Option flags. */
+/* ??? The variables are not marked static because some of them have
+ the same names as gcc variables declared in options.h. */
/* ??? These comments should say what the flag mean as well as the options
that set them. */
something other than gcc. */
static const char *compiler_file_name = "gcc";
-static int version_flag = 0; /* Print our version number. */
-static int quiet_flag = 0; /* Don't print messages normally. */
-static int nochange_flag = 0; /* Don't convert, just say what files
- we would have converted. */
-static int nosave_flag = 0; /* Don't save the old version. */
-static int keep_flag = 0; /* Don't delete the .X files. */
+int version_flag = 0; /* Print our version number. */
+int quiet_flag = 0; /* Don't print messages normally. */
+int nochange_flag = 0; /* Don't convert, just say what files
+ we would have converted. */
+int nosave_flag = 0; /* Don't save the old version. */
+int keep_flag = 0; /* Don't delete the .X files. */
static const char ** compile_params = 0; /* Option string for gcc. */
#ifdef UNPROTOIZE
static const char *indent_string = " "; /* Indentation for newly
inserted parm decls. */
#else /* !defined (UNPROTOIZE) */
-static int local_flag = 0; /* Insert new local decls (when?). */
-static int global_flag = 0; /* set by -g option */
-static int cplusplus_flag = 0; /* Rename converted files to *.C. */
+int local_flag = 0; /* Insert new local decls (when?). */
+int global_flag = 0; /* set by -g option */
+int cplusplus_flag = 0; /* Rename converted files to *.C. */
static const char *nondefault_syscalls_dir = 0; /* Dir to look for
SYSCALLS.c.X in. */
#endif /* !defined (UNPROTOIZE) */
\f
/* Translate and output an error message. */
static void
-notice (const char *msgid, ...)
+notice (const char *cmsgid, ...)
{
va_list ap;
- va_start (ap, msgid);
- vfprintf (stderr, _(msgid), ap);
+ va_start (ap, cmsgid);
+ vfprintf (stderr, _(cmsgid), ap);
va_end (ap);
}
if (errno_val == EINTR)
continue;
#endif
- notice ("%s: error writing file `%s': %s\n",
+ notice ("%s: error writing file '%s': %s\n",
pname, shortpath (NULL, out_fname), xstrerror (errno_val));
return;
}
{
const struct default_include *p;
- if (! IS_ABSOLUTE_PATH (path))
- abort (); /* Must be an absolutized filename. */
+ gcc_assert (IS_ABSOLUTE_PATH (path));
for (p = cpp_include_defaults; p->fname; p++)
if (!strncmp (path, p->fname, strlen (p->fname))
dir_last_slash = slash;
}
#endif
- if (dir_last_slash)
- *dir_last_slash = '\0';
- else
- abort (); /* Should have been an absolutized filename. */
+ gcc_assert (dir_last_slash);
+ *dir_last_slash = '\0';
}
if (access (path, W_OK))
dir_last_slash = slash;
}
#endif
- if (dir_last_slash)
- *dir_last_slash = '\0';
- else
- abort (); /* Should have been an absolutized filename. */
+ gcc_assert (dir_last_slash);
+ *dir_last_slash = '\0';
}
if (access (path, R_OK))
{
if (!quiet_flag)
- notice ("%s: warning: no read access for file `%s'\n",
+ notice ("%s: warning: no read access for file '%s'\n",
pname, shortpath (NULL, path));
return 0;
}
if (access (path, W_OK))
{
if (!quiet_flag)
- notice ("%s: warning: no write access for file `%s'\n",
+ notice ("%s: warning: no write access for file '%s'\n",
pname, shortpath (NULL, path));
return 0;
}
if (access (dir_name, W_OK))
{
if (!quiet_flag)
- notice ("%s: warning: no write access for dir containing `%s'\n",
+ notice ("%s: warning: no write access for dir containing '%s'\n",
pname, shortpath (NULL, path));
return 0;
}
{
if (strcmp (def_dec_p->ansi_decl, other->ansi_decl))
{
- notice ("%s:%d: declaration of function `%s' takes different forms\n",
+ notice ("%s:%d: declaration of function '%s' takes different forms\n",
def_dec_p->file->hash_entry->symbol,
def_dec_p->line,
def_dec_p->hash_entry->symbol);
concat (compile_params[input_file_name_index], aux_info_suffix, NULL);
if (!quiet_flag)
- notice ("%s: compiling `%s'\n",
+ notice ("%s: compiling '%s'\n",
pname, compile_params[input_file_name_index]);
{
}
return 1;
}
- abort ();
+ gcc_unreachable ();
}
}
\f
{
if (is_syscalls)
{
- notice ("%s: warning: missing SYSCALLS file `%s'\n",
+ notice ("%s: warning: missing SYSCALLS file '%s'\n",
pname, aux_info_filename);
return;
}
else
{
int errno_val = errno;
- notice ("%s: can't read aux info file `%s': %s\n",
+ notice ("%s: can't read aux info file '%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
xstrerror (errno_val));
errors++;
if (access (aux_info_filename, R_OK) == -1)
{
int errno_val = errno;
- notice ("%s: can't read aux info file `%s': %s\n",
+ notice ("%s: can't read aux info file '%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
xstrerror (errno_val));
errors++;
if (stat (aux_info_filename, &stat_buf) == -1)
{
int errno_val = errno;
- notice ("%s: can't get status of aux info file `%s': %s\n",
+ notice ("%s: can't get status of aux info file '%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
xstrerror (errno_val));
errors++;
if (stat (base_source_filename, &stat_buf) == -1)
{
int errno_val = errno;
- notice ("%s: can't get status of aux info file `%s': %s\n",
+ notice ("%s: can't get status of aux info file '%s': %s\n",
pname, shortpath (NULL, base_source_filename),
xstrerror (errno_val));
errors++;
if ((aux_info_file = open (aux_info_filename, fd_flags, 0444 )) == -1)
{
int errno_val = errno;
- notice ("%s: can't open aux info file `%s' for reading: %s\n",
+ notice ("%s: can't open aux info file '%s' for reading: %s\n",
pname, shortpath (NULL, aux_info_filename),
xstrerror (errno_val));
return;
(int) aux_info_size)
{
int errno_val = errno;
- notice ("%s: error reading aux info file `%s': %s\n",
+ notice ("%s: error reading aux info file '%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
xstrerror (errno_val));
free (aux_info_base);
if (close (aux_info_file))
{
int errno_val = errno;
- notice ("%s: error closing aux info file `%s': %s\n",
+ notice ("%s: error closing aux info file '%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
xstrerror (errno_val));
free (aux_info_base);
if (unlink (aux_info_filename) == -1)
{
int errno_val = errno;
- notice ("%s: can't delete aux info file `%s': %s\n",
+ notice ("%s: can't delete aux info file '%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
xstrerror (errno_val));
}
if (keep_it && unlink (aux_info_filename) == -1)
{
int errno_val = errno;
- notice ("%s: can't delete file `%s': %s\n",
+ notice ("%s: can't delete file '%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
xstrerror (errno_val));
return;
if (rename (filename, new_filename) == -1)
{
int errno_val = errno;
- notice ("%s: warning: can't rename file `%s' to `%s': %s\n",
+ notice ("%s: warning: can't rename file '%s' to '%s': %s\n",
pname, shortpath (NULL, filename),
shortpath (NULL, new_filename), xstrerror (errno_val));
errors++;
{
extern_def_p = dd_p; /* save a pointer to the definition */
if (!quiet_flag)
- notice ("%s: warning: using formals list from %s(%d) for function `%s'\n",
+ notice ("%s: warning: using formals list from %s(%d) for function '%s'\n",
pname,
shortpath (NULL, dd_p->file->hash_entry->symbol),
dd_p->line, dd_p->hash_entry->symbol);
*p++ = '?';
strcpy (p, ");");
- notice ("%s: %d: `%s' used but missing from SYSCALLS\n",
+ notice ("%s: %d: '%s' used but missing from SYSCALLS\n",
shortpath (NULL, file), user->line,
needed+7); /* Don't print "extern " */
}
#if 0
else
- notice ("%s: %d: warning: no extern definition for `%s'\n",
+ notice ("%s: %d: warning: no extern definition for '%s'\n",
shortpath (NULL, file), user->line,
user->hash_entry->symbol);
#endif
if (num_static_defs == 0)
{
if (!quiet_flag)
- notice ("%s: warning: no static definition for `%s' in file `%s'\n",
+ notice ("%s: warning: no static definition for '%s' in file '%s'\n",
pname, head->hash_entry->symbol,
shortpath (NULL, user->file->hash_entry->symbol));
}
else if (num_static_defs > 1)
{
- notice ("%s: multiple static defs of `%s' in file `%s'\n",
+ notice ("%s: multiple static defs of '%s' in file '%s'\n",
pname, head->hash_entry->symbol,
shortpath (NULL, user->file->hash_entry->symbol));
return NULL;
static const char *
seek_to_line (int n)
{
- if (n < last_known_line_number)
- abort ();
+ gcc_assert (n >= last_known_line_number);
while (n > last_known_line_number)
{
if (setjmp (source_confusion_recovery))
{
restore_pointers ();
- notice ("%s: declaration of function `%s' not converted\n",
+ notice ("%s: declaration of function '%s' not converted\n",
pname, function_to_edit);
return;
}
else
{
if (!quiet_flag)
- notice ("%s: warning: too many parameter lists in declaration of `%s'\n",
+ notice ("%s: warning: too many parameter lists in declaration of '%s'\n",
pname, def_dec_p->hash_entry->symbol);
check_source (0, end_formals); /* leave the declaration intact */
}
if (this_f_list_chain_item)
{
if (!quiet_flag)
- notice ("\n%s: warning: too few parameter lists in declaration of `%s'\n",
+ notice ("\n%s: warning: too few parameter lists in declaration of '%s'\n",
pname, def_dec_p->hash_entry->symbol);
check_source (0, start_formals); /* leave the decl intact */
}
if (func_name_len != strlen (expected)
|| strncmp (func_name_start, expected, func_name_len))
{
- notice ("%s: %d: warning: found `%s' but expected `%s'\n",
+ notice ("%s: %d: warning: found '%s' but expected '%s'\n",
shortpath (NULL, def_dec_p->file->hash_entry->symbol),
identify_lineno (func_name_start),
dupnstr (func_name_start, func_name_len),
if (setjmp (source_confusion_recovery))
{
restore_pointers ();
- notice ("%s: local declaration for function `%s' not inserted\n",
+ notice ("%s: local declaration for function '%s' not inserted\n",
pname, function_to_edit);
return;
}
if (*start_of_block != '{')
{
if (!quiet_flag)
- notice ("\n%s: %d: warning: can't add declaration of `%s' into macro call\n",
+ notice ("\n%s: %d: warning: can't add declaration of '%s' into macro call\n",
def_dec_p->file->hash_entry->symbol, def_dec_p->line,
def_dec_p->hash_entry->symbol);
return;
if (setjmp (source_confusion_recovery))
{
restore_pointers ();
- notice ("%s: global declarations for file `%s' not inserted\n",
+ notice ("%s: global declarations for file '%s' not inserted\n",
pname, shortpath (NULL, file_p->hash_entry->symbol));
return;
}
separate routine above. */
static void
-edit_fn_definition (const def_dec_info *def_dec_p, const char *clean_text_p)
+edit_fn_definition (const def_dec_info *def_dec_p,
+ const char *volatile clean_text_p)
{
const char *end_formals;
const char *function_to_edit = def_dec_p->hash_entry->symbol;
if (setjmp (source_confusion_recovery))
{
restore_pointers ();
- notice ("%s: definition of function `%s' not converted\n",
+ notice ("%s: definition of function '%s' not converted\n",
pname, function_to_edit);
return;
}
if (edit_formals_lists (end_formals, def_dec_p->f_list_count, def_dec_p))
{
restore_pointers ();
- notice ("%s: definition of function `%s' not converted\n",
+ notice ("%s: definition of function '%s' not converted\n",
pname, function_to_edit);
return;
}
{
if (!ISSPACE ((const unsigned char)*scan_p))
*scan_p = ' ';
- if (++scan_p >= new_clean_text_limit)
- abort ();
+ ++scan_p;
+ gcc_assert (scan_p < new_clean_text_limit);
}
*scan_p++ = ' ';
*scan_p = ' ';
{
if (!ISSPACE ((const unsigned char)*scan_p))
*scan_p = ' ';
- if (++scan_p >= new_clean_text_limit)
- abort ();
+ ++scan_p;
+ gcc_assert (scan_p < new_clean_text_limit);
}
*scan_p++ = ' ';
break;
scan_p[1] = ' ';
if (!ISSPACE ((const unsigned char)*scan_p))
*scan_p = ' ';
- if (++scan_p >= new_clean_text_limit)
- abort ();
+ ++scan_p;
+ gcc_assert (scan_p < new_clean_text_limit);
}
*scan_p++ = ' ';
break;
scan_p[1] = ' ';
if (!ISSPACE ((const unsigned char)*scan_p))
*scan_p = ' ';
- if (++scan_p >= new_clean_text_limit)
- abort ();
+ ++scan_p;
+ gcc_assert (scan_p < new_clean_text_limit);
}
if (!ISSPACE ((const unsigned char)*scan_p))
*scan_p = ' ';
goto not_missed;
#if 0
- notice ("%s: found definition of `%s' at %s(%d)\n",
+ notice ("%s: found definition of '%s' at %s(%d)\n",
pname,
func_name,
shortpath (NULL, file_p->hash_entry->symbol),
/* If we make it here, then we did not know about this
function definition. */
- notice ("%s: %d: warning: `%s' excluded by preprocessing\n",
+ notice ("%s: %d: warning: '%s' excluded by preprocessing\n",
shortpath (NULL, file_p->hash_entry->symbol),
identify_lineno (id_start), func_name);
notice ("%s: function definition not converted\n",
&& !in_system_include_dir (convert_filename)
#endif /* defined (UNPROTOIZE) */
)
- notice ("%s: `%s' not converted\n",
+ notice ("%s: '%s' not converted\n",
pname, shortpath (NULL, convert_filename));
return;
}
/* Let the user know what we are up to. */
if (nochange_flag)
- notice ("%s: would convert file `%s'\n",
+ notice ("%s: would convert file '%s'\n",
pname, shortpath (NULL, convert_filename));
else
- notice ("%s: converting file `%s'\n",
+ notice ("%s: converting file '%s'\n",
pname, shortpath (NULL, convert_filename));
fflush (stderr);
if (stat (convert_filename, &stat_buf) == -1)
{
int errno_val = errno;
- notice ("%s: can't get status for file `%s': %s\n",
+ notice ("%s: can't get status for file '%s': %s\n",
pname, shortpath (NULL, convert_filename),
xstrerror (errno_val));
return;
if ((input_file = open (convert_filename, fd_flags, 0444)) == -1)
{
int errno_val = errno;
- notice ("%s: can't open file `%s' for reading: %s\n",
+ notice ("%s: can't open file '%s' for reading: %s\n",
pname, shortpath (NULL, convert_filename),
xstrerror (errno_val));
return;
{
int errno_val = errno;
close (input_file);
- notice ("\n%s: error reading input file `%s': %s\n",
+ notice ("\n%s: error reading input file '%s': %s\n",
pname, shortpath (NULL, convert_filename),
xstrerror (errno_val));
return;
if ((clean_file = creat (clean_filename, 0666)) == -1)
{
int errno_val = errno;
- notice ("%s: can't create/open clean file `%s': %s\n",
+ notice ("%s: can't create/open clean file '%s': %s\n",
pname, shortpath (NULL, clean_filename),
xstrerror (errno_val));
return;
if (access (new_filename, F_OK) == 0)
{
if (!quiet_flag)
- notice ("%s: warning: file `%s' already saved in `%s'\n",
+ notice ("%s: warning: file '%s' already saved in '%s'\n",
pname,
shortpath (NULL, convert_filename),
shortpath (NULL, new_filename));
else if (rename (convert_filename, new_filename) == -1)
{
int errno_val = errno;
- notice ("%s: can't link file `%s' to `%s': %s\n",
+ notice ("%s: can't link file '%s' to '%s': %s\n",
pname,
shortpath (NULL, convert_filename),
shortpath (NULL, new_filename),
/* The file may have already been renamed. */
if (errno_val != ENOENT)
{
- notice ("%s: can't delete file `%s': %s\n",
+ notice ("%s: can't delete file '%s': %s\n",
pname, shortpath (NULL, convert_filename),
xstrerror (errno_val));
return;
if ((output_file = creat (convert_filename, 0666)) == -1)
{
int errno_val = errno;
- notice ("%s: can't create/open output file `%s': %s\n",
+ notice ("%s: can't create/open output file '%s': %s\n",
pname, shortpath (NULL, convert_filename),
xstrerror (errno_val));
return;
if (chmod (convert_filename, stat_buf.st_mode) == -1)
{
int errno_val = errno;
- notice ("%s: can't change mode of file `%s': %s\n",
+ notice ("%s: can't change mode of file '%s': %s\n",
pname, shortpath (NULL, convert_filename),
xstrerror (errno_val));
}
signal (SIGCHLD, SIG_DFL);
#endif
+ /* Unlock the stdio streams. */
+ unlock_std_streams ();
+
gcc_init_libintl ();
cwd_buffer = getpwd ();
else
{
if (version_flag)
- fprintf (stderr, "%s: %s\n", pname, version_string);
+ fprintf (stderr, "%s %s%s\n", pname, pkgversion_string,
+ version_string);
do_processing ();
}