aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-08-20 19:34:20 +0000
committerRichard Stallman <rms@gnu.org>1992-08-20 19:34:20 +0000
commit106d7d7de857f613209718cae33a2da5a922bf59 (patch)
treef124e5e5b54b8ae5de55fcdf505fce6f455262cf
parentebea352be590cd4d63acd2e68a9c5b3153473021 (diff)
downloadgcc-106d7d7de857f613209718cae33a2da5a922bf59.zip
gcc-106d7d7de857f613209718cae33a2da5a922bf59.tar.gz
gcc-106d7d7de857f613209718cae33a2da5a922bf59.tar.bz2
(decl of create_definition): Move forward declaration past the definition of struct macrodef.
(decl of create_definition): Move forward declaration past the definition of struct macrodef. (VMS_strncat): New function. From-SVN: r1915
-rw-r--r--gcc/cccp.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/gcc/cccp.c b/gcc/cccp.c
index d2debf2..4ac4cb6 100644
--- a/gcc/cccp.c
+++ b/gcc/cccp.c
@@ -85,9 +85,6 @@ typedef unsigned char U_CHAR;
#include <fcntl.h>
#endif /* USG */
#endif /* not VMS */
-
-extern char *index ();
-extern char *rindex ();
/* VMS-specific definitions */
#ifdef VMS
@@ -102,6 +99,8 @@ extern char *rindex ();
#define open(fname,mode,prot) VMS_open(fname,mode,prot)
#define fopen(fname,mode) VMS_fopen(fname,mode)
#define freopen(fname,mode,ofile) VMS_freopen(fname,mode,ofile)
+#define strncat(dst,src,cnt) VMS_strncat(dst,src,cnt)
+static char * VMS_strncat ();
static int VMS_read ();
static int VMS_write ();
static int VMS_open ();
@@ -115,6 +114,9 @@ typedef struct { unsigned :16, :16, :16; } vms_ino_t;
#define BSTRING /* VMS/GCC supplies the bstring routines */
#endif /* __GNUC__ */
#endif /* VMS */
+
+extern char *index ();
+extern char *rindex ();
#ifndef O_RDONLY
#define O_RDONLY 0
@@ -299,7 +301,7 @@ static U_CHAR *skip_quoted_string ();
static U_CHAR *skip_paren_group ();
static char *check_precompiled ();
-static struct macrodef create_definition ();
+/* static struct macrodef create_definition (); [moved below] */
static void dump_single_macro ();
#ifndef FAILURE_EXIT_CODE
@@ -595,6 +597,8 @@ struct macrodef
int symlen;
};
+static struct macrodef create_definition ();
+
/* Structure allocated for every #define. For a simple replacement
such as
@@ -8867,4 +8871,23 @@ open (fname, flags, prot)
return open (fname, flags, prot, "mbc=16", "deq=64", "fop=tef");
}
+/* Avoid run-time library bug, where copying M out of N+M characters with
+ N >= 65535 results in VAXCRTL's strncat falling into an infinite loop.
+ gcc-cpp exercises this particular bug. */
+
+static char *
+strncat (dst, src, cnt)
+ char *dst;
+ const char *src;
+ unsigned cnt;
+{
+ register char *d = dst, *s = (char *) src;
+ register int n = cnt; /* convert to _signed_ type */
+
+ while (*d) d++; /* advance to end */
+ while (--n >= 0)
+ if (!(*d++ = *s++)) break;
+ if (n < 0) *d = '\0';
+ return dst;
+}
#endif /* VMS */