#include <sys/wait.h>
#include <sys/stat.h>
+#include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+#include <lib-lib/ascii.h>
+#include <lib-lib/macros.h>
+#include <lib-lib/file.h>
+
+#include <lib-ui/curses.h>
+
#include "mutt.h"
-#include "mutt_curses.h"
-#include "ascii.h"
#include "handler.h"
#include "state.h"
#include "lib.h"
-#include "lib/mem.h"
-#include "lib/intl.h"
-#include "lib/str.h"
-#include "lib/debug.h"
-
#define FLOWED_MAX 77
static int get_quote_level (char *line)
static void print_flowed_line (char *line, STATE * s, int ql) {
int width;
char *pos, *oldpos;
- int len = str_len (line);
+ int len = m_strlen(line);
int i;
if (MaxLineLength > 0) {
width = COLS;
}
- if (str_len (line) == 0) {
- if (option (OPTQUOTEEMPTY)) {
+ if (m_strlen(line) == 0) {
+ if (!(s->flags & M_REPLYING) || option (OPTQUOTEEMPTY)) {
if (s->prefix)
state_puts(s->prefix,s);
for (i=0;i<ql;++i) state_putc('>',s);
* the end of the string w/ pos */
if (pos < line + len) {
if (*pos == ' ') {
- debug_print (4, ("f=f: found space directly at width\n"));
*pos = '\0';
++pos;
}
else {
char *save = pos;
- debug_print (4, ("f=f: need to search for space\n"));
while (pos >= oldpos && *pos != ' ') {
--pos;
}
if (pos < oldpos) {
- debug_print (4, ("f=f: no space found while searching "
- "to left; going right\n"));
pos = save;
while (pos < line + len && *pos && *pos != ' ') {
++pos;
}
- debug_print (4, ("f=f: found space at pos %d\n", pos-line));
- } else {
- debug_print (4, ("f=f: found space while searching to left\n"));
}
*pos = '\0';
++pos;
}
}
- else {
- debug_print (4, ("f=f: line completely fits on screen\n"));
- }
+
if (s->prefix)
state_puts (s->prefix, s);
int rfc3676_handler (BODY * a, STATE * s) {
int bytes = a->length;
char buf[LONG_STRING];
- char *curline = str_dup ("");
+ char *curline = p_new(char, 1);
char *t = NULL;
unsigned int curline_len = 1,
quotelevel = 0, newql = 0;
int buf_off, buf_len;
int delsp = 0, fixed = 0;
+ *curline='\0';
+
/* respect DelSP of RfC3676 only with f=f parts */
if ((t = (char*) mutt_get_parameter ("delsp", a->parameter))) {
- delsp = str_len (t) == 3 && ascii_strncasecmp (t, "yes", 3) == 0;
+ delsp = m_strlen(t) == 3 && ascii_strncasecmp (t, "yes", 3) == 0;
t = NULL;
}
- debug_print (2, ("f=f: DelSp: %s\n", delsp ? "yes" : "no"));
while (bytes > 0 && fgets (buf, sizeof (buf), s->fpin)) {
- buf_len = str_len (buf);
+ buf_len = m_strlen(buf);
bytes -= buf_len;
newql = get_quote_level (buf);
* possibly a change in quoting level. But that's better than not
* displaying it at all.
*/
- if ((t = strrchr (buf, '\n')) || (t = strrchr (buf, '\r'))) {
+ if ((t = strrchr (buf, '\r')) || (t = strrchr (buf, '\n'))) {
*t = '\0';
buf_len = t - buf;
}
if (delsp && buf_len >= 1 && buf[buf_len-1] == ' ')
buf[--buf_len] = '\0';
+ /* we're here when last space removed 'cause of DelSp was
+ * the last space and there isn't more -> done */
+ if ((buf_len - buf_off) < 0) {
+ print_flowed_line (curline, s, quotelevel);
+ *curline = '\0';
+ curline_len = 1;
+ continue;
+ }
+
/* signature separator also flushes the previous paragraph */
if (strcmp(buf + buf_off, "-- ") == 0 && curline && *curline) {
print_flowed_line (curline, s, quotelevel);
curline_len = 1;
}
- mem_realloc (&curline, curline_len + buf_len - buf_off);
+ p_realloc(&curline, curline_len + buf_len - buf_off);
strcpy (curline + curline_len - 1, buf + buf_off);
curline_len += buf_len - buf_off;
}
}
- mem_free (&curline);
+ p_delete(&curline);
return (0);
}
void rfc3676_space_stuff (HEADER* hdr) {
-#if DEBUG
- int lc = 0;
- size_t len = 0;
- unsigned char c = '\0';
-#endif
FILE* in = NULL, *out = NULL;
char buf[LONG_STRING];
char tmpfile[_POSIX_PATH_MAX];
if (!hdr || !hdr->content || !hdr->content->filename)
return;
- debug_print (2, ("f=f: postprocess %s\n", hdr->content->filename));
if ((in = safe_fopen (hdr->content->filename, "r")) == NULL)
return;
mutt_mktemp (tmpfile);
while (fgets (buf, sizeof (buf), in)) {
if (ascii_strncmp ("From ", buf, 4) == 0 || buf[0] == ' ') {
fputc (' ', out);
-#if DEBUG
- lc++;
- len = str_len (buf);
- if (len > 0) {
- c = buf[len-1];
- buf[len-1] = '\0';
- }
- debug_print (4, ("f=f: line %d needs space-stuffing: '%s'\n",
- lc, buf));
- if (len > 0)
- buf[len-1] = c;
-#endif
}
fputs (buf, out);
}
fclose (in);
- unlink (hdr->content->filename);
fclose (out);
- str_replace (&hdr->content->filename, tmpfile);
+ mutt_set_mtime (hdr->content->filename, tmpfile);
+ unlink (hdr->content->filename);
+ m_strreplace(&hdr->content->filename, tmpfile);
}