# include "config.h"
#endif
+#include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+#include <lib-lib/ascii.h>
+
+#include <lib-mime/mime.h>
+
#include "mutt.h"
-#include "ascii.h"
-#include "mime.h"
#include "charset.h"
#include "rfc2047.h"
#include "thread.h"
-#include "lib/mem.h"
-#include "lib/str.h"
#include <ctype.h>
#include <errno.h>
#endif
#define ENCWORD_LEN_MAX 75
-#define ENCWORD_LEN_MIN 9 /* str_len ("=?.?.?.?=") */
+#define ENCWORD_LEN_MIN 9 /* m_strlen("=?.?.?.?=") */
#define HSPACE(x) ((x) == '\0' || (x) == ' ' || (x) == '\t')
if (cd == (iconv_t) (-1))
return (size_t) (-1);
obl = 4 * flen + 1;
- ob = buf = mem_malloc (obl);
+ ob = buf = p_new(char, obl);
n = my_iconv(cd, &f, &flen, &ob, &obl);
if (n == (size_t) (-1) || my_iconv(cd, 0, 0, &ob, &obl) == (size_t) (-1)) {
e = errno;
- mem_free (&buf);
+ p_delete(&buf);
iconv_close (cd);
errno = e;
return (size_t) (-1);
*tlen = ob - buf;
- mem_realloc (&buf, ob - buf + 1);
+ p_realloc(&buf, ob - buf + 1);
*t = buf;
iconv_close (cd);
q = strchr (p, ':');
- n = q ? q - p : str_len (p);
+ n = q ? q - p : m_strlen(p);
if (!n ||
/* Assume that we never need more than 12 characters of
n > (ENCWORD_LEN_MAX - ENCWORD_LEN_MIN + 2 - 12))
continue;
- t = mem_malloc (n + 1);
- memcpy (t, p, n);
- t[n] = '\0';
+ t = p_dupstr(p, n);
n = convert_string (u, ulen, fromcode, t, &s, &slen);
if (n == (size_t) (-1))
if (!tocode || n < bestn) {
bestn = n;
- mem_free (&tocode);
+ p_delete(&tocode);
tocode = t;
if (d) {
- mem_free (&e);
+ p_delete(&e);
e = s;
}
else
- mem_free (&s);
+ p_delete(&s);
elen = slen;
if (!bestn)
break;
}
else {
- mem_free (&t);
- mem_free (&s);
+ p_delete(&t);
+ p_delete(&s);
}
}
if (tocode) {
char *s0 = s;
memcpy (s, "=?", 2), s += 2;
- memcpy (s, tocode, str_len (tocode)), s += str_len (tocode);
+ memcpy (s, tocode, m_strlen(tocode)), s += m_strlen(tocode);
memcpy (s, "?B?", 3), s += 3;
for (;;) {
if (!dlen)
break;
else if (dlen == 1) {
- *s++ = B64Chars[(*d >> 2) & 0x3f];
- *s++ = B64Chars[(*d & 0x03) << 4];
+ *s++ = __m_b64chars[(*d >> 2) & 0x3f];
+ *s++ = __m_b64chars[(*d & 0x03) << 4];
*s++ = '=';
*s++ = '=';
break;
}
else if (dlen == 2) {
- *s++ = B64Chars[(*d >> 2) & 0x3f];
- *s++ = B64Chars[((*d & 0x03) << 4) | ((d[1] >> 4) & 0x0f)];
- *s++ = B64Chars[(d[1] & 0x0f) << 2];
+ *s++ = __m_b64chars[(*d >> 2) & 0x3f];
+ *s++ = __m_b64chars[((*d & 0x03) << 4) | ((d[1] >> 4) & 0x0f)];
+ *s++ = __m_b64chars[(d[1] & 0x0f) << 2];
*s++ = '=';
break;
}
else {
- *s++ = B64Chars[(*d >> 2) & 0x3f];
- *s++ = B64Chars[((*d & 0x03) << 4) | ((d[1] >> 4) & 0x0f)];
- *s++ = B64Chars[((d[1] & 0x0f) << 2) | ((d[2] >> 6) & 0x03)];
- *s++ = B64Chars[d[2] & 0x3f];
+ *s++ = __m_b64chars[(*d >> 2) & 0x3f];
+ *s++ = __m_b64chars[((*d & 0x03) << 4) | ((d[1] >> 4) & 0x0f)];
+ *s++ = __m_b64chars[((d[1] & 0x0f) << 2) | ((d[2] >> 6) & 0x03)];
+ *s++ = __m_b64chars[d[2] & 0x3f];
d += 3, dlen -= 3;
}
}
char *s0 = s;
memcpy (s, "=?", 2), s += 2;
- memcpy (s, tocode, str_len (tocode)), s += str_len (tocode);
+ memcpy (s, tocode, m_strlen(tocode)), s += m_strlen(tocode);
memcpy (s, "?Q?", 3), s += 3;
while (dlen--) {
unsigned char c = *d++;
if (fromcode) {
cd = mutt_iconv_open (tocode, fromcode, 0);
assert (cd != (iconv_t) (-1));
- ib = d, ibl = dlen, ob = buf1, obl = sizeof (buf1) - str_len (tocode);
+ ib = d, ibl = dlen, ob = buf1, obl = sizeof (buf1) - m_strlen(tocode);
if (my_iconv(cd, &ib, &ibl, &ob, &obl) == (size_t) (-1) ||
my_iconv(cd, 0, 0, &ob, &obl) == (size_t) (-1)) {
assert (errno == E2BIG);
iconv_close (cd);
}
else {
- if (dlen > sizeof (buf1) - str_len (tocode))
- return sizeof (buf1) - str_len (tocode) + 1;
+ if (dlen > sizeof (buf1) - m_strlen(tocode))
+ return sizeof (buf1) - m_strlen(tocode) + 1;
memcpy (buf1, d, dlen);
ob = buf1 + dlen;
}
++count;
}
- len = ENCWORD_LEN_MIN - 2 + str_len (tocode);
+ len = ENCWORD_LEN_MIN - 2 + m_strlen(tocode);
len_b = len + (((ob - buf1) + 2) / 3) * 4;
len_q = len + (ob - buf1) + 2 * count;
if (fromcode) {
cd = mutt_iconv_open (tocode, fromcode, 0);
assert (cd != (iconv_t) (-1));
- ib = d, ibl = dlen, ob = buf1, obl = sizeof (buf1) - str_len (tocode);
+ ib = d, ibl = dlen, ob = buf1, obl = sizeof (buf1) - m_strlen(tocode);
n1 = my_iconv(cd, &ib, &ibl, &ob, &obl);
n2 = my_iconv(cd, 0, 0, &ob, &obl);
assert (n1 != (size_t) (-1) && n2 != (size_t) (-1));
encoder_t encoder;
char *tocode1 = 0;
const char *tocode;
- char *icode = "UTF-8";
+ const char *icode = "UTF-8";
/* Try to convert to UTF-8. */
if (convert_string (d, dlen, fromcode, icode, &u, &ulen)) {
ret = 1;
icode = 0;
- u = mem_malloc ((ulen = dlen) + 1);
- memcpy (u, d, dlen);
- u[ulen] = 0;
+ u = p_dupstr(d, ulen = dlen);
}
/* Find earliest and latest things we must encode. */
/* Initialise the output buffer with the us-ascii prefix. */
buflen = 2 * ulen;
- buf = mem_malloc (buflen);
+ buf = p_new(char, buflen);
bufpos = t0 - u;
memcpy (buf, u, t0 - u);
/* Add to output buffer. */
#define LINEBREAK "\n\t"
- if (bufpos + wlen + str_len (LINEBREAK) > buflen) {
- buflen = bufpos + wlen + str_len (LINEBREAK);
- mem_realloc (&buf, buflen);
+ if (bufpos + wlen + m_strlen(LINEBREAK) > buflen) {
+ buflen = bufpos + wlen + m_strlen(LINEBREAK);
+ p_realloc(&buf, buflen);
}
r = encode_block (buf + bufpos, t, n, icode, tocode, encoder);
assert (r == wlen);
bufpos += wlen;
- memcpy (buf + bufpos, LINEBREAK, str_len (LINEBREAK));
- bufpos += str_len (LINEBREAK);
+ memcpy (buf + bufpos, LINEBREAK, m_strlen(LINEBREAK));
+ bufpos += m_strlen(LINEBREAK);
#undef LINEBREAK
col = 1;
/* Add last encoded word and us-ascii suffix to buffer. */
buflen = bufpos + wlen + (u + ulen - t1);
- mem_realloc (&buf, buflen + 1);
+ p_realloc(&buf, buflen + 1);
r = encode_block (buf + bufpos, t, t1 - t, icode, tocode, encoder);
assert (r == wlen);
bufpos += wlen;
memcpy (buf + bufpos, t1, u + ulen - t1);
- mem_free (&tocode1);
- mem_free (&u);
+ p_delete(&tocode1);
+ p_delete(&u);
buf[buflen] = '\0';
{
char *e;
size_t elen;
- char *charsets;
+ const char *charsets;
if (!Charset || !*pd)
return;
if (!charsets || !*charsets)
charsets = "UTF-8";
- rfc2047_encode (*pd, str_len (*pd), col,
+ rfc2047_encode (*pd, m_strlen(*pd), col,
Charset, charsets, &e, &elen,
encode_specials ? RFC822Specials : NULL);
- mem_free (pd);
+ p_delete(pd);
*pd = e;
}
void rfc2047_encode_adrlist (ADDRESS * addr, const char *tag)
{
ADDRESS *ptr = addr;
- int col = tag ? str_len (tag) + 2 : 32;
+ int col = tag ? m_strlen(tag) + 2 : 32;
while (ptr) {
if (ptr->personal)
int enc = 0, count = 0;
char *charset = NULL;
- pd = d0 = mem_malloc (str_len (s));
+ pd = d0 = p_new(char, m_strlen(s));
for (pp = s; (pp1 = strchr (pp, '?')); pp = pp1 + 1) {
count++;
t = pp1;
if ((t1 = memchr (pp, '*', t - pp)))
t = t1;
- charset = mem_malloc (t - pp + 1);
- memcpy (charset, pp, t - pp);
- charset[t - pp] = '\0';
+ charset = p_dupstr(pp, t - pp);
break;
case 3:
if (toupper ((unsigned char) *pp) == 'Q')
else if (toupper ((unsigned char) *pp) == 'B')
enc = ENCBASE64;
else {
- mem_free (&charset);
- mem_free (&d0);
+ p_delete(&charset);
+ p_delete(&d0);
return (-1);
}
break;
for (; pp < pp1; pp++) {
if (*pp == '_')
*pd++ = ' ';
- else if (*pp == '=' &&
- (!(pp[1] & ~127) && hexval (pp[1]) != -1) &&
- (!(pp[2] & ~127) && hexval (pp[2]) != -1)) {
+ else if (*pp == '=' && hexval(pp[1]) >= 0 && hexval(pp[2]) >= 0) {
*pd++ = (hexval (pp[1]) << 4) | hexval (pp[2]);
pp += 2;
}
for (; pp < pp1; pp++) {
if (*pp == '=')
break;
- if ((*pp & ~127) || (c = base64val (*pp)) == -1)
+ if ((c = base64val(*pp)) < 0)
continue;
if (k + 6 >= 8) {
k -= 2;
if (charset)
mutt_convert_string (&d0, charset, Charset, M_ICONV_HOOK_FROM);
- strfcpy (d, d0, len);
- mem_free (&charset);
- mem_free (&d0);
+ m_strcpy(d, len, d0);
+ p_delete(&charset);
+ p_delete(&d0);
return (0);
}
if (!s || !*s)
return;
- dlen = 4 * str_len (s); /* should be enough */
- d = d0 = mem_malloc (dlen + 1);
+ dlen = 4 * m_strlen(s); /* should be enough */
+ d = d0 = p_new(char, dlen + 1);
while (*s && dlen > 0) {
if (!(p = find_encoded_word (s, &q))) {
/* no encoded words */
if (!option (OPTSTRICTMIME)) {
- n = str_len (s);
+ n = m_strlen(s);
if (found_encoded && (m = lwslen (s, n)) != 0) {
if (m != n)
*d = ' ', d++, dlen--;
char *t;
size_t tlen;
- t = mem_malloc (n + 1);
- strfcpy (t, s, n + 1);
+ t = p_dupstr(s, n);
if (mutt_convert_nonmime_string (&t) == 0) {
- tlen = str_len (t);
+ tlen = m_strlen(t);
strncpy (d, t, tlen);
d += tlen;
}
strncpy (d, s, n);
d += n;
}
- mem_free (&t);
+ p_delete(&t);
break;
}
}
rfc2047_decode_word (d, p, dlen);
found_encoded = 1;
s = q;
- n = str_len (d);
+ n = m_strlen(d);
dlen -= n;
d += n;
}
*d = 0;
- mem_free (pd);
+ p_delete(pd);
*pd = d0;
str_adjust (pd);
}