summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2010-12-13 17:02:59 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2010-12-13 17:10:14 +0200
commit45c0bb9011bdfb74d77d6ca90481441844612692 (patch)
tree6a15a5cb1f946ba23b8f272c24c8eea6316b1f44
parent1f1dca416897539ad734149945482fecf6f066e5 (diff)
downloadmailutils-45c0bb9011bdfb74d77d6ca90481441844612692.tar.gz
mailutils-45c0bb9011bdfb74d77d6ca90481441844612692.tar.bz2
Remove mu_filter_iconv_create.
Callers should use mu_filter_create_args instead. * examples/iconv.c: Rewrite using mu_filter_create_args. * libmailutils/mime/mimehdr.c (mu_mimehdr_decode_param): Use mu_decode_filter. * imap4d/imap4d.h: Include prog.h * include/mailutils/filter.h (mu_filter_iconv_create): Mark as deprecated. * include/mailutils/util.h (mu_decode_filter_args): New proto. * libmailutils/base/msgid.c (mu_rfc2822_in_reply_to): Silence a cast warning. * libmailutils/tests/wicket.c (match_string): Likewise. * libmailutils/filter/decode.c (mu_decode_filter_args): New function. (mu_decode_filter): Rewrite as an alternative entry point to mu_decode_filter_args. * ibmailutils/filter/filter_iconv.c: Remove. * libmailutils/filter/Makefile.am (libfilter_la_SOURCES): Remove filter_iconv.c * libmu_compat/filter_iconv.c: New file. * libmu_compat/Makefile.am (libmu_compat_la_SOURCES): Add filter_iconv.c * libmailutils/filter/iconvflt.c (_icvt_decoder): Set errcode before returning failure. * libmailutils/stream/fltstream.c (init_iobuf, filter_stream_init): Provide a default value for io->errcode.
-rw-r--r--examples/iconv.c35
-rw-r--r--imap4d/imap4d.h1
-rw-r--r--include/mailutils/filter.h5
-rw-r--r--include/mailutils/util.h4
-rw-r--r--libmailutils/base/msgid.c2
-rw-r--r--libmailutils/filter/Makefile.am1
-rw-r--r--libmailutils/filter/decode.c59
-rw-r--r--libmailutils/filter/filter_iconv.c486
-rw-r--r--libmailutils/filter/iconvflt.c2
-rw-r--r--libmailutils/mime/mimehdr.c7
-rw-r--r--libmailutils/stream/fltstream.c3
-rw-r--r--libmailutils/tests/wicket.c2
-rw-r--r--libmu_compat/Makefile.am1
-rw-r--r--libmu_compat/filter_iconv.c51
-rw-r--r--po/POTFILES.in2
15 files changed, 123 insertions, 538 deletions
diff --git a/examples/iconv.c b/examples/iconv.c
index 6a03349c5..1e3195fcc 100644
--- a/examples/iconv.c
+++ b/examples/iconv.c
@@ -28,35 +28,32 @@
int
main (int argc, char **argv)
{
- int rc;
+ int i;
mu_stream_t in, out;
mu_stream_t cvt;
- size_t size;
- char buffer[80];
+ const char *args[5] = { "iconv" };
- if (argc != 3)
+ if (argc < 3 || argc > 4)
{
- fprintf (stderr, "usage: %s from-code to-code\n", argv[0]);
+ fprintf (stderr, "usage: %s from-code to-code [err]\n", argv[0]);
return 1;
}
MU_ASSERT (mu_stdio_stream_create (&in, MU_STDIN_FD, 0));
- MU_ASSERT (mu_filter_iconv_create (&cvt, in, argv[1], argv[2],
- 0, mu_fallback_none));
+ args[1] = argv[1];
+ args[2] = argv[2];
+ i = 3;
+ if (argc == 4)
+ args[i++] = argv[3];
+ args[i] = NULL;
+ MU_ASSERT (mu_filter_create_args (&cvt, in, args[0], i, args,
+ MU_FILTER_DECODE,
+ MU_FILTER_READ));
+ mu_stream_unref (in);
MU_ASSERT (mu_stdio_stream_create (&out, MU_STDOUT_FD, 0));
-
- while ((rc = mu_stream_read (cvt, buffer, sizeof (buffer), &size)) == 0
- && size > 0)
- {
- mu_stream_write (out, buffer, size, NULL);
- }
+ MU_ASSERT (mu_stream_copy (out, cvt, 0, NULL));
+ mu_stream_unref (cvt);
mu_stream_flush (out);
- if (rc)
- {
- fprintf (stderr, "error: %s / %s\n",
- mu_stream_strerror (cvt, rc),
- mu_strerror (rc));
- }
return 0;
}
diff --git a/imap4d/imap4d.h b/imap4d/imap4d.h
index 9c2730050..5026812fa 100644
--- a/imap4d/imap4d.h
+++ b/imap4d/imap4d.h
@@ -104,6 +104,7 @@
#include <mailutils/cctype.h>
#include <mailutils/cstr.h>
#include <mailutils/io.h>
+#include <mailutils/prog.h>
#include <mu_umaxtostr.h>
#include <muaux.h>
diff --git a/include/mailutils/filter.h b/include/mailutils/filter.h
index b44964fc4..464996881 100644
--- a/include/mailutils/filter.h
+++ b/include/mailutils/filter.h
@@ -132,8 +132,9 @@ enum mu_iconv_fallback_mode
extern int mu_filter_iconv_create (mu_stream_t *s, mu_stream_t transport,
const char *fromcode, const char *tocode,
int flags,
- enum mu_iconv_fallback_mode fallback_mode);
-
+ enum mu_iconv_fallback_mode fallback_mode)
+ MU_DEPRECATED;
+
extern int mu_linelen_filter_create (mu_stream_t *pstream, mu_stream_t stream,
size_t limit, int flags);
diff --git a/include/mailutils/util.h b/include/mailutils/util.h
index e020dccc8..63503c556 100644
--- a/include/mailutils/util.h
+++ b/include/mailutils/util.h
@@ -152,6 +152,10 @@ int mu_rfc2822_in_reply_to (mu_message_t msg, char **pstr);
int mu_decode_filter (mu_stream_t *pfilter, mu_stream_t input,
const char *filter_type,
const char *fromcode, const char *tocode);
+int mu_decode_filter_args (mu_stream_t *pfilter, mu_stream_t input,
+ const char *filter_name,
+ int argc, const char **argv,
+ const char *fromcode, const char *tocode);
extern enum mu_iconv_fallback_mode mu_default_fallback_mode;
int mu_set_default_fallback (const char *str);
diff --git a/libmailutils/base/msgid.c b/libmailutils/base/msgid.c
index 84f055b73..c0731aa17 100644
--- a/libmailutils/base/msgid.c
+++ b/libmailutils/base/msgid.c
@@ -202,7 +202,7 @@ mu_rfc2822_in_reply_to (mu_message_t msg, char **pstr)
}
if (idx > 1)
- rc = mu_argcv_join (idx, argv, "", mu_argcv_escape_no, pstr);
+ rc = mu_argcv_join (idx, (char**) argv, "", mu_argcv_escape_no, pstr);
else
rc = MU_ERR_FAILURE;
return rc;
diff --git a/libmailutils/filter/Makefile.am b/libmailutils/filter/Makefile.am
index 9f0924e27..c60239e2c 100644
--- a/libmailutils/filter/Makefile.am
+++ b/libmailutils/filter/Makefile.am
@@ -25,7 +25,6 @@ libfilter_la_SOURCES =\
decode.c\
dot.c\
filter.c\
- filter_iconv.c\
fltchain.c\
fromflt.c\
header.c\
diff --git a/libmailutils/filter/decode.c b/libmailutils/filter/decode.c
index 56e7a5925..9d3956799 100644
--- a/libmailutils/filter/decode.c
+++ b/libmailutils/filter/decode.c
@@ -21,6 +21,7 @@
#endif
#include <unistd.h>
+#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <mailutils/stream.h>
@@ -44,30 +45,46 @@ mu_set_default_fallback (const char *str)
}
int
-mu_decode_filter (mu_stream_t *pfilter, mu_stream_t input,
- const char *filter_type,
- const char *fromcode, const char *tocode)
+mu_decode_filter_args (mu_stream_t *pfilter, mu_stream_t input,
+ const char *filter_name, int argc, const char **argv,
+ const char *fromcode, const char *tocode)
{
- mu_stream_t filter;
+ int xargc, i;
+ char **xargv;
+ int rc;
- int status = mu_filter_create (&filter, input, filter_type,
- MU_FILTER_DECODE, MU_STREAM_READ);
- if (status)
- return status;
+ xargc = argc + 5;
+ xargv = calloc (xargc + 1, sizeof (xargv[0]));
+ if (!xargv)
+ return ENOMEM;
- if (fromcode && tocode && mu_c_strcasecmp (fromcode, tocode))
- {
- mu_stream_t cvt;
+ i = 0;
+ if (filter_name)
+ xargv[i++] = (char*) filter_name;
+ for (; i < argc; i++)
+ xargv[i] = (char*) argv[i];
- status = mu_filter_iconv_create (&cvt, filter, fromcode, tocode,
- 0, mu_default_fallback_mode);
- if (status == 0)
- {
- mu_stream_unref (filter);
- filter = cvt;
- }
- }
- *pfilter = filter;
- return 0;
+ if (i)
+ xargv[i++] = "+";
+ xargv[i++] = "ICONV";
+ xargv[i++] = (char*) fromcode;
+ xargv[i++] = (char*) tocode;
+ xargv[i] = NULL;
+
+ rc = mu_filter_chain_create (pfilter, input,
+ MU_FILTER_DECODE, MU_STREAM_READ,
+ xargc, xargv);
+ free (xargv);
+ return rc;
+}
+
+
+int
+mu_decode_filter (mu_stream_t *pfilter, mu_stream_t input,
+ const char *filter_name,
+ const char *fromcode, const char *tocode)
+{
+ return mu_decode_filter_args (pfilter, input, filter_name, 0, NULL,
+ fromcode, tocode);
}
diff --git a/libmailutils/filter/filter_iconv.c b/libmailutils/filter/filter_iconv.c
deleted file mode 100644
index ae39370cf..000000000
--- a/libmailutils/filter/filter_iconv.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/* GNU Mailutils -- a suite of utilities for electronic mail
- Copyright (C) 2004, 2005, 2007, 2010 Free Software Foundation, Inc.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General
- Public License along with this library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <mailutils/stream.h>
-#include <mailutils/sys/stream.h>
-#include <mailutils/filter.h>
-#include <mailutils/errno.h>
-#include <mailutils/nls.h>
-
-#ifdef HAVE_ICONV_H
-# include <iconv.h>
-#endif
-
-#ifndef ICONV_CONST
-# define ICONV_CONST
-#endif
-
-#ifndef HAVE_ICONV
-# undef iconv_open
-# define iconv_open(tocode, fromcode) ((iconv_t) -1)
-
-# undef iconv
-# define iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft) (errno = EILSEQ, (size_t) -1)
-
-# undef iconv_close
-# define iconv_close(cd) 0
-
-#endif
-
-enum _icvt_state
- {
- state_closed, /* Filter is closed */
- state_open, /* Filter is open and running in conversion mode */
- state_copy_pass, /* Filter is open and running in copy-pass mode */
- state_copy_octal, /* Filter is open and running in copy-octal mode */
- state_iconv_error, /* A fatal iconv error has occurred */
- state_transport_error /* A fatal transport error has occurred */
- };
-
-struct icvt_stream
-{
- struct _mu_stream stream;
- mu_stream_t transport;/* I/O stream */
- int fallback_mode;
- iconv_t cd; /* Conversion descriptor */
- char *buf; /* Conversion buffer */
- size_t bufsize; /* Size of buf */
- size_t bufpos; /* Current position in buf */
- enum _icvt_state state;
- int ec; /* Error code */
- char errbuf[128]; /* Error message buffer */
-};
-
-static int
-_icvt_open (mu_stream_t stream)
-{
- struct icvt_stream *s = (struct icvt_stream *)stream;
- if (s->cd == (iconv_t) -1)
- return EINVAL;
- s->state = state_open;
- return 0;
-}
-
-static int
-_icvt_close (mu_stream_t stream)
-{
- struct icvt_stream *s = (struct icvt_stream *)stream;
- if (s->state != state_closed)
- {
- mu_stream_close (s->transport);
- iconv_close (s->cd);
- s->cd = (iconv_t) -1;
- s->state = state_closed;
- }
- return 0;
-}
-
-static void
-_icvt_done (mu_stream_t stream)
-{
- struct icvt_stream *s = (struct icvt_stream *)stream;
-
- if (s->state != state_closed)
- _icvt_close (stream);
- mu_stream_destroy (&s->transport);
- free (s->buf);
-}
-
-static int _icvt_read (mu_stream_t stream, char *optr, size_t osize,
- size_t *pnbytes);
-
-static int
-internal_icvt_read (mu_stream_t stream, char *optr, size_t osize,
- size_t *pnbytes)
-{
- struct icvt_stream *s = (struct icvt_stream *)stream;
- size_t nbytes = 0;
- int rc, status = 0;
- char *ob = optr;
- size_t olen = osize;
-
- if (s->bufpos == 0)
- {
- status = mu_stream_read (s->transport, s->buf, s->bufsize, &nbytes);
- if (status)
- {
- s->state = state_transport_error;
- s->ec = rc;
- return MU_ERR_FAILURE;
- }
- else if (nbytes == 0)
- {
- if (pnbytes)
- *pnbytes = 0;
- return 0;
- }
- }
-
- do
- {
- char ICONV_CONST *ib = s->buf;
- size_t inlen = s->bufpos + nbytes;
-
- rc = iconv (s->cd, &ib, &inlen, &ob, &olen);
- if (ib > s->buf)
- {
- memmove (s->buf, ib, inlen);
- s->bufpos = inlen;
- }
- else
- s->bufpos += nbytes;
-
- if (rc == -1)
- {
- if (errno == E2BIG)
- {
- if (ob > optr)
- break;
- else
- {
- s->ec = MU_ERR_BUFSPACE;
- return MU_ERR_BUFSPACE;
- }
- }
- else if (errno == EILSEQ)
- {
- switch (s->fallback_mode)
- {
- case mu_fallback_none:
- s->state = state_iconv_error;
- s->ec = errno;
- if (ob == optr)
- return MU_ERR_FAILURE;
- break;
-
- case mu_fallback_copy_pass:
- s->state = state_copy_pass;
- if (ob == optr)
- return _icvt_read (stream, optr, osize, pnbytes);
- break;
-
- case mu_fallback_copy_octal:
- s->state = state_copy_octal;
- if (ob == optr)
- return _icvt_read (stream, optr, osize, pnbytes);
- break;
- }
- }
- else if (errno == EINVAL)
- {
- if (inlen == s->bufsize)
- {
- /* Try to reallocate temp buffer */
- char *p = realloc (s->buf, s->bufsize + 128);
- if (!p)
- return ENOMEM;
- s->buf = p;
- s->bufsize += 128;
- }
- continue;
- }
- else
- {
- s->ec = errno;
- s->state = state_iconv_error;
- return MU_ERR_FAILURE;
- }
- }
- }
- while (olen > 0
- && (status = mu_stream_read (s->transport,
- s->buf + s->bufpos,
- s->bufsize - s->bufpos,
- &nbytes)) == 0
- && nbytes);
-
- if (status)
- {
- s->state = state_transport_error;
- s->ec = status;
- if (ob == optr)
- return MU_ERR_FAILURE;
- }
-
- if (pnbytes)
- *pnbytes = ob - optr;
- return 0;
-}
-
-#define ISPRINT(c) (((c)>=' '&&(c)<127)||(c)=='\n')
-
-static int
-copy_octal (struct icvt_stream *s, char *optr, size_t osize, size_t *pnbytes)
-{
- size_t i, j;
- int status;
-
- if (osize == 0)
- return MU_ERR_BUFSPACE;
-
- if (s->bufpos < osize)
- {
- size_t rdcount = osize;
- if (s->bufsize < rdcount)
- {
- /* Try to reallocate temp buffer */
- char *p = realloc (s->buf, rdcount);
- if (p)
- {
- s->bufsize = rdcount;
- s->buf = p;
- }
- else
- rdcount = s->bufsize;
- }
-
- status = mu_stream_read (s->transport,
- s->buf + s->bufpos,
- rdcount - s->bufpos,
- &rdcount);
- if (status)
- {
- s->state = state_transport_error;
- s->ec = status;
- if (s->bufpos == 0)
- return MU_ERR_FAILURE;
- }
- else
- s->bufpos += rdcount;
- }
-
- for (i = j = 0; j < osize && i < s->bufpos; i++)
- {
- if (ISPRINT (*(unsigned char*)(s->buf+i)))
- optr[j++] = s->buf[i];
- else if (j + 4 >= osize)
- break;
- else
- {
- sprintf (optr + j, "\\%03o", *(unsigned char*)(s->buf+i));
- j += 4;
- }
- }
- s->bufpos -= i;
- memmove (s->buf, s->buf + i, s->bufpos);
- if (pnbytes)
- *pnbytes = j;
- return 0;
-}
-
-static int
-copy_pass (struct icvt_stream *s, char *optr, size_t osize, size_t *pnbytes)
-{
- int status;
- size_t nbytes;
-
- if (s->bufpos)
- {
- size_t sz = s->bufpos < osize ? s->bufpos : osize;
- memcpy (optr, s->buf, sz);
- s->bufpos -= sz;
- if (s->bufpos)
- memmove (s->buf, s->buf + sz, s->bufpos);
- if (pnbytes)
- *pnbytes = sz;
- return 0;
- }
-
- status = mu_stream_read (s->transport, optr, osize, &nbytes);
- if (status)
- {
- s->state = state_transport_error;
- s->ec = status;
- if (s->bufpos == 0)
- return MU_ERR_FAILURE;
- }
- if (pnbytes)
- *pnbytes = nbytes;
- return 0;
-}
-
-static int
-_icvt_read (mu_stream_t stream, char *optr, size_t osize, size_t *pnbytes)
-{
- struct icvt_stream *s = (struct icvt_stream *)stream;
-
- switch (s->state)
- {
- case state_open:
- return internal_icvt_read (stream, optr, osize, pnbytes);
-
- case state_closed:
- return EINVAL;
-
- case state_copy_pass:
- return copy_pass (s, optr, osize, pnbytes);
-
- case state_copy_octal:
- return copy_octal (s, optr, osize, pnbytes);
-
- default:
- break;
- }
- return MU_ERR_FAILURE;
-}
-
-const char *
-_icvt_strerror (mu_stream_t stream, int rc)
-{
- struct icvt_stream *s = (struct icvt_stream *)stream;
-
- switch (s->state)
- {
- case state_transport_error:
- snprintf (s->errbuf, sizeof s->errbuf,
- _("Transport error: %s"), mu_strerror (s->ec));
- break;
-
- case state_iconv_error:
- switch (s->ec)
- {
- case EILSEQ:
- snprintf (s->errbuf, sizeof s->errbuf,
- _("Illegal multibyte sequence near %*.*s"),
- (int) s->bufpos, (int) s->bufpos, s->buf);
- break;
-
- default:
- snprintf (s->errbuf, sizeof s->errbuf,
- _("Iconv error: %s"), mu_strerror (s->ec));
- }
- break;
-
- case state_closed:
- return _("Stream is closed");
-
- default:
- return mu_strerror (s->ec);
- }
-
- return s->errbuf;
-}
-
-static int
-_icvt_ioctl (mu_stream_t stream, int code, int opcode, void *ptr)
-{
- struct icvt_stream *s = (struct icvt_stream *)stream;
- mu_transport_t *ptrans;
-
- switch (code)
- {
- case MU_IOCTL_TRANSPORT:
- if (!ptr)
- return EINVAL;
- switch (opcode)
- {
- case MU_IOCTL_OP_GET:
- ptrans = ptr;
- ptrans[0] = (mu_transport_t) s->transport;
- ptrans[1] = NULL;
- break;
-
- default:
- return ENOSYS;
- }
- break;
-
- case MU_IOCTL_SUBSTREAM:
- case MU_IOCTL_TRANSPORT_BUFFER:
- return mu_stream_ioctl (s->transport, code, opcode, ptr);
-
- default:
- return ENOSYS;
- }
- return 0;
-}
-
-int
-_icvt_wait (mu_stream_t stream, int *pflags, struct timeval *tvp)
-{
- struct icvt_stream *s = (struct icvt_stream *)stream;
- return mu_stream_wait (s->transport, pflags, tvp);
-}
-
-/* FIXME: Seeks in the *transport* stream. */
-int
-_icvt_seek (mu_stream_t stream, mu_off_t off, mu_off_t *presult)
-{
- struct icvt_stream *s = (struct icvt_stream *)stream;
- return mu_stream_seek (s->transport, off, MU_SEEK_SET, presult);
-}
-
-int
-mu_filter_iconv_create (mu_stream_t *s, mu_stream_t transport,
- const char *fromcode, const char *tocode, int flags,
- enum mu_iconv_fallback_mode fallback_mode)
-{
- struct icvt_stream *iptr;
- iconv_t cd;
- int rc;
- mu_stream_t stream;
-
- cd = iconv_open (tocode, fromcode);
- if (cd == (iconv_t) -1)
- return MU_ERR_FAILURE;
-
- iptr = (struct icvt_stream *) _mu_stream_create (sizeof (*iptr), flags);
- if (!iptr)
- {
- iconv_close (cd);
- return ENOMEM;
- }
-
- mu_stream_ref (transport);
- iptr->transport = transport;
- iptr->fallback_mode = fallback_mode;
- iptr->cd = cd;
- iptr->state = state_closed;
- iptr->bufsize = 128;
- iptr->buf = malloc (iptr->bufsize);
- if (!iptr->buf)
- {
- free (iptr);
- return ENOMEM;
- }
- iptr->bufpos = 0;
-
- iptr->stream.open = _icvt_open;
- iptr->stream.close = _icvt_close;
- iptr->stream.read = _icvt_read;
- iptr->stream.done = _icvt_done;
- iptr->stream.error_string = _icvt_strerror;
- iptr->stream.ctl = _icvt_ioctl;
- iptr->stream.wait = _icvt_wait;
- iptr->stream.seek = _icvt_seek;
- iptr->stream.flags = MU_STREAM_READ | MU_STREAM_SEEK;
- stream = (mu_stream_t)iptr;
- rc = mu_stream_open (stream);
- if (rc)
- mu_stream_destroy (&stream);
- else
- *s = stream;
- return 0;
-}
diff --git a/libmailutils/filter/iconvflt.c b/libmailutils/filter/iconvflt.c
index 54458f1b0..fbd30660d 100644
--- a/libmailutils/filter/iconvflt.c
+++ b/libmailutils/filter/iconvflt.c
@@ -147,6 +147,7 @@ _icvt_decoder (void *xd,
switch (_icvt->fallback_mode)
{
case mu_fallback_none:
+ iobuf->errcode = EILSEQ;
return mu_filter_failure;
case mu_fallback_copy_pass:
@@ -181,6 +182,7 @@ _icvt_decoder (void *xd,
break;
default:
+ iobuf->errcode = errno;
return mu_filter_failure;
}
}
diff --git a/libmailutils/mime/mimehdr.c b/libmailutils/mime/mimehdr.c
index 21da8a8ce..ae4750359 100644
--- a/libmailutils/mime/mimehdr.c
+++ b/libmailutils/mime/mimehdr.c
@@ -514,10 +514,9 @@ mu_mimehdr_decode_param (const char *value, int flags,
rc = mu_memory_stream_create (&outstr, 0);
if (rc)
break;
-
- rc = mu_filter_iconv_create (&cvt, instr, source_cs, charset,
- 0,
- mu_default_fallback_mode);
+
+ rc = mu_decode_filter (&cvt, instr, NULL,
+ source_cs, charset);
if (rc)
break;
diff --git a/libmailutils/stream/fltstream.c b/libmailutils/stream/fltstream.c
index 8160d31fa..edfed3b59 100644
--- a/libmailutils/stream/fltstream.c
+++ b/libmailutils/stream/fltstream.c
@@ -49,7 +49,7 @@ init_iobuf (struct mu_filter_io *io, struct _mu_filter_stream *fs)
io->isize = MFB_RDBYTES (fs->inbuf);
io->output = MFB_ENDPTR (fs->outbuf);
io->osize = MFB_FREESIZE (fs->outbuf);
- io->errcode = 0;
+ io->errcode = MU_ERR_FAILURE;
io->eof = 0;
}
@@ -60,6 +60,7 @@ filter_stream_init (struct _mu_filter_stream *fs)
{
struct mu_filter_io iobuf;
memset (&iobuf, 0, sizeof (iobuf));
+ iobuf.errcode = MU_ERR_FAILURE;
if (fs->xcode (fs->xdata, mu_filter_init, &iobuf) == mu_filter_failure)
return iobuf.errcode;
}
diff --git a/libmailutils/tests/wicket.c b/libmailutils/tests/wicket.c
index 7d0ea603e..f7eb81950 100644
--- a/libmailutils/tests/wicket.c
+++ b/libmailutils/tests/wicket.c
@@ -39,7 +39,7 @@ match_string (const char *str)
return;
}
MU_ASSERT (mu_stream_seek (stream, 0, MU_SEEK_SET, NULL));
- loc.mu_file = name;
+ loc.mu_file = (char*)name;
loc.mu_line = 0;
loc.mu_col = 0;
rc = mu_wicket_stream_match_url (stream, &loc, u, MU_URL_PARSE_ALL, &url);
diff --git a/libmu_compat/Makefile.am b/libmu_compat/Makefile.am
index c55590830..fffa99f7b 100644
--- a/libmu_compat/Makefile.am
+++ b/libmu_compat/Makefile.am
@@ -19,6 +19,7 @@ lib_LTLIBRARIES = libmu_compat.la
libmu_compat_la_SOURCES = \
argcv.c\
+ filter_iconv.c\
vartab.c
INCLUDES = @MU_LIB_COMMON_INCLUDES@ -I/libmailutils
diff --git a/libmu_compat/filter_iconv.c b/libmu_compat/filter_iconv.c
new file mode 100644
index 000000000..a0aa62870
--- /dev/null
+++ b/libmu_compat/filter_iconv.c
@@ -0,0 +1,51 @@
+/* GNU Mailutils -- a suite of utilities for electronic mail
+ Copyright (C) 2010 Free Software Foundation, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 3 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General
+ Public License along with this library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <stdlib.h>
+#include <mailutils/types.h>
+#include <mailutils/stream.h>
+#include <mailutils/filter.h>
+
+int
+mu_filter_iconv_create (mu_stream_t *s, mu_stream_t transport,
+ const char *fromcode, const char *tocode, int flags,
+ enum mu_iconv_fallback_mode fallback_mode)
+{
+ const char *argv[] = { "iconv", fromcode, tocode, NULL, NULL };
+
+ switch (fallback_mode)
+ {
+ case mu_fallback_none:
+ argv[3] = "none";
+ break;
+
+ case mu_fallback_copy_pass:
+ argv[3] = "copy-pass";
+ break;
+
+ case mu_fallback_copy_octal:
+ argv[3] = "copy-octal";
+ }
+
+ return mu_filter_create_args (s, transport, "iconv", 4, argv,
+ MU_FILTER_DECODE, MU_FILTER_READ);
+}
+
+
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 3099cf32f..ddb2b8ad1 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -135,8 +135,6 @@ libmailutils/stream/file_stream.c
libmailutils/stream/prog_stream.c
libmailutils/stream/logstream.c
-libmailutils/filter/filter_iconv.c
-
libmailutils/server/ipsrv.c
libmailutils/server/msrv.c

Return to:

Send suggestions and report system problems to the System administrator.