This will be used to add built-in textmode conversion for the
"classic" pgp backend.
---
muttlib.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
protos.h | 2 ++
2 files changed, 65 insertions(+)
diff --git a/muttlib.c b/muttlib.c
index 494c27d0..a6294476 100644
--- a/muttlib.c
+++ b/muttlib.c
@@ -2437,6 +2437,69 @@ int mutt_atolofft (const char *str, LOFF_T *dst, int
flags)
return rc;
}
+static int normalize_line_endings (const char *infile, FILE *ifp, const char
*outfile,
+ FILE *ofp, int tocrlf)
+{
+ char *buf = NULL;
+ size_t blen = 0, olen;
+ int has_nl;
+
+ if (infile)
+ if (!(ifp = safe_fopen (infile, "r")))
+ mutt_perror (infile);
+ if (!ifp)
+ return -1;
+
+ if (outfile)
+ if (!(ofp = safe_fopen (outfile, "w")))
+ mutt_perror (outfile);
+ if (!ofp)
+ {
+ if (infile)
+ safe_fclose (&ifp);
+ return -1;
+ }
+
+ while ((buf = mutt_read_line (buf, &blen, ifp, NULL, MUTT_EOL)) != NULL)
+ {
+ has_nl = 0;
+ olen = mutt_strlen (buf);
+ if ((olen > 0) && buf[olen - 1] == '\n')
+ {
+ has_nl = 1;
+ buf[olen - 1] = '\0';
+ if ((olen > 1) && buf[olen - 2] == '\r')
+ buf[olen - 2] = '\0';
+ }
+ fputs (buf, ofp);
+ if (has_nl)
+ {
+ if (tocrlf)
+ fputc ('\r', ofp);
+ fputc ('\n', ofp);
+ }
+ }
+
+ if (infile)
+ safe_fclose (&ifp);
+ if (outfile)
+ safe_fclose (&ofp);
+ FREE (&buf);
+
+ return 0;
+}
+
+int mutt_convert_to_crlf (const char *infile, FILE *ifp, const char *outfile,
FILE *ofp)
+{
+ return normalize_line_endings (infile, ifp, outfile, ofp, 1);
+}
+
+int mutt_convert_to_lf (const char *infile, FILE *ifp, const char *outfile,
FILE *ofp)
+{
+ return normalize_line_endings (infile, ifp, outfile, ofp, 0);
+}
+
+
/************************************************************************
* These functions are transplanted from lib.c, in order to modify them *
diff --git a/protos.h b/protos.h
index a641034a..71497f95 100644
--- a/protos.h
+++ b/protos.h
@@ -323,6 +323,8 @@ int mutt_command_complete (char *, size_t, int, int);
int mutt_var_value_complete (char *, size_t, int);
int mutt_complete (char *, size_t);
int mutt_compose_attachment (BODY *a);
+int mutt_convert_to_crlf (const char *, FILE *, const char *, FILE *);
+int mutt_convert_to_lf (const char *, FILE *, const char *, FILE *);
int mutt_copy_body (FILE *, BODY **, BODY *);
int mutt_decode_save_attachment (FILE *, BODY *, const char *, int, int);
int mutt_display_message (HEADER *h);
--
2.53.0