+2002-05-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/6489
+ * tradcpp.c (fixup_newlines): New.
+ (main, finclude): Use it.
+
2002-05-03 Richard Sandiford <rsandifo@redhat.com>
* config/mips/elf64.h (UNIQUE_SECTION): Use mips_unique_section.
static int handle_directive PARAMS ((FILE_BUF *, FILE_BUF *));
static void process_include PARAMS ((struct file_name_list *,
const U_CHAR *, int, int, FILE_BUF *));
+static void fixup_newlines PARAMS ((FILE_BUF *));
static void finclude PARAMS ((int, const char *,
struct file_name_list *, FILE_BUF *));
static void init_dependency_output PARAMS ((void));
}
fp->bufp = fp->buf;
fp->if_stack = if_stack;
+ fixup_newlines (fp);
/* Make sure data ends with a newline. And put a null after it. */
}
}
+/* Replace all CR NL, NL CR and CR sequences with NL. */
+
+static void
+fixup_newlines (FILE_BUF *fp)
+{
+ U_CHAR *p, *q, *end;
+
+ if (fp->length <= 0)
+ return;
+
+ end = fp->buf + fp->length;
+ *end = '\r';
+ p = (U_CHAR *) strchr ((const char *) fp->buf, '\r');
+ *end = '\0';
+ if (p == end)
+ return;
+
+ if (p > fp->buf && p[-1] == '\n')
+ p--;
+ q = p;
+ while (p < end)
+ switch (*p)
+ {
+ default:
+ *q++ = *p++;
+ break;
+ case '\n':
+ case '\r':
+ p += 1 + (p[0] + p[1] == '\n' + '\r');
+ *q++ = '\n';
+ break;
+ }
+
+ fp->length = q - fp->buf;
+}
+
/* Process the contents of include file FNAME, already open on descriptor F,
with output to OP. */
fp->length = st_size;
}
close (f);
+ fixup_newlines (fp);
/* Make sure data ends with a newline. And put a null after it. */