diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-12-13 17:02:59 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-12-13 17:10:14 +0200 |
commit | 45c0bb9011bdfb74d77d6ca90481441844612692 (patch) | |
tree | 6a15a5cb1f946ba23b8f272c24c8eea6316b1f44 | |
parent | 1f1dca416897539ad734149945482fecf6f066e5 (diff) | |
download | mailutils-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.c | 35 | ||||
-rw-r--r-- | imap4d/imap4d.h | 1 | ||||
-rw-r--r-- | include/mailutils/filter.h | 5 | ||||
-rw-r--r-- | include/mailutils/util.h | 4 | ||||
-rw-r--r-- | libmailutils/base/msgid.c | 2 | ||||
-rw-r--r-- | libmailutils/filter/Makefile.am | 1 | ||||
-rw-r--r-- | libmailutils/filter/decode.c | 59 | ||||
-rw-r--r-- | libmailutils/filter/filter_iconv.c | 486 | ||||
-rw-r--r-- | libmailutils/filter/iconvflt.c | 2 | ||||
-rw-r--r-- | libmailutils/mime/mimehdr.c | 7 | ||||
-rw-r--r-- | libmailutils/stream/fltstream.c | 3 | ||||
-rw-r--r-- | libmailutils/tests/wicket.c | 2 | ||||
-rw-r--r-- | libmu_compat/Makefile.am | 1 | ||||
-rw-r--r-- | libmu_compat/filter_iconv.c | 51 | ||||
-rw-r--r-- | po/POTFILES.in | 2 |
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 |