#include "copy.h"
#include "charset.h"
#include "mutt_crypt.h"
+#include "state.h"
#include "lib.h"
#include "lib/mem.h"
#include "lib/str.h"
#include "lib/debug.h"
-#define BUFI_SIZE 1000
-#define BUFO_SIZE 2000
-
-
typedef void handler_f (BODY *, STATE *);
typedef handler_f *handler_t;
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1
};
-static void state_prefix_put (const char *d, size_t dlen, STATE * s)
-{
- if (s->prefix)
- while (dlen--)
- state_prefix_putc (*d++, s);
- else
- fwrite (d, dlen, 1, s->fpout);
-}
-
-void mutt_convert_to_state (iconv_t cd, char *bufi, size_t * l, STATE * s)
-{
- char bufo[BUFO_SIZE];
- ICONV_CONST char *ib;
- char *ob;
- size_t ibl, obl;
-
- if (!bufi) {
- if (cd != (iconv_t) (-1)) {
- ob = bufo, obl = sizeof (bufo);
- iconv (cd, 0, 0, &ob, &obl);
- if (ob != bufo)
- state_prefix_put (bufo, ob - bufo, s);
- }
- if (Quotebuf[0] != '\0')
- state_prefix_putc ('\n', s);
- return;
- }
-
- if (cd == (iconv_t) (-1)) {
- state_prefix_put (bufi, *l, s);
- *l = 0;
- return;
- }
-
- ib = bufi, ibl = *l;
- for (;;) {
- ob = bufo, obl = sizeof (bufo);
- mutt_iconv (cd, &ib, &ibl, &ob, &obl, 0, "?");
- if (ob == bufo)
- break;
- state_prefix_put (bufo, ob - bufo, s);
- }
- memmove (bufi, ib, ibl);
- *l = ibl;
-}
-
void mutt_decode_xbit (STATE * s, long len, int istext, iconv_t cd)
{
int c, ch;
if (fgets (line, MIN ((ssize_t) sizeof (line), len + 1), s->fpin) == NULL)
break;
- linelen = mutt_strlen (line);
+ linelen = str_len (line);
len -= linelen;
/*
while (len > 0) {
if ((fgets (tmps, sizeof (tmps), s->fpin)) == NULL)
return;
- len -= mutt_strlen (tmps);
- if ((!safe_strncmp (tmps, "begin", 5)) && ISSPACE (tmps[5]))
+ len -= str_len (tmps);
+ if ((!str_ncmp (tmps, "begin", 5)) && ISSPACE (tmps[5]))
break;
}
while (len > 0) {
if ((fgets (tmps, sizeof (tmps), s->fpin)) == NULL)
return;
- len -= mutt_strlen (tmps);
- if (!safe_strncmp (tmps, "end", 3))
+ len -= str_len (tmps);
+ if (!str_ncmp (tmps, "end", 3))
break;
pt = tmps;
linelen = decode_byte (*pt);
stte->indent_len = 0;
if (stte->s->prefix) {
state_puts (stte->s->prefix, stte->s);
- stte->indent_len += mutt_strlen (stte->s->prefix);
+ stte->indent_len += str_len (stte->s->prefix);
}
if (stte->tag_level[RICH_EXCERPT]) {
while (x) {
if (stte->s->prefix) {
state_puts (stte->s->prefix, stte->s);
- stte->indent_len += mutt_strlen (stte->s->prefix);
+ stte->indent_len += str_len (stte->s->prefix);
}
else {
state_puts ("> ", stte->s);
- stte->indent_len += mutt_strlen ("> ");
+ stte->indent_len += str_len ("> ");
}
x--;
}
stte->line_used += stte->buff_used;
if (stte->line_used > stte->line_max) {
stte->line_max = stte->line_used;
- safe_realloc (&stte->line, stte->line_max + 1);
+ mem_realloc (&stte->line, stte->line_max + 1);
}
strcat (stte->line, stte->buffer); /* __STRCAT_CHECKED__ */
stte->line_len += stte->word_len;
if (stte->tag_level[RICH_PARAM]) {
if (stte->tag_level[RICH_COLOR]) {
if (stte->param_used + 1 >= stte->param_len)
- safe_realloc (&stte->param, (stte->param_len += STRING));
+ mem_realloc (&stte->param, (stte->param_len += STRING));
stte->param[stte->param_used++] = c;
}
/* see if more space is needed (plus extra for possible rich characters) */
if (stte->buff_len < stte->buff_used + 3) {
stte->buff_len += LONG_STRING;
- safe_realloc (&stte->buffer, stte->buff_len + 1);
+ mem_realloc (&stte->buffer, stte->buff_len + 1);
}
if ((!stte->tag_level[RICH_NOFILL] && ISSPACE (c)) || c == '\0') {
{
char *c;
- if (stte->buff_len < stte->buff_used + mutt_strlen (s)) {
+ if (stte->buff_len < stte->buff_used + str_len (s)) {
stte->buff_len += LONG_STRING;
- safe_realloc (&stte->buffer, stte->buff_len + 1);
+ mem_realloc (&stte->buffer, stte->buff_len + 1);
}
c = s;
while (*c) {
((s->flags & M_DISPLAY) ? (COLS - 4) : ((COLS - 4) <
72) ? (COLS - 4) : 72);
stte.line_max = stte.WrapMargin * 4;
- stte.line = (char *) safe_calloc (1, stte.line_max + 1);
- stte.param = (char *) safe_calloc (1, STRING);
+ stte.line = (char *) mem_calloc (1, stte.line_max + 1);
+ stte.param = (char *) mem_calloc (1, STRING);
stte.param_len = STRING;
stte.param_used = 0;
if (s->prefix) {
state_puts (s->prefix, s);
- stte.indent_len += mutt_strlen (s->prefix);
+ stte.indent_len += str_len (s->prefix);
}
while (state != DONE) {
state_putc ('\n', s); /* add a final newline */
- FREE (&(stte.buffer));
- FREE (&(stte.line));
- FREE (&(stte.param));
+ mem_free (&(stte.buffer));
+ mem_free (&(stte.line));
+ mem_free (&(stte.param));
}
/*
{
int width;
char *pos, *oldpos;
- int len = mutt_strlen (line);
+ int len = str_len (line);
int i;
if (MaxLineLength > 0) {
/* fprintf(stderr,"print_flowed_line will print `%s' with ql = %d\n",line,ql); */
- if (mutt_strlen (line) == 0) {
+ if (str_len (line) == 0) {
if (option (OPTQUOTEEMPTY)) {
if (s->prefix)
state_puts(s->prefix,s);
while (bytes > 0 && fgets (buf, sizeof (buf), s->fpin)) {
- bytes -= mutt_strlen (buf);
+ bytes -= str_len (buf);
newql = get_quote_level (buf);
if ((t = strrchr (buf, '\n')) || (t = strrchr (buf, '\r'))) {
*t = '\0';
- if (mutt_strlen (curline) > 0 && curline[mutt_strlen (curline) - 1] == ' '
+ if (str_len (curline) > 0 && curline[str_len (curline) - 1] == ' '
&& newql == quotelevel
&& strcmp (curline + quotelevel, "-- ") != 0) {
if (buf[newql] == ' ')
- curline[mutt_strlen (curline) - 1] = '\0';
+ curline[str_len (curline) - 1] = '\0';
- curline = realloc (curline, curline_len + mutt_strlen (buf));
+ curline = realloc (curline, curline_len + str_len (buf));
if (curline_len == 1)
*curline = '\0';
- curline_len += mutt_strlen (buf);
- safe_strncat (curline, curline_len, buf + newql,
- mutt_strlen (buf + newql));
+ curline_len += str_len (buf);
+ str_ncat (curline, curline_len, buf + newql,
+ str_len (buf + newql));
}
else {
if (first_line) {
else {
print_flowed_line (curline, s, quotelevel);
}
- FREE (&curline);
+ mem_free (&curline);
curline_len = 1;
- curline = realloc (curline, curline_len + mutt_strlen (buf));
+ curline = realloc (curline, curline_len + str_len (buf));
if (curline_len == 1)
*curline = '\0';
- curline_len += mutt_strlen (buf);
- safe_strncat (curline, curline_len, buf, mutt_strlen (buf));
+ curline_len += str_len (buf);
+ str_ncat (curline, curline_len, buf, str_len (buf));
quotelevel = newql;
}
}
- else {
- /* in case there's no [\r\n], we only have a single line
- * -> display it (fixes #4709) */
- print_flowed_line (buf, s, quotelevel);
- /* TODO add handling of very long lines */
+ else if (bytes == 0) {
+ /* in case there's no line end it's likely the last line
+ * so append to current (if any) */
+ if (buf[newql] == ' ')
+ curline[str_len (curline) - 1] = '\0';
+ curline = realloc (curline, curline_len + str_len (buf));
+ if (curline_len == 1)
+ *curline = '\0';
+ curline_len += str_len (buf);
+ str_ncat (curline, curline_len, buf + newql,
+ str_len (buf + newql));
+ break;
}
}
if (curline) {
print_flowed_line (curline, s, quotelevel);
- FREE (&curline);
+ mem_free (&curline);
}
}
}
else {
wild = 1;
- btlen = mutt_strlen (t->data);
+ btlen = str_len (t->data);
}
if (a && a->parts)
snprintf (type, sizeof (type), "%s/%s", TYPE (a), a->subtype);
rfc1524_mailcap_lookup (a, type, entry, M_AUTOVIEW);
- fname = safe_strdup (a->filename);
+ fname = str_dup (a->filename);
mutt_sanitize_filename (fname, 1);
rfc1524_expand_filename (entry->nametemplate, fname, tempfile,
sizeof (tempfile));
- FREE (&fname);
+ mem_free (&fname);
if (entry->command) {
strfcpy (command, entry->command, sizeof (command));
handler = mutt_signed_handler;
}
else if ((WithCrypto & APPLICATION_PGP)
- && safe_strcasecmp ("encrypted", b->subtype) == 0) {
+ && str_casecmp ("encrypted", b->subtype) == 0) {
p = mutt_get_parameter ("protocol", b->parameter);
if (!p)