#include <unistd.h>
#include <errno.h>
+#include <lib-lib/mem.h>
+#include <lib-lib/ascii.h>
+#include <lib-lib/str.h>
+#include <lib-lib/macros.h>
+
#include "mutt.h"
#include "charset.h"
-#include "ascii.h"
-#include "lib/mem.h"
-#include "lib/intl.h"
-#include "lib/str.h"
#ifndef EILSEQ
# define EILSEQ EINVAL
char buff[LONG_STRING];
char buff2[LONG_STRING];
- strfcpy (buff, nl_langinfo (CODESET), sizeof (buff));
+ m_strcpy(buff, sizeof(buff), nl_langinfo(CODESET));
mutt_canonical_charset (buff2, sizeof (buff2), buff);
/* finally, set $charset */
- if (!(Charset = str_dup (buff2)))
- Charset = str_dup ("iso-8859-1");
+ if (!(Charset = m_strdup(buff2)))
+ Charset = m_strdup("iso-8859-1");
}
#else
void mutt_set_langinfo_charset (void)
{
- Charset = str_dup ("iso-8859-1");
+ Charset = m_strdup("iso-8859-1");
}
#endif
else if (!ascii_strncasecmp (name, "iso8859-", 8))
snprintf (scratch, sizeof (scratch), "iso_8859-%s", name + 8);
else
- strfcpy (scratch, NONULL (name), sizeof (scratch));
+ m_strcpy(scratch, sizeof(scratch), NONULL(name));
for (i = 0; PreferredMIMENames[i].key; i++)
if (!ascii_strcasecmp (scratch, PreferredMIMENames[i].key) ||
- !str_casecmp (scratch, PreferredMIMENames[i].key)) {
- strfcpy (dest, PreferredMIMENames[i].pref, dlen);
+ !m_strcasecmp(scratch, PreferredMIMENames[i].key)) {
+ m_strcpy(dest, dlen, PreferredMIMENames[i].pref);
return;
}
- strfcpy (dest, scratch, dlen);
+ m_strcpy(dest, dlen, scratch);
/* for cosmetics' sake, transform to lowercase. */
for (p = dest; *p; p++)
}
-#ifndef HAVE_ICONV
-
-iconv_t iconv_open (const char *tocode, const char *fromcode)
-{
- return (iconv_t) (-1);
-}
-
-size_t iconv (iconv_t cd, const char **inbuf, size_t * inbytesleft,
- char **outbuf, size_t * outbytesleft)
-{
- return 0;
-}
-
-int iconv_close (iconv_t cd)
-{
- return 0;
-}
-
-#endif /* !HAVE_ICONV */
-
-
/*
* Like iconv_open, but canonicalises the charsets
*/
size_t obl = *outbytesleft;
for (;;) {
- ret1 = iconv (cd, &ib, &ibl, &ob, &obl);
+ ret1 = my_iconv(cd, &ib, &ibl, &ob, &obl);
if (ret1 != (size_t) - 1)
ret += ret1;
if (ibl && obl && errno == EILSEQ) {
for (t = inrepls; *t; t++) {
const char *ib1 = *t;
- size_t ibl1 = str_len (*t);
+ size_t ibl1 = m_strlen(*t);
char *ob1 = ob;
size_t obl1 = obl;
- iconv (cd, &ib1, &ibl1, &ob1, &obl1);
+ my_iconv(cd, &ib1, &ibl1, &ob1, &obl1);
if (!ibl1) {
++ib, --ibl;
ob = ob1, obl = obl1;
/* Replace the output */
if (!outrepl)
outrepl = "?";
- iconv (cd, 0, 0, &ob, &obl);
+ my_iconv(cd, 0, 0, &ob, &obl);
if (obl) {
- int n = str_len (outrepl);
+ size_t n = m_strlen(outrepl);
if (n > obl) {
outrepl = "?";
++ib, --ibl;
ob += n, obl -= n;
++ret;
- iconv (cd, 0, 0, 0, 0); /* for good measure */
+ my_iconv(cd, 0, 0, 0, 0); /* for good measure */
continue;
}
}
else
outrepl = "?";
- len = str_len (s);
+ len = m_strlen(s);
ib = s, ibl = len + 1;
obl = MB_LEN_MAX * ibl;
- ob = buf = mem_malloc (obl + 1);
+ ob = buf = xmalloc(obl + 1);
mutt_iconv (cd, &ib, &ibl, &ob, &obl, inrepls, outrepl);
iconv_close (cd);
*ob = '\0';
- mem_free (ps);
+ p_delete(ps);
*ps = buf;
-
- str_adjust (ps);
return 0;
}
else
cd = mutt_iconv_open (to, from, flags);
if (cd != (iconv_t) - 1) {
- fc = mem_malloc (sizeof (struct fgetconv_s));
+ fc = p_new(struct fgetconv_s, 1);
fc->p = fc->ob = fc->bufo;
fc->ib = fc->bufi;
fc->ibl = 0;
fc->inrepls = mutt_is_utf8 (to) ? repls : repls + 1;
}
else
- fc = mem_malloc (sizeof (struct fgetconv_not));
+ fc = p_new(struct fgetconv_s, 1);
fc->file = file;
fc->cd = cd;
return (FGETCONV *) fc;
if (fc->ibl) {
size_t obl = sizeof (fc->bufo);
- iconv (fc->cd, (const char **) &fc->ib, &fc->ibl, &fc->ob, &obl);
+ my_iconv(fc->cd, (const char **) &fc->ib, &fc->ibl, &fc->ob, &obl);
if (fc->p < fc->ob)
return (unsigned char) *(fc->p)++;
}
if (fc->cd != (iconv_t) - 1)
iconv_close (fc->cd);
- mem_free (_fc);
+ p_delete(_fc);
}
const char *mutt_get_first_charset (const char *charset)
const char *c, *c1;
c = charset;
- if (!str_len (c))
+ if (!m_strlen(c))
return "us-ascii";
if (!(c1 = strchr (c, ':')))
return ((char*) charset);
- strfcpy (fcharset, c, c1 - c + 1);
+ m_strcpy(fcharset, c1 - c + 1, c);
return fcharset;
}
{
iconv_t cd;
char *buf, *ob;
- size_t obl, n;
+ size_t obl;
+ ssize_t n;
int e;
cd = mutt_iconv_open (to, from, 0);
if (cd == (iconv_t) (-1))
return (size_t) (-1);
obl = 4 * flen + 1;
- ob = buf = mem_malloc (obl);
- n = iconv (cd, &f, &flen, &ob, &obl);
- if (n == (size_t) (-1) || iconv (cd, 0, 0, &ob, &obl) == (size_t) (-1)) {
+ ob = buf = xmalloc(obl);
+ n = my_iconv(cd, &f, &flen, &ob, &obl);
+ if (n < 0 || my_iconv(cd, 0, 0, &ob, &obl) < 0) {
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);
char *s = NULL;
char *fromcode;
size_t m, n;
- size_t ulen = str_len (*ps);
+ size_t ulen = m_strlen(*ps);
size_t slen;
if (!u || !*u)
return 0;
c1 = strchr (c, ':');
- n = c1 ? c1 - c : str_len (c);
+ n = c1 ? c1 - c : m_strlen(c);
if (!n)
continue;
- fromcode = mem_malloc (n + 1);
- strfcpy (fromcode, c, n + 1);
+ fromcode = p_dupstr(c, n);
m = convert_string (u, ulen, fromcode, Charset, &s, &slen);
- mem_free (&fromcode);
+ p_delete(&fromcode);
if (m != (size_t) (-1)) {
- mem_free (ps);
+ p_delete(ps);
*ps = s;
return 0;
}