#include <fcntl.h>
#endif /* USG */
#endif /* not VMS */
-
-extern char *index ();
-extern char *rindex ();
/* VMS-specific definitions */
#ifdef VMS
#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 ();
#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
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 ();
\f
#ifndef FAILURE_EXIT_CODE
int symlen;
};
+static struct macrodef create_definition ();
+
\f
/* Structure allocated for every #define. For a simple replacement
such as
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 */