+ if (has_crs) {
+ int fd;
+ char *stripped_content_file;
+ char *tempfile = m_mktemp2 (NULL, invo_name, &fd, NULL);
+
+ if (tempfile == NULL) {
+ adios (NULL, "unable to create temporary file in %s",
+ get_temp_dir());
+ }
+ stripped_content_file = add (tempfile, NULL);
+
+ /* Strip each CR before a LF from the content. */
+ fseeko (*fp, begin, SEEK_SET);
+ while ((bytes_read = fread (buffer, 1, sizeof buffer, *fp)) >
+ 0) {
+ char *cp;
+ size_t i;
+ int last_char_was_cr = 0;
+
+ for (i = 0, cp = buffer; i < bytes_read; ++i, ++cp) {
+ if (*cp == '\r') {
+ last_char_was_cr = 1;
+ } else if (last_char_was_cr) {
+ if (*cp != '\n') {
+ if (write (fd, "\r", 1) < 0) {
+ advise (tempfile, "CR write");
+ }
+ }
+ if (write (fd, cp, 1) < 0) {
+ advise (tempfile, "write");
+ }
+ last_char_was_cr = 0;
+ } else {
+ if (write (fd, cp, 1) < 0) {
+ advise (tempfile, "write");
+ }
+ last_char_was_cr = 0;
+ }
+ }
+ }
+
+ if (close (fd)) {
+ admonish (NULL, "unable to write temporary file %s",
+ stripped_content_file);
+ (void) m_unlink (stripped_content_file);