aboutsummaryrefslogtreecommitdiff
path: root/gcc/protoize.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/protoize.c')
-rw-r--r--gcc/protoize.c524
1 files changed, 316 insertions, 208 deletions
diff --git a/gcc/protoize.c b/gcc/protoize.c
index 5d4e3f1..b74c3d4 100644
--- a/gcc/protoize.c
+++ b/gcc/protoize.c
@@ -2,7 +2,7 @@
and Computer Technology Corporation (MCC). The author's current
E-mail address is <rfg@ncd.com>.
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1992 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -34,29 +34,28 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define VOLATILE
#endif
-/* It is incorrect to include config.h here, because this file is being
- compiled for the target, and hence definitions concerning only the host
- do not apply. Instead we include tconfig.h, which is the xm file
- *for the target*, which also includes the tm.h file *for the target*.
- This way, we get definitions of POSIX, USG and VMS for the target. */
+#ifndef __STDC__
+#define const
+#endif
-#include "tconfig.h"
+#include "config.h"
-/* The documentation says to use TARGET_POSIX, so check for it as well
- as POSIX. */
-#if defined(TARGET_POSIX) && !defined(POSIX)
-#define POSIX
+#ifdef POSIX /* We should be able to define _POSIX_SOURCE unconditionally,
+ but some systems respond in buggy ways to it,
+ including Sunos 4.1.1. Which we don't classify as POSIX. */
+/* In case this is a POSIX system with an ANSI C compiler,
+ ask for definition of all POSIX facilities. */
+#define _POSIX_SOURCE
#endif
+#if 0
+/* Users are not supposed to use _POSIX_SOURCE to say the
+ system is a POSIX system. That is not what _POSIX_SOURCE means! -- rms */
/* If the user asked for POSIX via _POSIX_SOURCE, turn on POSIX code. */
#if defined(_POSIX_SOURCE) && !defined(POSIX)
#define POSIX
#endif
-
-/* On a POSIX system, request definition of all the POSIX facilities. */
-#if defined(POSIX) && !defined(_POSIX_SOURCE)
-#define _POSIX_SOURCE
-#endif
+#endif /* 0 */
#include <stdio.h>
#include <ctype.h>
@@ -64,14 +63,15 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/dir.h>
+#if ! defined (USG) || defined (SVR4)
#include <sys/wait.h>
+#endif
#include <setjmp.h>
#include "gvarargs.h"
#include "getopt.h"
#ifndef PATH_MAX /* <limits.h> defines this on most POSIX systems. */
#include <sys/param.h>
-#define PATH_MAX MAXPATHLEN
/* Sometimes <sys/param.h> defines these macros. */
#undef CHAR_BIT
#undef CHAR_MAX
@@ -95,14 +95,6 @@ extern int errno;
extern char *sys_errlist[];
extern char *version_string;
-#if defined(POSIX)
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <string.h>
-
/* Systems which are compatible only with POSIX 1003.1-1988 (but *not*
with POSIX 1003.1-1990), e.g. Ultrix 4.2, might not have
const qualifiers in the prototypes in the system include files.
@@ -110,17 +102,39 @@ extern char *version_string;
calls to the following functions. To eliminate these warnings we
provide the following #defines. */
-#if (_POSIX_VERSION < 199009)
+#define my_access(file,flag) access((char *)file, flag)
+#define my_stat(file,pkt) stat((char *)file, pkt)
+#define my_execvp(prog,argv) execvp((char *)prog, (char **)argv)
+#define my_link(file1, file2) link((char *)file1, (char *)file2)
+#define my_unlink(file) unlink((char *)file)
+#define my_open(file, mode, flag) open((char *)file, mode, flag)
+#define my_chmod(file, mode) chmod((char *)file, mode)
+
+#if !(defined (USG) || defined (VMS) || defined (POSIX))
+#define GUESSPATHLEN (MAXPATHLEN + 1)
+#else /* (defined (USG) || defined (VMS) || defined (POSIX)) */
+/* We actually use this as a starting point, not a limit. */
+#define GUESSPATHLEN 200
+#endif /* (defined (USG) || defined (VMS) || defined (POSIX)) */
-#define access(file,flag) access((char *)file, flag)
-#define stat(file,pkt) stat((char *)file, pkt)
-#define execvp(prog,argv) execvp((char *)prog, (char **)argv)
-#define link(file1, file2) link((char *)file1, (char *)file2)
-#define unlink(file) unlink((char *)file)
-#define open(file, mode, flag) open((char *)file, mode, flag)
-#define chmod(file, mode) chmod((char *)file, mode)
+/* Aliases for pointers to void.
+ These were made to facilitate compilation with other compilers. */
-#endif /* (_POSIX_VERSION < 199009) */
+#ifdef __STDC__
+typedef void * pointer_type;
+typedef const void * const_pointer_type;
+#else
+typedef char * pointer_type;
+typedef char * const_pointer_type;
+#endif
+
+#if defined(POSIX)
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <string.h>
#else /* !defined(POSIX) */
@@ -137,61 +151,58 @@ extern char *version_string;
the few exceptions to the general rule here. */
#if !(defined (USG) || defined (VMS))
-extern char *getwd (char *);
+extern char *getwd ();
#define getcwd(buf,len) getwd(buf)
#else /* (defined (USG) || defined (VMS)) */
-extern char *getcwd (char *, size_t);
+extern char *getcwd ();
#endif /* (defined (USG) || defined (VMS)) */
/* Declaring stat or __flsbuf with a prototype
causes conflicts with system headers on some systems. */
#ifndef abort
-extern VOLATILE void abort (void);
+extern VOLATILE void abort ();
#endif
-extern int kill(int, int);
-extern int creat (const char *, int);
-extern int open (const char *, int, ...);
+extern int kill();
+extern int creat ();
#if 0 /* These conflict with stdio.h on some systems. */
extern int fprintf (FILE *, const char *, ...);
extern int printf (const char *, ...);
#endif /* 0 */
-extern void exit (int);
-extern void *malloc (size_t);
-extern void *realloc (void *, size_t);
-extern void free (void *);
-extern int read (int, void *, size_t);
-extern int write (int, const void *, size_t);
-extern int close (int);
-extern int link (const char *, const char *);
-extern int unlink (const char *);
-extern int fflush (FILE *);
-extern int atoi (const char *);
-extern int access (const char *, int);
-extern int puts (const char *);
-extern int fputs (const char *, FILE *);
-extern int fputc (int, FILE *);
-extern int execvp (const char *, char *const *);
-extern int setjmp (jmp_buf);
-extern void longjmp (jmp_buf, int);
-
-extern char * strcat(char *, const char *);
-extern int strcmp(const char *, const char *);
-extern char * strcpy(char *, const char *);
+extern void exit ();
+extern pointer_type malloc ();
+extern pointer_type realloc ();
+extern void free ();
+extern int read ();
+extern int write ();
+extern int close ();
+extern int fflush ();
+extern int atoi ();
+extern int puts ();
+extern int fputs ();
+extern int fputc ();
+#if 0 /* Causes trouble on some systems that define setjmp as a macro. */
+extern int setjmp ();
+extern void longjmp ();
+#endif
+
+extern char * strcat();
+extern int strcmp();
+extern char * strcpy();
#if 0 /* size_t from sys/types.h may fail to match GCC.
If so, we would get a warning from this.
So do without the prototype. */
extern size_t strlen(const char *);
#endif
-extern int strncmp(const char *, const char *, size_t);
-extern char * strncpy(char *, const char *, size_t);
-extern char * strrchr(const char *, int);
+extern int strncmp();
+extern char * strncpy();
+extern char * strrchr();
#if !(defined (USG) || defined (VMS))
-extern int vfork (void);
+extern int vfork ();
#define fork vfork
#else
-extern int fork (void);
+extern int fork ();
#endif /* !(defined (USG) || defined (VMS)) */
#endif /* !defined(POSIX) */
@@ -200,15 +211,13 @@ extern int fork (void);
#define NONCONST
-/* Aliases for pointers to void.
- These were made to facilitate compilation with other compilers. */
-
-typedef void * pointer_type;
-typedef const void * const_pointer_type;
-
-/* Define a STRINGIFY macro that's right for ANSI C. */
+/* Define a STRINGIFY macro that's right for ANSI or traditional C. */
+#ifdef __STDC__
#define STRINGIFY(STRING) #STRING
+#else
+#define STRINGIFY(STRING) "STRING"
+#endif
/* POSIX systems will not have definitions for WIFEXITED or WEXITSTATUS.
Define them correctly and so that they work for all environments. */
@@ -471,22 +480,22 @@ static int errors = 0;
/* ??? These comments should say what the flag mean as well as the options
that set them. */
-static int version_flag = 0; /* set by -V option */
-static int quiet_flag = 0; /* set by -q option */
-#if 0
-static int force_flag = 0; /* set by -f option */
-#endif
-static int nochange_flag = 0; /* set by -n option */
-static int nosave_flag = 0; /* set by -N option */
-static int keep_flag = 0; /* set by -k option */
-static const char ** compile_params = 0; /* set by -c option */
+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. */
+static const char ** compile_params = 0; /* Option string for gcc. */
#ifdef UNPROTOIZE
-static const char *indent_string = " "; /* set by -i option */
+static const char *indent_string = " "; /* Indentation for newly
+ inserted parm decls. */
#else /* !defined(UNPROTOIZE) */
-static int local_flag = 0; /* set by -l option */
+static int local_flag = 0; /* Insert new local decls (when?). */
static int global_flag = 0; /* set by -g option */
-static int cplusplus_flag = 0; /* set by -C option */
-static const char* nondefault_syscalls_dir = 0; /* set by -B option */
+static 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) */
/* An index into the compile_params array where we should insert the filename
@@ -602,16 +611,18 @@ static char * saved_repl_write_ptr;
/* Forward declaration. */
-static const char *shortpath (const char *cwd, const char *filename);
+static const char *shortpath ();
/* Allocate some space, but check that the allocation was successful. */
static pointer_type
-xmalloc (size_t byte_count)
+xmalloc (byte_count)
+ size_t byte_count;
{
pointer_type rv;
- if ((rv = malloc (byte_count)) == NULL)
+ rv = malloc (byte_count);
+ if (rv == NULL)
{
fprintf (stderr, "\n%s: fatal error: can't allocate %u more bytes of memory\n",
pname, byte_count);
@@ -625,11 +636,14 @@ xmalloc (size_t byte_count)
/* Reallocate some space, but check that the reallocation was successful. */
static pointer_type
-xrealloc (pointer_type old_space, size_t byte_count)
+xrealloc (old_space, byte_count)
+ pointer_type old_space;
+ size_t byte_count;
{
pointer_type rv;
- if ((rv = realloc (old_space, byte_count)) == NULL)
+ rv = realloc (old_space, byte_count);
+ if (rv == NULL)
{
fprintf (stderr, "\n%s: fatal error: can't allocate %u more bytes of memory\n",
pname, byte_count);
@@ -645,7 +659,8 @@ xrealloc (pointer_type old_space, size_t byte_count)
is non-null. */
static void
-xfree (const_pointer_type p)
+xfree (p)
+ const_pointer_type p;
{
if (p)
free ((NONCONST pointer_type) p);
@@ -654,7 +669,9 @@ xfree (const_pointer_type p)
/* Make a copy of a string INPUT with size SIZE. */
static char *
-savestring (const char *input, int size)
+savestring (input, size)
+ const char *input;
+ int size;
{
char *output = (char *) xmalloc (size + 1);
strcpy (output, input);
@@ -674,7 +691,8 @@ fancy_abort ()
/* Make a duplicate of a given string in a newly allocated area. */
static char *
-dupstr (const char *s)
+dupstr (s)
+ const char *s;
{
return strcpy ((char *) xmalloc (strlen (s) + 1), s);
}
@@ -683,7 +701,9 @@ dupstr (const char *s)
allocated area. */
static char *
-dupnstr (const char *s, size_t n)
+dupnstr (s, n)
+ const char *s;
+ size_t n;
{
char *ret_val = strncpy ((char *) xmalloc (n + 1), s, n);
@@ -695,7 +715,9 @@ dupnstr (const char *s, size_t n)
does not occur within s1. Assume neither s1 nor s2 are null pointers. */
static const char *
-substr (const char *s1, const char *const s2)
+substr (s1, s2)
+ const char *s1;
+ const char *const s2;
{
for (; *s1 ; s1++)
{
@@ -716,7 +738,7 @@ outer:
/* Get setup to recover in case the edit we are about to do goes awry. */
void
-save_pointers (void)
+save_pointers ()
{
saved_clean_read_ptr = clean_read_ptr;
saved_repl_write_ptr = repl_write_ptr;
@@ -726,7 +748,7 @@ save_pointers (void)
too confusing in the source code we are trying to edit. */
void
-restore_pointers (void)
+restore_pointers ()
{
clean_read_ptr = saved_clean_read_ptr;
repl_write_ptr = saved_repl_write_ptr;
@@ -734,8 +756,9 @@ restore_pointers (void)
/* Return true if the given character is a legal identifier character. */
-inline static int
-is_id_char (char ch)
+static int
+is_id_char (ch)
+ char ch;
{
return (isalnum (ch) || (ch == '_') || (ch == '$'));
}
@@ -744,7 +767,7 @@ is_id_char (char ch)
exit with non-zero status. */
static void
-usage (void)
+usage ()
{
#ifdef UNPROTOIZE
fprintf (stderr, "%s: usage '%s [ -VqfnkN ] [ -i <istring> ] [ filename ... ]'\n",
@@ -761,7 +784,8 @@ usage (void)
include directories. */
static int
-in_system_include_dir (const char *path)
+in_system_include_dir (path)
+ const char *path;
{
struct default_include *p;
@@ -785,7 +809,7 @@ file_could_be_converted (const char *path)
{
char *const dir_name = (char *) alloca (strlen (path) + 1);
- if (access (path, R_OK))
+ if (my_access (path, R_OK))
return 0;
{
@@ -799,7 +823,7 @@ file_could_be_converted (const char *path)
abort (); /* Should have been an absolutized filename. */
}
- if (access (path, W_OK))
+ if (my_access (path, W_OK))
return 0;
return 1;
@@ -833,7 +857,7 @@ file_normally_convertable (const char *path)
abort (); /* Should have been an absolutized filename. */
}
- if (access (path, R_OK))
+ if (my_access (path, R_OK))
{
if (!quiet_flag)
fprintf (stderr, "%s: warning: no read access for file `%s'\n",
@@ -841,7 +865,7 @@ file_normally_convertable (const char *path)
return 0;
}
- if (access (path, W_OK))
+ if (my_access (path, W_OK))
{
if (!quiet_flag)
fprintf (stderr, "%s: warning: no write access for file `%s'\n",
@@ -849,7 +873,7 @@ file_normally_convertable (const char *path)
return 0;
}
- if (access (dir_name, W_OK))
+ if (my_access (dir_name, W_OK))
{
if (!quiet_flag)
fprintf (stderr, "%s: warning: no write access for dir containing `%s'\n",
@@ -867,7 +891,8 @@ file_normally_convertable (const char *path)
file. Return false otherwise. */
static int
-is_syscalls_file (const file_info *fi_p)
+is_syscalls_file (fi_p)
+ const file_info *fi_p;
{
return (substr (fi_p->hash_entry->symbol, syscalls_filename) != NULL);
}
@@ -884,7 +909,8 @@ is_syscalls_file (const file_info *fi_p)
by connect_defs_and_decs(). */
static int
-needs_to_be_converted (const file_info *file_p)
+needs_to_be_converted (file_p)
+ const file_info *file_p;
{
const def_dec_info *ddp;
@@ -922,7 +948,8 @@ needs_to_be_converted (const file_info *file_p)
that should be converted. */
static int
-directory_specified_p (const char *name)
+directory_specified_p (name)
+ const char *name;
{
struct string_list *p;
@@ -937,7 +964,8 @@ directory_specified_p (const char *name)
/* Return 1 if the file named NAME should be excluded from conversion. */
static int
-file_excluded_p (const char *name)
+file_excluded_p (name)
+ const char *name;
{
struct string_list *p;
int len = strlen (name);
@@ -954,9 +982,13 @@ file_excluded_p (const char *name)
STRING is the new element value, and REST holds the remaining elements. */
static struct string_list *
-string_list_cons (char *string, struct string_list *rest)
+string_list_cons (string, rest)
+ char *string;
+ struct string_list *rest;
{
- struct string_list *temp = xmalloc (sizeof (struct string_list));
+ struct string_list *temp
+ = (struct string_list *) xmalloc (sizeof (struct string_list));
+
temp->next = rest;
temp->name = string;
return temp;
@@ -972,7 +1004,9 @@ string_list_cons (char *string, struct string_list *rest)
argument. */
static void
-visit_each_hash_node (const hash_table_entry *hash_tab_p, void (*func) (const hash_table_entry *))
+visit_each_hash_node (hash_tab_p, func)
+ const hash_table_entry *hash_tab_p;
+ void (*func)();
{
const hash_table_entry *primary;
@@ -993,7 +1027,9 @@ visit_each_hash_node (const hash_table_entry *hash_tab_p, void (*func) (const ha
called. */
static hash_table_entry *
-add_symbol (hash_table_entry *p, const char *s)
+add_symbol (p, s)
+ hash_table_entry *p;
+ const char *s;
{
p->hash_next = NULL;
p->symbol = dupstr (s);
@@ -1008,7 +1044,9 @@ add_symbol (hash_table_entry *p, const char *s)
hash table entry for the given name. */
static hash_table_entry *
-lookup (hash_table_entry *hash_tab_p, const char *search_symbol)
+lookup (hash_tab_p, search_symbol)
+ hash_table_entry *hash_tab_p;
+ const char *search_symbol;
{
int hash_value = 0;
const char *search_symbol_char_p = search_symbol;
@@ -1038,8 +1076,9 @@ lookup (hash_table_entry *hash_tab_p, const char *search_symbol)
Also, since we are not using this record anymore, free up all of the
stuff it pointed to. */
-inline static void
-free_def_dec (def_dec_info *p)
+static void
+free_def_dec (p)
+ def_dec_info *p;
{
xfree (p->ansi_decl);
@@ -1065,7 +1104,8 @@ free_def_dec (def_dec_info *p)
return a pointer to the unexpanded copy. Otherwise return NULL. */
static char *
-unexpand_if_needed (const char *aux_info_line)
+unexpand_if_needed (aux_info_line)
+ const char *aux_info_line;
{
static char *line_buf = 0;
static int line_buf_size = 0;
@@ -1147,7 +1187,9 @@ continue_outer: ;
NULL. */
static char *
-abspath (const char *cwd, const char *rel_filename)
+abspath (cwd, rel_filename)
+ const char *cwd;
+ const char *rel_filename;
{
/* Setup the current working directory as needed. */
const char *cwd2 = (cwd) ? cwd : cwd_buffer;
@@ -1250,7 +1292,9 @@ abspath (const char *cwd, const char *rel_filename)
subpart of the original filename is actually a symbolic link. */
static const char *
-shortpath (const char *cwd, const char *filename)
+shortpath (cwd, filename)
+ const char *cwd;
+ const char *filename;
{
char *rel_buffer;
char *rel_buf_p;
@@ -1302,12 +1346,10 @@ shortpath (const char *cwd, const char *filename)
--rel_buf_p;
if (*(rel_buf_p-1) == '/')
*--rel_buf_p = '\0';
- if (strlen (rel_buffer) > strlen (filename))
+ if (strlen (rel_buffer) > (unsigned) strlen (filename))
strcpy (rel_buffer, filename);
return rel_buffer;
}
- /* NOTREACHED */
- return 0; /* Prevent warnings for old versions of GCC. */
}
/* Lookup the given filename in the hash table for filenames. If it is a
@@ -1316,7 +1358,9 @@ shortpath (const char *cwd, const char *filename)
that record with some reasonable values. */
static file_info *
-find_file (char *filename, int do_not_stat)
+find_file (filename, do_not_stat)
+ char *filename;
+ int do_not_stat;
/* FILENAME was const, but that causes a warning on AIX when calling stat.
That is probably a bug in AIX, but might as well avoid the warning. */
{
@@ -1337,7 +1381,7 @@ find_file (char *filename, int do_not_stat)
stat_buf.st_mtime = (time_t) 0;
else
{
- if (stat (filename, &stat_buf) == -1)
+ if (my_stat (filename, &stat_buf) == -1)
{
fprintf (stderr, "%s: error: can't get status of `%s': %s\n",
pname, shortpath (NULL, filename), sys_errlist[errno]);
@@ -1357,7 +1401,7 @@ find_file (char *filename, int do_not_stat)
messed up. */
static void
-aux_info_corrupted (void)
+aux_info_corrupted ()
{
fprintf (stderr, "\n%s: fatal error: aux info file corrupted at line %d\n",
pname, current_aux_info_lineno);
@@ -1367,8 +1411,9 @@ aux_info_corrupted (void)
/* ??? This comment is vague. Say what the condition is for. */
/* Check to see that a condition is true. This is kind of like an assert(). */
-inline static void
-check_aux_info (int cond)
+static void
+check_aux_info (cond)
+ int cond;
{
if (! cond)
aux_info_corrupted ();
@@ -1379,7 +1424,8 @@ check_aux_info (int cond)
return a pointer to it. */
static const char *
-find_corresponding_lparen (const char *p)
+find_corresponding_lparen (p)
+ const char *p;
{
const char *q;
int paren_depth;
@@ -1405,7 +1451,9 @@ find_corresponding_lparen (const char *p)
file was created. If so, return non-zero, else return zero. */
static int
-referenced_file_is_newer (const char *l, time_t aux_info_mtime)
+referenced_file_is_newer (l, aux_info_mtime)
+ const char *l;
+ time_t aux_info_mtime;
{
const char *p;
file_info *fi_p;
@@ -1451,7 +1499,9 @@ referenced_file_is_newer (const char *l, time_t aux_info_mtime)
pertaining to this particular function name. */
static void
-save_def_or_dec (const char *l, int is_syscalls)
+save_def_or_dec (l, is_syscalls)
+ const char *l;
+ int is_syscalls;
{
const char *p;
const char *semicolon_p;
@@ -1638,7 +1688,7 @@ save_def_or_dec (const char *l, int is_syscalls)
/* p now points to the leftmost character of the function name. */
{
- char fn_string[past_fn - p + 1];
+ char *fn_string = (char *) alloca (past_fn - p + 1);
strncpy (fn_string, p, (size_t) (past_fn - p));
fn_string[past_fn-p] = '\0';
@@ -1827,9 +1877,10 @@ save_def_or_dec (const char *l, int is_syscalls)
adding a final group of options like '-fgen-aux-info -S -o /dev/null'. */
static void
-munge_compile_params (const char *params_list)
+munge_compile_params (params_list)
+ const char *params_list;
{
- const char *temp_params[strlen (params_list) + 10];
+ char **temp_params = (char **) alloca (strlen (params_list) + 10);
int param_count = 0;
const char *param;
@@ -1881,7 +1932,8 @@ munge_compile_params (const char *params_list)
/* Make a copy of the compile_params in heap space. */
- compile_params = xmalloc (sizeof (char *) * (param_count+1));
+ compile_params
+ = (char **) xmalloc (sizeof (char *) * (param_count+1));
memcpy (compile_params, temp_params, sizeof (char *) * param_count);
}
@@ -1889,7 +1941,8 @@ munge_compile_params (const char *params_list)
file to go with a specific base source file. */
static int
-gen_aux_info_file (const char *base_filename)
+gen_aux_info_file (base_filename)
+ const char *base_filename;
{
int child_pid;
@@ -1948,7 +2001,7 @@ gen_aux_info_file (const char *base_filename)
}
else
{
- if (execvp (compile_params[0], (char *const *) compile_params))
+ if (my_execvp (compile_params[0], (char *const *) compile_params))
{
fprintf (stderr, "%s: error: execvp returned: %s\n",
pname, sys_errlist[errno]);
@@ -1962,7 +2015,10 @@ gen_aux_info_file (const char *base_filename)
Save all of the important stuff for later. */
static void
-process_aux_info_file (const char *base_source_filename, int keep_it, int is_syscalls)
+process_aux_info_file (base_source_filename, keep_it, is_syscalls)
+ const char *base_source_filename;
+ int keep_it;
+ int is_syscalls;
{
char *const aux_info_filename
= (char *) alloca (strlen (base_source_filename)
@@ -1987,7 +2043,7 @@ start_over: ;
int retries = 0;
retry:
- if (access (aux_info_filename, R_OK) == -1)
+ if (my_access (aux_info_filename, R_OK) == -1)
{
if (errno == ENOENT && retries == 0)
{
@@ -2018,7 +2074,7 @@ retry:
/* Get some status information about this aux_info file. */
- if (stat (aux_info_filename, &stat_buf) == -1)
+ if (my_stat (aux_info_filename, &stat_buf) == -1)
{
fprintf (stderr, "%s: error: can't get status of aux info file `%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
@@ -2045,7 +2101,7 @@ retry:
/* Open the aux_info file. */
- if ((aux_info_file = open (aux_info_filename, O_RDONLY, 0444 )) == -1)
+ if ((aux_info_file = my_open (aux_info_filename, O_RDONLY, 0444 )) == -1)
{
fprintf (stderr, "%s: error: can't open aux info file `%s' for reading: %s\n",
pname, shortpath (NULL, aux_info_filename),
@@ -2088,7 +2144,7 @@ retry:
fails for some reason, don't even worry about it. */
if (!keep_it)
- if (unlink (aux_info_filename) == -1)
+ if (my_unlink (aux_info_filename) == -1)
fprintf (stderr, "%s: error: can't delete aux info file `%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
sys_errlist[errno]);
@@ -2136,7 +2192,7 @@ retry:
if (referenced_file_is_newer (aux_info_p, aux_info_mtime))
{
free (aux_info_base);
- if (unlink (aux_info_filename) == -1)
+ if (my_unlink (aux_info_filename) == -1)
{
fprintf (stderr, "%s: error: can't delete file `%s': %s\n",
pname, shortpath (NULL, aux_info_filename),
@@ -2191,7 +2247,8 @@ retry:
function implements the -C option. */
static void
-rename_c_file (const hash_table_entry *hp)
+rename_c_file (hp)
+ const hash_table_entry *hp;
{
const char *filename = hp->symbol;
int last_char_index = strlen (filename) - 1;
@@ -2209,7 +2266,7 @@ rename_c_file (const hash_table_entry *hp)
strcpy (new_filename, filename);
new_filename[last_char_index] = 'C';
- if (link (filename, new_filename) == -1)
+ if (my_link (filename, new_filename) == -1)
{
fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n",
pname, shortpath (NULL, filename),
@@ -2218,7 +2275,7 @@ rename_c_file (const hash_table_entry *hp)
return;
}
- if (unlink (filename) == -1)
+ if (my_unlink (filename) == -1)
{
fprintf (stderr, "%s: warning: can't delete file `%s': %s\n",
pname, shortpath (NULL, filename), sys_errlist[errno]);
@@ -2238,7 +2295,8 @@ rename_c_file (const hash_table_entry *hp)
order here. */
static void
-reverse_def_dec_list (const hash_table_entry *hp)
+reverse_def_dec_list (hp)
+ const hash_table_entry *hp;
{
file_info *file_p = hp->fip;
const def_dec_info *prev = NULL;
@@ -2279,7 +2337,9 @@ reverse_def_dec_list (const hash_table_entry *hp)
contains all of the correct prototypes for system functions. */
static const def_dec_info *
-find_extern_def (const def_dec_info *head, const def_dec_info *user)
+find_extern_def (head, user)
+ const def_dec_info *head;
+ const def_dec_info *user;
{
const def_dec_info *dd_p;
const def_dec_info *extern_def_p = NULL;
@@ -2408,13 +2468,13 @@ find_extern_def (const def_dec_info *head, const def_dec_info *user)
{
/* Why copy this string into `needed' at all?
Why not just use user->ansi_decl without copying? */
- char needed[strlen (user->ansi_decl) + 1];
+ char *needed = (char *) alloca (strlen (user->ansi_decl) + 1);
char *p;
strcpy (needed, user->ansi_decl);
p = (NONCONST char *) substr (needed, user->hash_entry->symbol)
+ strlen (user->hash_entry->symbol) + 2;
- strcpy (p, "???);");
+ strcpy (p, "??\?);");
fprintf (stderr, "%s: %d: `%s' used but missing from SYSCALLS\n",
shortpath (NULL, file), user->line,
@@ -2434,7 +2494,8 @@ find_extern_def (const def_dec_info *head, const def_dec_info *user)
from the def_dec_info record pointer which is passed in. */
static const def_dec_info *
-find_static_definition (const def_dec_info *user)
+find_static_definition (user)
+ const def_dec_info *user;
{
const def_dec_info *head = user->hash_entry->ddip;
const def_dec_info *dd_p;
@@ -2483,7 +2544,8 @@ find_static_definition (const def_dec_info *user)
more details. */
static void
-connect_defs_and_decs (const hash_table_entry *hp)
+connect_defs_and_decs (hp)
+ const hash_table_entry *hp;
{
const def_dec_info *dd_p;
const def_dec_info *extern_def_p = NULL;
@@ -2607,7 +2669,8 @@ connect_defs_and_decs (const hash_table_entry *hp)
original source line number that the given pointer points into. */
static int
-identify_lineno (const char *clean_p)
+identify_lineno (clean_p)
+ const char *clean_p;
{
int line_num = 1;
const char *scan_p;
@@ -2621,7 +2684,8 @@ identify_lineno (const char *clean_p)
/* Issue an error message and give up on doing this particular edit. */
static void
-declare_source_confusing (const char *clean_p)
+declare_source_confusing (clean_p)
+ const char *clean_p;
{
if (!quiet_flag)
{
@@ -2640,8 +2704,10 @@ declare_source_confusing (const char *clean_p)
code is in fact true. If not, issue an error message and give up on
converting this particular source file. */
-inline static void
-check_source (int cond, const char *clean_p)
+static void
+check_source (cond, clean_p)
+ int cond;
+ const char *clean_p;
{
if (!cond)
declare_source_confusing (clean_p);
@@ -2663,7 +2729,8 @@ check_source (int cond, const char *clean_p)
of the in-core cleaned buffer again. */
static const char *
-seek_to_line (int n)
+seek_to_line (n)
+ int n;
{
if (n < last_known_line_number)
abort ();
@@ -2682,7 +2749,8 @@ seek_to_line (int n)
to the next non-whitepace character which follows it. */
static const char *
-forward_to_next_token_char (const char *ptr)
+forward_to_next_token_char (ptr)
+ const char *ptr;
{
for (++ptr; isspace (*ptr); check_source (++ptr < clean_text_limit, 0))
continue;
@@ -2694,7 +2762,9 @@ forward_to_next_token_char (const char *ptr)
buffer ultimately go through here. */
static void
-output_bytes (const char *str, size_t len)
+output_bytes (str, len)
+ const char *str;
+ size_t len;
{
if ((repl_write_ptr + 1) + len >= repl_text_limit)
{
@@ -2713,7 +2783,8 @@ output_bytes (const char *str, size_t len)
the current output buffer. */
static void
-output_string (const char *str)
+output_string (str)
+ const char *str;
{
output_bytes (str, strlen (str));
}
@@ -2738,7 +2809,8 @@ output_string (const char *str)
byte pointed to by the argument pointer `p'. */
static void
-output_up_to (const char *p)
+output_up_to (p)
+ const char *p;
{
size_t copy_length = (size_t) (p - clean_read_ptr);
const char *copy_start = orig_text_base+(clean_read_ptr-clean_text_base)+1;
@@ -2757,7 +2829,8 @@ output_up_to (const char *p)
otherwise. */
static int
-other_variable_style_function (const char *ansi_header)
+other_variable_style_function (ansi_header)
+ const char *ansi_header;
{
#ifdef UNPROTOIZE
@@ -2795,8 +2868,9 @@ other_variable_style_function (const char *ansi_header)
below. */
static void
-edit_fn_declaration (const def_dec_info *def_dec_p,
- const char *volatile clean_text_p)
+edit_fn_declaration (def_dec_p, clean_text_p)
+ const def_dec_info *def_dec_p;
+ const char *VOLATILE clean_text_p;
{
const char *start_formals;
const char *end_formals;
@@ -3010,7 +3084,10 @@ edit_fn_declaration (const def_dec_info *def_dec_p,
function doesn't match the one expected). */
static int
-edit_formals_lists (const char *end_formals, unsigned f_list_count, const def_dec_info *def_dec_p)
+edit_formals_lists (end_formals, f_list_count, def_dec_p)
+ const char *end_formals;
+ unsigned int f_list_count;
+ const def_dec_info *def_dec_p;
{
const char *start_formals;
int depth;
@@ -3117,7 +3194,8 @@ edit_formals_lists (const char *end_formals, unsigned f_list_count, const def_de
*/
static const char *
-find_rightmost_formals_list (const char *clean_text_p)
+find_rightmost_formals_list (clean_text_p)
+ const char *clean_text_p;
{
const char *end_formals;
@@ -3145,10 +3223,41 @@ find_rightmost_formals_list (const char *clean_text_p)
continue;
end_formals--;
+#ifdef UNPROTOIZE
+
/* Now scan backwards while looking for the right end of the rightmost
formals list associated with this function definition. */
- for (;;)
+ {
+ char ch;
+ const char *l_brace_p;
+
+ /* Look leftward and try to find a right-paren. */
+
+ while (*end_formals != ')')
+ {
+ if (isspace (*end_formals))
+ while (isspace (*end_formals))
+ check_source (--end_formals > clean_read_ptr, 0);
+ else
+ check_source (--end_formals > clean_read_ptr, 0);
+ }
+
+ ch = *(l_brace_p = forward_to_next_token_char (end_formals));
+ /* Since we are unprotoizing an ANSI-style (prototyped) function
+ definition, there had better not be anything (except whitespace)
+ between the end of the ANSI formals list and the beginning of the
+ function body (i.e. the '{'). */
+
+ check_source (ch == '{', l_brace_p);
+ }
+
+#else /* !defined(UNPROTOIZE) */
+
+ /* Now scan backwards while looking for the right end of the rightmost
+ formals list associated with this function definition. */
+
+ while (1)
{
char ch;
const char *l_brace_p;
@@ -3166,18 +3275,6 @@ find_rightmost_formals_list (const char *clean_text_p)
ch = *(l_brace_p = forward_to_next_token_char (end_formals));
-#ifdef UNPROTOIZE
-
- /* Since we are unprotoizing an ANSI-style (prototyped) function
- definition, there had better not be anything (except whitespace)
- between the end of the ANSI formals list and the beginning of the
- function body (i.e. the '{'). */
-
- check_source (ch == '{', l_brace_p);
- break;
-
-#else /* !defined(UNPROTOIZE) */
-
/* Since it is possible that we found a right paren before the starting
'{' of the body which IS NOT the one at the end of the real K&R
formals list (say for instance, we found one embedded inside one of
@@ -3196,11 +3293,10 @@ find_rightmost_formals_list (const char *clean_text_p)
looking. */
check_source (--end_formals > clean_read_ptr, 0);
+ }
#endif /* !defined(UNPROTOIZE) */
- }
-
return end_formals;
}
@@ -3216,7 +3312,9 @@ find_rightmost_formals_list (const char *clean_text_p)
parameter type checking. */
static void
-add_local_decl (const def_dec_info *def_dec_p, const char *clean_text_p)
+add_local_decl (def_dec_p, clean_text_p)
+ const def_dec_info *def_dec_p;
+ const char *clean_text_p;
{
const char *start_of_block;
const char *function_to_edit = def_dec_p->hash_entry->symbol;
@@ -3322,7 +3420,9 @@ add_local_decl (const def_dec_info *def_dec_p, const char *clean_text_p)
and then insert the new explicit declaration at that point in the file. */
static void
-add_global_decls (const file_info *file_p, const char *clean_text_p)
+add_global_decls (file_p, clean_text_p)
+ const file_info *file_p;
+ const char *clean_text_p;
{
const def_dec_info *dd_p;
const char *scan_p;
@@ -3411,7 +3511,9 @@ add_global_decls (const file_info *file_p, const char *clean_text_p)
separate routine above. */
static void
-edit_fn_definition (const def_dec_info *def_dec_p, const char *clean_text_p)
+edit_fn_definition (def_dec_p, clean_text_p)
+ const def_dec_info *def_dec_p;
+ const char *clean_text_p;
{
const char *end_formals;
const char *function_to_edit = def_dec_p->hash_entry->symbol;
@@ -3553,7 +3655,9 @@ edit_fn_definition (const def_dec_info *def_dec_p, const char *clean_text_p)
into whitespace. Also, whiteout string and character literals. */
static void
-do_cleaning (char *new_clean_text_base, char *new_clean_text_limit)
+do_cleaning (new_clean_text_base, new_clean_text_limit)
+ char *new_clean_text_base;
+ char *new_clean_text_limit;
{
char *scan_p;
int non_whitespace_since_newline = 0;
@@ -3653,7 +3757,8 @@ regular:
and return a pointer to it. */
static const char *
-careful_find_l_paren (const char *p)
+careful_find_l_paren (p)
+ const char *p;
{
const char *q;
int paren_depth;
@@ -3691,7 +3796,8 @@ careful_find_l_paren (const char *p)
I will probably try to do this in a later version though. */
static void
-scan_for_missed_items (const file_info *file_p)
+scan_for_missed_items (file_p)
+ const file_info *file_p;
{
static const char *scan_p;
const char *limit = clean_text_limit - 3;
@@ -3747,7 +3853,7 @@ scan_for_missed_items (const file_info *file_p)
goto not_missed;
{
- char func_name[id_length + 1];
+ char *func_name = (char *) alloca (id_length + 1);
static const char * const stmt_keywords[]
= { "if", "while", "for", "switch", "return", 0 };
const char * const *stmt_keyword;
@@ -3805,7 +3911,8 @@ scan_for_missed_items (const file_info *file_p)
preprocessor directives make the editing a whole lot easier. */
static void
-edit_file (const hash_table_entry *hp)
+edit_file (hp)
+ const hash_table_entry *hp;
{
struct stat stat_buf;
const file_info *file_p = hp->fip;
@@ -3848,18 +3955,17 @@ edit_file (const hash_table_entry *hp)
/* Let the user know what we are up to. */
if (nochange_flag)
- puts (shortpath (NULL, convert_filename));
+ fprintf (stderr, "%s: would convert file `%s'\n",
+ pname, shortpath (NULL, convert_filename));
else
- {
- fprintf (stderr, "%s: converting file `%s'\n",
- pname, shortpath (NULL, convert_filename));
- fflush (stderr);
- }
+ fprintf (stderr, "%s: converting file `%s'\n",
+ pname, shortpath (NULL, convert_filename));
+ fflush (stderr);
/* Find out the size (in bytes) of the original file. */
/* The cast avoids an erroneous warning on AIX. */
- if (stat ((char *)convert_filename, &stat_buf) == -1)
+ if (my_stat ((char *)convert_filename, &stat_buf) == -1)
{
fprintf (stderr, "%s: error: can't get status for file `%s': %s\n",
pname, shortpath (NULL, convert_filename), sys_errlist[errno]);
@@ -3893,7 +3999,7 @@ edit_file (const hash_table_entry *hp)
/* Open the file to be converted in READ ONLY mode. */
- if ((input_file = open (convert_filename, O_RDONLY, 0444)) == -1)
+ if ((input_file = my_open (convert_filename, O_RDONLY, 0444)) == -1)
{
fprintf (stderr, "%s: error: can't open file `%s' for reading: %s\n",
pname, shortpath (NULL, convert_filename),
@@ -4038,7 +4144,7 @@ edit_file (const hash_table_entry *hp)
strcpy (new_filename, convert_filename);
strcat (new_filename, save_suffix);
- if (link (convert_filename, new_filename) == -1)
+ if (my_link (convert_filename, new_filename) == -1)
{
if (errno == EEXIST)
{
@@ -4060,7 +4166,7 @@ edit_file (const hash_table_entry *hp)
}
}
- if (unlink (convert_filename) == -1)
+ if (my_unlink (convert_filename) == -1)
{
fprintf (stderr, "%s: error: can't delete file `%s': %s\n",
pname, shortpath (NULL, convert_filename), sys_errlist[errno]);
@@ -4103,7 +4209,7 @@ edit_file (const hash_table_entry *hp)
/* Change the mode of the output file to match the original file. */
/* The cast avoids an erroneous warning on AIX. */
- if (chmod ((char *)convert_filename, stat_buf.st_mode) == -1)
+ if (my_chmod ((char *)convert_filename, stat_buf.st_mode) == -1)
fprintf (stderr, "%s: error: can't change mode of file `%s': %s\n",
pname, shortpath (NULL, convert_filename), sys_errlist[errno]);
@@ -4118,7 +4224,7 @@ edit_file (const hash_table_entry *hp)
in the command line. */
static void
-do_processing (void)
+do_processing ()
{
const char * const *base_pp;
const char * const * const end_pps
@@ -4145,18 +4251,18 @@ do_processing (void)
{
syscalls_absolute_filename
= (char *) xmalloc (strlen (nondefault_syscalls_dir)
- + strlen (syscalls_filename) + 1);
+ + strlen (syscalls_filename) + 2);
strcpy (syscalls_absolute_filename, nondefault_syscalls_dir);
}
else
{
syscalls_absolute_filename
= (char *) xmalloc (strlen (default_syscalls_dir)
- + strlen (syscalls_filename) + 1);
+ + strlen (syscalls_filename) + 2);
strcpy (syscalls_absolute_filename, default_syscalls_dir);
}
- syscalls_len = strlen (syscalls_filename);
+ syscalls_len = strlen (syscalls_absolute_filename);
if (*(syscalls_absolute_filename + syscalls_len - 1) != '/')
{
*(syscalls_absolute_filename + syscalls_len++) = '/';
@@ -4232,7 +4338,9 @@ static struct option longopts[] =
};
int
-main (int argc, char **const argv)
+main (argc, argv)
+ int argc;
+ char **const argv;
{
int longind;
int c;
@@ -4242,7 +4350,7 @@ main (int argc, char **const argv)
pname = pname ? pname+1 : argv[0];
/* Read the working directory, avoiding arbitrary limit. */
- size = 100;
+ size = GUESSPATHLEN;
while (1)
{
char *value;