commit-mailutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Mailutils branch, master, updated. release-2.2-254-g2613d48


From: Sergey Poznyakoff
Subject: [SCM] GNU Mailutils branch, master, updated. release-2.2-254-g2613d48
Date: Sat, 04 Dec 2010 12:08:27 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Mailutils".

http://git.savannah.gnu.org/cgit/mailutils.git/commit/?id=2613d48d056396600993c447ab9fe6b64896abe6

The branch, master has been updated
       via  2613d48d056396600993c447ab9fe6b64896abe6 (commit)
       via  76df98da17f576b71e6cbc83bbf527b685be1178 (commit)
       via  30bf4d542198abc23b897dd81fc280354903e49f (commit)
       via  554f80a1122f7a931f8c09056f4238b38d5034e8 (commit)
      from  89feaf0252a0a25220a86b20b287213b7c13191b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 2613d48d056396600993c447ab9fe6b64896abe6
Author: Sergey Poznyakoff <address@hidden>
Date:   Sat Dec 4 14:00:01 2010 +0200

    mu: use stdstream functions.
    
    * include/mailutils/stdstream.h (mu_printf): New prototype.
    * include/mailutils/version.h: Include mailutils/types.h instead of
    stdio.h
    (mu_fprint_options, mu_fprint_conf_option): Remove protos.
    (mu_format_options, mu_format_conf_option): New protos.
    * libmailutils/base/version.c (mu_fprint_options): Replace
    with mu_format_options, which outputs formatted data to a mu_stream_t.
    (mu_fprint_conf_option): Ditto.  Replaced by mu_format_conf_option.
    (mu_print_options): Update accordingly.
    * libmailutils/stdstream/basestr.c (mu_printf): New function.
    
    * mu/acl.c: Replace stdio calls with stdstream ones.
    * mu/cflags.c: Likewise.
    * mu/filter.c: Likewise.
    * mu/flt2047.c: Likewise.
    * mu/imap.c: Likewise.
    * mu/info.c: Likewise.
    * mu/ldflags.c: Likewise.
    * mu/logger.c: Likewise.
    * mu/mu.c: Likewise.
    * mu/mu.h: Likewise.
    * mu/pop.c: Likewise.
    * mu/query.c: Likewise.
    * mu/shell.c: Likewise.
    * mu/verbose.c: Likewise.
    * mu/wicket.c: Likewise.

commit 76df98da17f576b71e6cbc83bbf527b685be1178
Author: Sergey Poznyakoff <address@hidden>
Date:   Sat Dec 4 12:19:50 2010 +0200

    Introduce stdstream module; move deprecated functions to libmu_compat.
    
    * include/mailutils/log.h: New file.
    * include/mailutils/stdstream.h: New file.
    * include/mailutils/Makefile.am (pkginclude_HEADERS): Add stdstream.h
    and log.h.
    * include/mailutils/argcv.h: Include mailutils/types.h
    * include/mailutils/mailutils.h: Include stdstream.h
    Remove vartab.h
    * include/mailutils/types.hin (MU_DEPRECATED): New define.
    * include/mailutils/vartab.h: Mark this header and all prototypes
    it defines as deprecated.
    
    * libmailutils/stdstream/Makefile.am: New file.
    * libmailutils/stdstream/basestr.c: New file.
    * libmailutils/stdstream/strerr.c: New file.
    * libmu_compat/Makefile.am: New file.
    * libmu_compat/tests/.gitignore: New file.
    * libmu_compat/tests/Makefile.am: New file.
    * libmu_compat/tests/atlocal.in: New file.
    * libmu_compat/tests/testsuite.at: New file.
    * libmailutils/base/Makefile.am (noinst_LTLIBRARIES): Remove
    argcv.c and vartab.c.
    * libmailutils/Makefile.am (SUBDIRS): Add stdstream.
    (libmailutils_la_LIBADD): Add stdstream/libstdstream.la.
    * libmailutils/tests/Makefile.am (noinst_PROGRAMS): Remove argcv
    (TESTSUITE_AT): Remove argcv.at
    * libmailutils/tests/testsuite.at: Do not include argcv.at.
    
    * libmailutils/base/argcv.c: Move to libmu_compat/argcv.c
    * libmailutils/tests/argcv.at: Move to libmu_compat/tests/argcv.at
    * libmailutils/tests/argcv.c: Move to libmu_compat/tests/argcv.c
    * libmailutils/base/vartab.c: Move to libmu_compat/vartab.c
    
    * Makefile.am (SUBDIRS): Add libmu_compat.
    * configure.ac: Add libmu_compat/tests, libmu_compat/tests/Makefile,
    libmu_compat/tests/atlocal, libmu_compat/Makefile and
    libmailutils/stdstream/Makefile to config file list.
    
    * mu/ldflags.c (lib_descr): Add mu_compat.
    * mu/logger.c (logger_parse_opt): -t does not imply --syslog.
    (mutool_logger): Use inline-comment filter to insert "tag: "
    prefix.
    Flush and destroy both streams before returning.
    
    * po/POTFILES.in: Add libmailutils/stream/logstream.c,
    libmailutils/stdstream/baseio.c, libmailutils/stdstream/strerr.c
    and mu/logger.c.

commit 30bf4d542198abc23b897dd81fc280354903e49f
Author: Sergey Poznyakoff <address@hidden>
Date:   Fri Dec 3 19:52:56 2010 +0200

    Initial implementation of log streams.
    
    * include/mailutils/mailutils.h: Include mailutils/log.h.
    * include/mailutils/stream.h (MU_IOCTL_LOGSTREAM_GET_SEVERITY)
    (MU_IOCTL_LOGSTREAM_SET_SEVERITY)
    (MU_IOCTL_LOGSTREAM_GET_LOCUS,MU_IOCTL_LOGSTREAM_SET_LOCUS)
    (MU_IOCTL_LOGSTREAM_GET_MODE,MU_IOCTL_LOGSTREAM_SET_MODE): New ioctls.
    * include/mailutils/sys/logstream.h: New file.
    * include/mailutils/sys/syslogstream.h: New file.
    * include/mailutils/sys/Makefile.am (sysinclude_HEADERS): Add logstream.h
    and syslogstream.h
    * include/mailutils/types.hin (mu_locus): New struct.
    
    * libmailutils/stream/Makefile.am (libstream_la_SOURCES): Add logstream.c
    and syslogstream.c.
    
    * mu/logger.c: New file.
    * mu/template.c: New file.
    * mu/Makefile.am (MODULES): Add logger.c
    (EXTRA_DIST): Add template.c.

commit 554f80a1122f7a931f8c09056f4238b38d5034e8
Author: Sergey Poznyakoff <address@hidden>
Date:   Fri Dec 3 12:17:29 2010 +0200

    streams: introduce setbuf hooks.
    
    * include/mailutils/sys/stream.h (_mu_stream) <setbuf_hook>: New member.
    * libmailutils/stream/stream.c (mu_stream_set_buffer): Use setbuf_hook
    to decide whether the operation is allowed.

-----------------------------------------------------------------------

Summary of changes:
 Makefile.am                                        |    1 +
 configure.ac                                       |    5 +
 include/mailutils/Makefile.am                      |    2 +
 include/mailutils/argcv.h                          |   14 +-
 mh/prompter.h => include/mailutils/log.h           |   38 ++-
 include/mailutils/mailutils.h                      |    3 +-
 mail/version.c => include/mailutils/stdstream.h    |   61 ++--
 include/mailutils/stream.h                         |   21 +-
 include/mailutils/sys/Makefile.am                  |    2 +
 .../mailutils/sys/{streamtrans.h => logstream.h}   |   15 +-
 include/mailutils/sys/stream.h                     |    2 +
 .../sys/{streamtrans.h => syslogstream.h}          |   13 +-
 include/mailutils/types.hin                        |   11 +
 include/mailutils/vartab.h                         |   24 +-
 include/mailutils/version.h                        |    7 +-
 libmailutils/Makefile.am                           |    3 +-
 libmailutils/base/Makefile.am                      |    2 -
 libmailutils/base/version.c                        |   32 ++-
 libmailutils/{mailer => stdstream}/Makefile.am     |    8 +-
 libmailutils/stdstream/basestr.c                   |   93 +++++
 libmailutils/stdstream/strerr.c                    |  101 ++++++
 libmailutils/stream/Makefile.am                    |    2 +
 libmailutils/stream/dbgstream.c                    |    4 +-
 libmailutils/stream/logstream.c                    |  364 ++++++++++++++++++++
 libmailutils/stream/stream.c                       |    7 +
 libmailutils/stream/syslogstream.c                 |   90 +++++
 libmailutils/tests/Makefile.am                     |    2 -
 libmailutils/tests/testsuite.at                    |    1 -
 testsuite/testsuite.at => libmu_compat/Makefile.am |   14 +-
 {libmailutils/base => libmu_compat}/argcv.c        |    0
 {maidag => libmu_compat}/tests/.gitignore          |    1 +
 {frm => libmu_compat}/tests/Makefile.am            |   15 +-
 {libmailutils => libmu_compat}/tests/argcv.at      |   12 +-
 {libmailutils => libmu_compat}/tests/argcv.c       |    0
 {libmailutils => libmu_compat}/tests/atlocal.in    |    0
 .../version.at => libmu_compat/tests/testsuite.at  |    6 +-
 {libmailutils/base => libmu_compat}/vartab.c       |    1 +
 mu/Makefile.am                                     |    3 +-
 mu/acl.c                                           |    8 +-
 mu/cflags.c                                        |    2 +-
 mu/filter.c                                        |   26 +-
 mu/flt2047.c                                       |   24 +-
 mu/imap.c                                          |   22 +-
 mu/info.c                                          |    4 +-
 mu/ldflags.c                                       |    7 +-
 mu/logger.c                                        |  218 ++++++++++++
 mu/mu.c                                            |    2 +
 mu/mu.h                                            |    1 -
 mu/pop.c                                           |   24 +-
 mu/query.c                                         |   11 +-
 mu/shell.c                                         |   50 +--
 mu/template.c                                      |   91 +++++
 mu/verbose.c                                       |   12 +-
 mu/wicket.c                                        |    8 +-
 po/POTFILES.in                                     |    5 +
 55 files changed, 1262 insertions(+), 233 deletions(-)
 copy mh/prompter.h => include/mailutils/log.h (55%)
 copy mail/version.c => include/mailutils/stdstream.h (53%)
 copy include/mailutils/sys/{streamtrans.h => logstream.h} (79%)
 copy include/mailutils/sys/{streamtrans.h => syslogstream.h} (80%)
 copy libmailutils/{mailer => stdstream}/Makefile.am (90%)
 create mode 100644 libmailutils/stdstream/basestr.c
 create mode 100644 libmailutils/stdstream/strerr.c
 create mode 100644 libmailutils/stream/logstream.c
 create mode 100644 libmailutils/stream/syslogstream.c
 copy testsuite/testsuite.at => libmu_compat/Makefile.am (78%)
 rename {libmailutils/base => libmu_compat}/argcv.c (100%)
 copy {maidag => libmu_compat}/tests/.gitignore (91%)
 copy {frm => libmu_compat}/tests/Makefile.am (87%)
 rename {libmailutils => libmu_compat}/tests/argcv.at (92%)
 rename {libmailutils => libmu_compat}/tests/argcv.c (100%)
 copy {libmailutils => libmu_compat}/tests/atlocal.in (100%)
 copy sieve/tests/version.at => libmu_compat/tests/testsuite.at (92%)
 rename {libmailutils/base => libmu_compat}/vartab.c (99%)
 create mode 100644 mu/logger.c
 create mode 100644 mu/template.c

diff --git a/Makefile.am b/Makefile.am
index aed3f5a..d17f724 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -94,6 +94,7 @@ SUBDIRS = . \
  sql\
  libmu_auth\
  libproto\
+ libmu_compat\
  testsuite\
  lib\
  libmu_argp\
diff --git a/configure.ac b/configure.ac
index abcf5c9..aafad7f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1205,6 +1205,7 @@ AC_ARG_WITH([mh-bindir],
 # Initialize the (autotest) test suite.
 AC_CONFIG_TESTDIR(libmailutils/tests)
 AC_CONFIG_TESTDIR(testsuite)
+AC_CONFIG_TESTDIR(libmu_compat/tests)
 AC_CONFIG_TESTDIR(frm/tests)
 AC_CONFIG_TESTDIR(maidag/tests)
 AC_CONFIG_TESTDIR(messages/tests)
@@ -1214,6 +1215,8 @@ AC_CONFIG_TESTDIR(mh/tests)
 
 AC_CONFIG_FILES([libmailutils/tests/Makefile
                  libmailutils/tests/atlocal
+                libmu_compat/tests/Makefile
+                libmu_compat/tests/atlocal
                 testsuite/Makefile
                  testsuite/atlocal
                  frm/tests/Makefile
@@ -1368,6 +1371,7 @@ AC_CONFIG_FILES([
  libproto/pop/Makefile
  libproto/nntp/Makefile
  libproto/imap/Makefile
+ libmu_compat/Makefile
  maidag/Makefile
  mail/Makefile
  mail/testsuite/Makefile
@@ -1384,6 +1388,7 @@ AC_CONFIG_FILES([
  libmailutils/server/Makefile
  libmailutils/string/Makefile
  libmailutils/stream/Makefile
+ libmailutils/stdstream/Makefile
  libmailutils/url/Makefile
  libmailutils/Makefile
  messages/Makefile
diff --git a/include/mailutils/Makefile.am b/include/mailutils/Makefile.am
index b52db2c..b315158 100644
--- a/include/mailutils/Makefile.am
+++ b/include/mailutils/Makefile.am
@@ -61,6 +61,7 @@ pkginclude_HEADERS = \
  libcfg.h\
  list.h\
  locker.h\
+ log.h\
  mailbox.h\
  mailcap.h\
  mailer.h\
@@ -90,6 +91,7 @@ pkginclude_HEADERS = \
  server.h\
  sieve.h\
  smtp.h\
+ stdstream.h\
  stream.h\
  syslog.h\
  sql.h\
diff --git a/include/mailutils/argcv.h b/include/mailutils/argcv.h
index 49d3bfa..4a8f293 100644
--- a/include/mailutils/argcv.h
+++ b/include/mailutils/argcv.h
@@ -24,6 +24,8 @@
 #include <unistd.h>
 #include <string.h>
 
+#include <mailutils/types.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -37,20 +39,22 @@ enum mu_argcv_escape
     mu_argcv_escape_c
     /*    mu_argcv_escape_sh */
   };
+
 int mu_argcv_join (int argc, char **argv, char *delim,
                   enum mu_argcv_escape esc,
                   char **pstring);
-int mu_argcv_string (int argc, char **argv, char **string);
-
 void mu_argcv_remove (int *pargc, char ***pargv,
                      int (*sel) (const char *, void *), void *);
-  
+int mu_argcv_string (int argc, char **argv, char **string);
+
+  
 /* Deprecated interfaces */  
+
 #define MU_ARGCV_RETURN_DELIMS 0x01
 
 #ifndef MU_ARCGV_DEPRECATED
-# define MU_ARCGV_DEPRECATED __attribute__((deprecated))
-#endif  
+# define MU_ARCGV_DEPRECATED MU_DEPRECATED
+#endif
   
 int mu_argcv_get    (const char *command, const char *delim,
                     const char *cmnt,
diff --git a/mh/prompter.h b/include/mailutils/log.h
similarity index 55%
copy from mh/prompter.h
copy to include/mailutils/log.h
index cdaf838..a36b85a 100644
--- a/mh/prompter.h
+++ b/include/mailutils/log.h
@@ -14,14 +14,36 @@
    You should have received a copy of the GNU General Public License
    along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */
 
-void prompter_init (void);
-void prompter_done (void);
-void prompter_set_erase (const char *keyseq);
-void prompter_set_kill (const char *keyseq);
-char *prompter_get_value (const char *name);
-char *prompter_get_line (void);
-char *doteof_filter (char *val);
+#ifndef _MAILUTILS_LOG_H
+#define _MAILUTILS_LOG_H
 
-extern mu_stream_t strout;
+#ifdef __cplusplus
+extern "C" {
+#endif
 
+#include <mailutils/types.h>
 
+#define MU_LOG_DEBUG   0
+#define MU_LOG_INFO    1
+#define MU_LOG_NOTICE  2
+#define MU_LOG_WARNING 3
+#define MU_LOG_ERROR   4
+#define MU_LOG_CRIT    5
+#define MU_LOG_ALERT   6
+#define MU_LOG_EMERG   7
+
+#define MU_LOGMODE_SEVERITY 0x0001
+#define MU_LOGMODE_LOCUS    0x0002
+
+int mu_log_stream_create (mu_stream_t *, mu_stream_t); 
+int mu_syslog_stream_create (mu_stream_t *, int);
+
+extern char *_mu_severity_str[];
+extern int _mu_severity_num;
+  
+#ifdef __cplusplus
+}
+#endif
+  
+#endif
+  
diff --git a/include/mailutils/mailutils.h b/include/mailutils/mailutils.h
index cec169f..19b8e77 100644
--- a/include/mailutils/mailutils.h
+++ b/include/mailutils/mailutils.h
@@ -59,11 +59,12 @@
 #include <mailutils/url.h>
 #include <mailutils/gocs.h>
 #include <mailutils/version.h>
-#include <mailutils/vartab.h>
 #include <mailutils/io.h>
 #include <mailutils/secret.h>
 #include <mailutils/cctype.h>
 #include <mailutils/cstr.h>
 #include <mailutils/wordsplit.h>
+#include <mailutils/log.h>
+#include <mailutils/stdstream.h>
 
 /* EOF */
diff --git a/mail/version.c b/include/mailutils/stdstream.h
similarity index 53%
copy from mail/version.c
copy to include/mailutils/stdstream.h
index 12c907b..1f2e0bf 100644
--- a/mail/version.c
+++ b/include/mailutils/stdstream.h
@@ -1,6 +1,5 @@
 /* GNU Mailutils -- a suite of utilities for electronic mail
-   Copyright (C) 1999, 2000, 2001, 2007, 2010 Free Software Foundation,
-   Inc.
+   Copyright (C) 2009 Free Software Foundation, Inc.
 
    GNU Mailutils is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -15,40 +14,34 @@
    You should have received a copy of the GNU General Public License
    along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */
 
-#include "mail.h"
+#ifndef _MAILUTILS_STDSTREAM_H
+#define _MAILUTILS_STDSTREAM_H
 
-/*
- * ve[rsion]
- */
+#include <mailutils/types.h>
 
-static const char *with_defs[] =
-{
-#ifdef WITH_PTHREAD
-  "PTHREAD",
+#ifdef __cplusplus
+extern "C" {
 #endif
-#ifdef WITH_BDB2
-  "BDB2",
+
+extern mu_stream_t mu_strin;
+extern mu_stream_t mu_strout;
+extern mu_stream_t mu_strerr;
+
+extern const char *mu_program_name;
+  
+#define MU_STRERR_STDERR  0
+#define MU_STRERR_SYSLOG  1
+/* #define MU_STRERR_FILE    2 */
+
+void mu_stdstream_setup (void);
+int mu_stdstream_strerr_create (mu_stream_t *str, int type, int facility,
+                               int priority, const char *tag,
+                               const char *fname);
+int mu_printf (const char *fmt, ...);
+  
+#ifdef __cplusplus
+}
 #endif
-#ifdef WITH_READLINE
-  "READLINE",
+  
 #endif
-  NULL
-};
-
-
-int
-mail_version (int argc MU_ARG_UNUSED, char **argv MU_ARG_UNUSED)
-{ 
-  fprintf (ofile, "%s", program_version);
-  if (with_defs[0] != NULL)
-    {
-      int i;
-      fprintf (ofile, " (");
-      for (i = 0; with_defs[i]; i++)
-       fprintf (ofile, " %s", with_defs[i]);
-      fprintf (ofile, " )");
-    }
-  fprintf (ofile, "\n");
-
-  return 0;
-}
+  
diff --git a/include/mailutils/stream.h b/include/mailutils/stream.h
index de980d3..a7bbfe1 100644
--- a/include/mailutils/stream.h
+++ b/include/mailutils/stream.h
@@ -76,7 +76,7 @@ enum mu_buffer_type
 
 #define MU_IOCTL_GET_ECHO        12     
 #define MU_IOCTL_SET_ECHO        13  
-
+  
 /* The following ioctls are for nullstreams only: */  
 #define MU_IOCTL_NULLSTREAM_SET_PATTERN 14
   /* Set read pattern.
@@ -89,7 +89,24 @@ enum mu_buffer_type
   /* Limit stream size.  Argument: mu_off_t *psize; */
 #define MU_IOCTL_NULLSTREAM_CLRSIZE 17
   /* Lift the size limit.  Argument: NULL */
-  
+
+/* The following are for logstreams */
+  /* Get or set logging severity.
+     Arg: unsigned *
+  */
+#define MU_IOCTL_LOGSTREAM_GET_SEVERITY 18
+#define MU_IOCTL_LOGSTREAM_SET_SEVERITY 19
+  /* Get or set locus.
+     Arg: struct mu_locus *
+  */
+#define MU_IOCTL_LOGSTREAM_GET_LOCUS    20
+#define MU_IOCTL_LOGSTREAM_SET_LOCUS    21
+  /* Get or set log mode.
+     Arg: int *
+  */
+#define MU_IOCTL_LOGSTREAM_GET_MODE     22
+#define MU_IOCTL_LOGSTREAM_SET_MODE     23
+
 #define MU_TRANSPORT_INPUT  0
 #define MU_TRANSPORT_OUTPUT 1
 #define MU_TRANSPORT_VALID_TYPE(n) \
diff --git a/include/mailutils/sys/Makefile.am 
b/include/mailutils/sys/Makefile.am
index 7904561..9af2cbd 100644
--- a/include/mailutils/sys/Makefile.am
+++ b/include/mailutils/sys/Makefile.am
@@ -33,6 +33,7 @@ sysinclude_HEADERS = \
  iterator.h\
  iostream.h\
  list.h\
+ logstream.h\
  mailbox.h\
  mailer.h\
  mapfile_stream.h\
@@ -53,6 +54,7 @@ sysinclude_HEADERS = \
  streamref.h\
  streamtrans.h\
  stream.h\
+ syslogstream.h\
  temp_file_stream.h\
  tls-stream.h\
  url.h\
diff --git a/include/mailutils/sys/streamtrans.h 
b/include/mailutils/sys/logstream.h
similarity index 79%
copy from include/mailutils/sys/streamtrans.h
copy to include/mailutils/sys/logstream.h
index 25bc0d9..57db6db 100644
--- a/include/mailutils/sys/streamtrans.h
+++ b/include/mailutils/sys/logstream.h
@@ -14,14 +14,19 @@
    You should have received a copy of the GNU Lesser General Public License
    along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */
 
-#ifndef _MAILUTILS_SYS_STREAMTRANS_H
-#define _MAILUTILS_SYS_STREAMTRANS_H
+#ifndef _MAILUTILS_SYS_LOGSTREAM_H
+#define _MAILUTILS_SYS_LOGSTREAM_H
 
 #include <mailutils/types.h>
 #include <mailutils/sys/stream.h>
 
-struct _mu_streamtrans
+struct _mu_log_stream
 {
-  struct _mu_stream base;      /* Superclass */
-  mu_stream_t transport;       /* Transport stream */
+  struct _mu_stream base;
+  mu_stream_t transport;
+  unsigned severity;
+  int logmode;
+  struct mu_locus locus;
 };
+
+#endif
diff --git a/include/mailutils/sys/stream.h b/include/mailutils/sys/stream.h
index 2fe18ae..f4217da 100644
--- a/include/mailutils/sys/stream.h
+++ b/include/mailutils/sys/stream.h
@@ -68,6 +68,8 @@ struct _mu_stream
   void (*event_cb) (struct _mu_stream *, int code, unsigned long, void *);
   int  event_mask;
   void *event_cb_data;
+
+  int (*setbuf_hook) (mu_stream_t, enum mu_buffer_type, size_t);
   
   const char *(*error_string) (struct _mu_stream *, int);
   
diff --git a/include/mailutils/sys/streamtrans.h 
b/include/mailutils/sys/syslogstream.h
similarity index 80%
copy from include/mailutils/sys/streamtrans.h
copy to include/mailutils/sys/syslogstream.h
index 25bc0d9..5976351 100644
--- a/include/mailutils/sys/streamtrans.h
+++ b/include/mailutils/sys/syslogstream.h
@@ -14,14 +14,17 @@
    You should have received a copy of the GNU Lesser General Public License
    along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */
 
-#ifndef _MAILUTILS_SYS_STREAMTRANS_H
-#define _MAILUTILS_SYS_STREAMTRANS_H
+#ifndef _MAILUTILS_SYS_SYSLOGSTREAM_H
+#define _MAILUTILS_SYS_SYSLOGSTREAM_H
 
 #include <mailutils/types.h>
 #include <mailutils/sys/stream.h>
 
-struct _mu_streamtrans
+struct _mu_syslog_stream
 {
-  struct _mu_stream base;      /* Superclass */
-  mu_stream_t transport;       /* Transport stream */
+  struct _mu_stream base;
+  int prio;
 };
+
+#endif
+
diff --git a/include/mailutils/types.hin b/include/mailutils/types.hin
index a3f3ca6..26916e5 100644
--- a/include/mailutils/types.hin
+++ b/include/mailutils/types.hin
@@ -33,6 +33,10 @@
 # define MU_PRINTFLIKE(fmt,narg) __attribute__ ((__format__ (__printf__, fmt, 
narg)))
 #endif
 
+#ifndef MU_DEPRECATED
+# define MU_DEPRECATED __attribute__ ((deprecated))
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -129,6 +133,13 @@ typedef struct _mu_mime_io_buffer *mu_mime_io_buffer_t;
 
 #define MU_DEFAULT_RECORD _MU_DEFAULT_RECORD_
 
+struct mu_locus
+{
+  char *mu_file;
+  unsigned mu_line;
+  unsigned mu_col;
+};
+  
 enum mu_gocs_op
   {
     mu_gocs_op_set,
diff --git a/include/mailutils/vartab.h b/include/mailutils/vartab.h
index 26f46bb..5d05982 100644
--- a/include/mailutils/vartab.h
+++ b/include/mailutils/vartab.h
@@ -20,17 +20,27 @@
 
 #include <mailutils/types.h>
 
+#ifdef MU_SUPPRESS_DEPRECATION
+# undef MU_DEPRECATED
+# define MU_DEPRECATED
+#else
+# warning "Mailutils support for vartab functions has been deprecated."
+# warning "Revise your code to use <mailutils/wordsplit.h>."
+#endif
+
 typedef int (*mu_var_expansion_fp) (const char *name, void *data, char **p);
 typedef void (*mu_var_free_fp) (void *data, char *value);
 
-int mu_vartab_create (mu_vartab_t *pvar);
-int mu_vartab_destroy (mu_vartab_t *pvar);
+int mu_vartab_create (mu_vartab_t *pvar) MU_DEPRECATED;
+int mu_vartab_destroy (mu_vartab_t *pvar) MU_DEPRECATED;
 int mu_vartab_define (mu_vartab_t var, const char *name, const char *value,
-                     int isstatic);
+                     int isstatic) MU_DEPRECATED;
 int mu_vartab_define_exp (mu_vartab_t var, const char *name,
                          mu_var_expansion_fp fun, mu_var_free_fp free,
-                         void *data);
-int mu_vartab_count (mu_vartab_t vt, size_t *pcount);
-int mu_vartab_getvar (mu_vartab_t vt, const char *name, const char **pvalue);
-int mu_vartab_expand (mu_vartab_t vt, const char *str, char **pres);
+                         void *data) MU_DEPRECATED;
+int mu_vartab_count (mu_vartab_t vt, size_t *pcount) MU_DEPRECATED;
+int mu_vartab_getvar (mu_vartab_t vt, const char *name, const char **pvalue)
+   MU_DEPRECATED;
+int mu_vartab_expand (mu_vartab_t vt, const char *str, char **pres)
+   MU_DEPRECATED;
 #endif
diff --git a/include/mailutils/version.h b/include/mailutils/version.h
index d93ff75..4efb8a2 100644
--- a/include/mailutils/version.h
+++ b/include/mailutils/version.h
@@ -18,7 +18,7 @@
 #ifndef _MAILUTILS_VERSION_H
 #define _MAILUTILS_VERSION_H
 
-#include <stdio.h>  
+#include <mailutils/types.h>  
 
 #ifdef __cplusplus
 extern "C" {
@@ -31,8 +31,9 @@ struct mu_conf_option
 };
   
 extern void mu_print_options (void);
-extern void mu_fprint_options (FILE *fp, int verbose);
-extern void mu_fprint_conf_option (FILE *fp, const struct mu_conf_option *opt,
+extern void mu_format_options (mu_stream_t, int verbose);
+extern void mu_format_conf_option (mu_stream_t,
+                                   const struct mu_conf_option *opt,
                                   int verbose);
 extern const struct mu_conf_option *mu_check_option (char *name);
 
diff --git a/libmailutils/Makefile.am b/libmailutils/Makefile.am
index 34246dc..bac6aa9 100644
--- a/libmailutils/Makefile.am
+++ b/libmailutils/Makefile.am
@@ -17,7 +17,7 @@
 # <http://www.gnu.org/licenses/>.
 
 SUBDIRS = auth base address cfg diag filter mailbox mailer mime\
- server string stream property url . tests 
+ server string stream stdstream property url . tests 
 
 lib_LTLIBRARIES = libmailutils.la
 
@@ -38,6 +38,7 @@ libmailutils_la_LIBADD = \
  server/libserver.la\
  string/libstring.la\
  stream/libstream.la\
+ stdstream/libstdstream.la\
  url/liburl.la
 
 libmailutils_la_LDFLAGS = -version-info @VI_CURRENT@:@VI_REVISION@:@VI_AGE@
diff --git a/libmailutils/base/Makefile.am b/libmailutils/base/Makefile.am
index ae9d2a9..b50781c 100644
--- a/libmailutils/base/Makefile.am
+++ b/libmailutils/base/Makefile.am
@@ -20,7 +20,6 @@ noinst_LTLIBRARIES = libbase.la
 libbase_la_SOURCES = \
  alloc.c\
  amd.c\
- argcv.c\
  argcvfree.c\
  argcvjoin.c\
  argcvrem.c\
@@ -65,7 +64,6 @@ libbase_la_SOURCES = \
  ticket.c\
  tilde.c\
  usremail.c\
- vartab.c\
  version.c\
  wicket.c
 
diff --git a/libmailutils/base/version.c b/libmailutils/base/version.c
index 2cf11ac..2373772 100644
--- a/libmailutils/base/version.c
+++ b/libmailutils/base/version.c
@@ -22,7 +22,11 @@
 #include <mailutils/nls.h>
 #include <mailutils/version.h>
 #include <mailutils/cstr.h>
+#include <mailutils/stream.h>
+#include <mailutils/stdstream.h>
+#include <mailutils/errno.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 
 #include <confpaths.h>
@@ -121,27 +125,41 @@ static struct mu_conf_option mu_conf_option[] = {
 };
 
 void
-mu_fprint_conf_option (FILE *fp, const struct mu_conf_option *opt, int verbose)
+mu_format_conf_option (mu_stream_t stream, const struct mu_conf_option *opt,
+                      int verbose)
 {
-  fprintf (fp, "%s", opt->name);
+  mu_stream_printf (stream, "%s", opt->name);
   if (verbose && opt->descr)
-    fprintf (fp, " \t- %s", _(opt->descr));
-  fputc('\n', fp);
+    mu_stream_printf (stream, " \t- %s", _(opt->descr));
+  mu_stream_printf (stream, "\n");
 }
 
 void
-mu_fprint_options (FILE *fp, int verbose)
+mu_format_options (mu_stream_t stream, int verbose)
 {
   int i;
   
   for (i = 0; mu_conf_option[i].name; i++)
-    mu_fprint_conf_option (fp, mu_conf_option + i, verbose);
+    mu_format_conf_option (stream, mu_conf_option + i, verbose);
 }
 
 void
 mu_print_options ()
 {
-  mu_fprint_options (stdout, 1);
+  if (mu_strout)
+    mu_stream_ref (mu_strout);
+  else
+    {
+      int rc = mu_stdio_stream_create (&mu_strout, MU_STDOUT_FD, 0);
+      if (rc)
+       {
+         fprintf (stderr, "mu_stdio_stream_create(%d): %s\n",
+                  MU_STDOUT_FD, mu_strerror (rc));
+         abort ();
+       }
+    }
+  mu_format_options (mu_strout, 1);
+  mu_stream_unref (mu_strout);
 }
 
 const struct mu_conf_option *
diff --git a/libmailutils/mailer/Makefile.am 
b/libmailutils/stdstream/Makefile.am
similarity index 90%
copy from libmailutils/mailer/Makefile.am
copy to libmailutils/stdstream/Makefile.am
index 1d5b242..feede72 100644
--- a/libmailutils/mailer/Makefile.am
+++ b/libmailutils/stdstream/Makefile.am
@@ -15,10 +15,10 @@
 # Public License along with this library.  If not, see
 # <http://www.gnu.org/licenses/>.
 
-noinst_LTLIBRARIES = libmailer.la
+noinst_LTLIBRARIES = libstdstream.la
 
-libmailer_la_SOURCES = \
- mailer.c\
- progmailer.c
+libstdstream_la_SOURCES = \
+ basestr.c\
+ strerr.c
 
 INCLUDES = @MU_LIB_COMMON_INCLUDES@ -I/libmailutils
diff --git a/libmailutils/stdstream/basestr.c b/libmailutils/stdstream/basestr.c
new file mode 100644
index 0000000..95ed33c
--- /dev/null
+++ b/libmailutils/stdstream/basestr.c
@@ -0,0 +1,93 @@
+/* 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, 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 GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <mailutils/types.h>
+#include <mailutils/errno.h>
+#include <mailutils/log.h>
+#include <mailutils/stream.h>
+#include <mailutils/stdstream.h>
+
+mu_stream_t mu_strin;
+mu_stream_t mu_strout;
+mu_stream_t mu_strerr;
+
+void
+mu_stdstream_setup ()
+{
+  int rc;
+  int fd;
+
+  /* Ensure that first 3 descriptors are open in proper mode */
+  fd = open ("/dev/null", O_WRONLY);
+  switch (fd)
+    {
+    case 2:
+      /* keep it open */;
+      break;
+
+    case 1:
+      /* keep it open and try 0 */
+      fd = open ("/dev/null", O_RDONLY);
+      if (fd != 0)
+       close (fd);
+      break;
+      
+    default:
+      close (fd);
+      break;
+    }
+
+  /* Create the corresponding streams */
+  rc = mu_stdio_stream_create (&mu_strin, MU_STDIN_FD, 0);
+  if (rc)
+    {
+      fprintf (stderr, "mu_stdio_stream_create(%d): %s\n",
+              MU_STDIN_FD, mu_strerror (rc));
+      abort ();
+    }
+  rc = mu_stdio_stream_create (&mu_strout, MU_STDOUT_FD, 0);
+  if (rc)
+    {
+      fprintf (stderr, "mu_stdio_stream_create(%d): %s\n",
+              MU_STDOUT_FD, mu_strerror (rc));
+      abort ();
+    }
+
+  if (mu_stdstream_strerr_create (&mu_strerr, MU_STRERR_STDERR, 0, 0,
+                                 NULL, NULL))
+    abort ();
+  /* FIXME: atexit (flushall) */
+}
+
+int
+mu_printf (const char *fmt, ...)
+{
+  int rc;
+  va_list ap;
+
+  va_start (ap, fmt);
+  rc = mu_stream_vprintf (mu_strout, fmt, ap);
+  va_end (ap);
+  return rc;
+}
diff --git a/libmailutils/stdstream/strerr.c b/libmailutils/stdstream/strerr.c
new file mode 100644
index 0000000..76dd2cb
--- /dev/null
+++ b/libmailutils/stdstream/strerr.c
@@ -0,0 +1,101 @@
+/* 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, 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 GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <syslog.h>
+#include <mailutils/types.h>
+#include <mailutils/nls.h>
+#include <mailutils/io.h>
+#include <mailutils/errno.h>
+#include <mailutils/log.h>
+#include <mailutils/stream.h>
+#include <mailutils/stdstream.h>
+#include <mailutils/filter.h>
+
+int
+mu_stdstream_strerr_create (mu_stream_t *plogger, int type, int facility,
+                           int priority, const char *tag,
+                           const char *fname MU_ARG_UNUSED)
+{
+  int rc;
+  mu_stream_t transport;
+  
+  if (!tag)
+    tag = mu_program_name;
+  switch (type)
+    {
+    case MU_STRERR_STDERR:
+      {
+       mu_stream_t str;
+       char *fltargs[3] = { "INLINE-COMMENT", };
+      
+       rc = mu_stdio_stream_create (&str, MU_STDERR_FD, 0);
+       if (rc)
+         {
+           fprintf (stderr, _("%s: cannot open error stream: %s\n"),
+                    tag, mu_strerror (rc));
+           return MU_ERR_FAILURE;
+         }
+       mu_asprintf (&fltargs[1], "%s: ", tag);
+       fltargs[2] = NULL;
+       rc = mu_filter_create_args (&transport, str,
+                                   "INLINE-COMMENT", 2, (const char**)fltargs,
+                                   MU_FILTER_ENCODE, MU_STREAM_WRITE);
+       mu_stream_unref (str);
+       free (fltargs[1]);
+       if (rc)
+         {
+           fprintf (stderr,
+                    _("%s: cannot open output filter stream: %s"),
+                    tag, mu_strerror (rc));
+           return MU_ERR_FAILURE;
+         }
+      }
+      break;
+
+    case MU_STRERR_SYSLOG:
+      openlog (tag, LOG_PID, facility);
+      rc = mu_syslog_stream_create (&transport, priority);
+      if (rc)
+       {
+         fprintf (stderr, _("%s: cannot create syslog stream: %s\n"),
+                  tag, mu_strerror (rc));
+         return MU_ERR_FAILURE;
+       }
+      break;
+
+    default:
+      fprintf (stderr, _("%s: cannot create error stream: %s\n"),
+              tag, mu_strerror (EINVAL));
+      return EINVAL;
+    }
+
+  rc = mu_log_stream_create (plogger, transport);
+  mu_stream_unref (transport);
+  if (rc)
+    {
+      fprintf (stderr, _("%s: cannot open logger stream: %s\n"),
+              tag , mu_strerror (rc));
+      return MU_ERR_FAILURE;
+    }
+  return 0;
+}
+      
diff --git a/libmailutils/stream/Makefile.am b/libmailutils/stream/Makefile.am
index 82fa573..507050d 100644
--- a/libmailutils/stream/Makefile.am
+++ b/libmailutils/stream/Makefile.am
@@ -22,6 +22,7 @@ libstream_la_SOURCES = \
  file_stream.c\
  fltstream.c\
  iostream.c\
+ logstream.c\
  mapfile_stream.c\
  memory_stream.c\
  message_stream.c\
@@ -35,6 +36,7 @@ libstream_la_SOURCES = \
  stream_vprintf.c\
  streamcpy.c\
  streamref.c\
+ syslogstream.c\
  tcp.c\
  temp_file_stream.c\
  xscript-stream.c
diff --git a/libmailutils/stream/dbgstream.c b/libmailutils/stream/dbgstream.c
index b784813..b1d0569 100644
--- a/libmailutils/stream/dbgstream.c
+++ b/libmailutils/stream/dbgstream.c
@@ -63,8 +63,8 @@ _dbg_done (struct _mu_stream *str)
 }
 
 int
-mu_dbgstream_create(mu_stream_t *pref, mu_debug_t debug, mu_log_level_t level,
-                   int flags)
+mu_dbgstream_create (mu_stream_t *pref, mu_debug_t debug, mu_log_level_t level,
+                    int flags)
 {
   int rc;
   mu_stream_t stream;
diff --git a/libmailutils/stream/logstream.c b/libmailutils/stream/logstream.c
new file mode 100644
index 0000000..ece636e
--- /dev/null
+++ b/libmailutils/stream/logstream.c
@@ -0,0 +1,364 @@
+/* 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, 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 GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include <mailutils/types.h>
+#include <mailutils/errno.h>
+#include <mailutils/cctype.h>
+#include <mailutils/log.h>
+
+#include <mailutils/nls.h>
+#include <mailutils/stream.h>
+#include <mailutils/sys/logstream.h>
+
+char *_mu_severity_str[] = {
+  N_("DEBUG"),
+  N_("INFO"),
+  N_("NOTICE"),
+  N_("WARNING"),
+  N_("ERROR"),
+  N_("CRIT"),
+  N_("ALERT"),
+  N_("EMERG"),
+};
+int _mu_severity_num = MU_ARRAY_SIZE (_mu_severity_str);
+
+static int
+_locus_set_file (struct mu_locus *loc, const char *file, size_t len)
+{
+  free (loc->mu_file);
+  if (file)
+    {
+      loc->mu_file = malloc (len + 1);
+      if (!loc->mu_file)
+       return ENOMEM;
+      memcpy (loc->mu_file, file, len);
+      loc->mu_file[len] = 0;
+    }
+  else
+    loc->mu_file = NULL;
+  return 0;
+}
+
+#define _locus_set_line(loc, line) ((loc)->mu_line = line)
+#define _locus_set_col(loc, col) ((loc)->mu_col = col)
+
+static int
+_log_write (struct _mu_stream *str, const char *buf, size_t size,
+           size_t *pnwrite)
+{
+  struct _mu_log_stream *sp = (struct _mu_log_stream *)str;
+  unsigned severity = sp->severity;
+  int logmode = sp->logmode;
+  struct mu_locus loc = sp->locus;
+  const char *fname = NULL;
+  unsigned flen = 0;
+  int save_locus = 0;
+  int rc;
+  
+#define NEXT do { buf++; size--; if (size == 0) return EINVAL; } while (0)
+#define READNUM(n) do {                                \
+    unsigned __x = 0;                          \
+    if (*buf != '<')                           \
+      return EINVAL;                           \
+    NEXT;                                      \
+    while (*buf != '>')                                \
+      {                                                \
+        if (!mu_isdigit (*buf))                        \
+         return EINVAL;                        \
+       __x = __x * 10 + (*buf - '0');          \
+       NEXT;                                   \
+      }                                                \
+    NEXT;                                      \
+    n = __x;                                   \
+} while (0)
+
+  /* Tell them we've consumed everything */
+  *pnwrite = size;
+  
+  /* Process escapes */
+  while (*buf == '\033')
+    {
+      int code;
+      unsigned n;
+      
+      NEXT;
+      code = *buf;
+      NEXT;
+      switch (code)
+       {
+       case 'S':
+         /* Save locus */
+         save_locus = 1;
+         break;
+
+       case 's':
+         /* Severity code in decimal (single digit) */
+         if (!mu_isdigit (*buf))
+           return EINVAL;
+         severity = *buf - '0';
+         NEXT;
+         break;
+         
+       case 'O':
+         /* Flags on.  Followed by a bitmask of MU_LOGMODE_*, in decimal  */
+         READNUM (n);
+         logmode |= n;
+         break;
+         
+       case 'X':
+         /* Flags off.  Followed by a bitmask of MU_LOGMODE_*, in decimal  */
+         READNUM (n);
+         logmode &= ~n;
+         break;
+         
+       case 'l':
+         /* Input line (decimal) */
+         READNUM (n);
+         _locus_set_line (&loc, n);
+         break;
+
+       case 'c':
+         /* Column in input line (decimal) */
+         READNUM (n);
+         _locus_set_col (&loc, n);
+         break;
+         
+       case 'f':
+         /* File name. Format: <N>S */
+         READNUM (flen);
+         fname = buf;
+         buf += flen;
+         size -= flen;
+         break;
+
+       default:
+         return EINVAL;
+       }
+    }
+
+  if (severity >= _mu_severity_num)
+    severity = MU_LOG_EMERG;
+
+  if (logmode & MU_LOGMODE_LOCUS)
+    {
+      if (fname)
+       _locus_set_file (&loc, fname, flen);
+
+      if (loc.mu_file)
+       {
+         mu_stream_write (sp->transport, loc.mu_file,
+                          strlen (loc.mu_file), NULL);
+         mu_stream_write (sp->transport, ":", 1, NULL);
+         if (loc.mu_line)
+           mu_stream_printf (sp->transport, "%u", loc.mu_line);
+         mu_stream_write (sp->transport, ":", 1, NULL);
+         if (loc.mu_col)
+           mu_stream_printf (sp->transport, "%u:", loc.mu_col);
+         mu_stream_write (sp->transport, " ", 1, NULL);
+       }
+    }
+
+  if (save_locus)
+    {
+      _locus_set_file (&sp->locus, loc.mu_file, strlen (loc.mu_file));
+      _locus_set_line (&sp->locus, loc.mu_line);
+      _locus_set_col (&sp->locus, loc.mu_col);
+    }
+  
+  if (fname)
+    free (loc.mu_file);
+  
+  if (logmode & MU_LOGMODE_SEVERITY)
+    {
+      char *s = gettext (_mu_severity_str[severity]);
+      rc = mu_stream_write (sp->transport, s, strlen (s), NULL);
+      if (rc)
+       return rc;
+      mu_stream_write (sp->transport, ": ", 2, NULL);
+    }
+  return mu_stream_write (sp->transport, buf, size, NULL);
+}
+
+static int
+_log_flush (struct _mu_stream *str)
+{
+  struct _mu_log_stream *sp = (struct _mu_log_stream *)str;
+  return mu_stream_flush (sp->transport);
+}
+
+static void
+_log_done (struct _mu_stream *str)
+{
+  struct _mu_log_stream *sp = (struct _mu_log_stream *)str;
+  if (str->flags & MU_STREAM_AUTOCLOSE)
+    mu_stream_destroy (&sp->transport);
+}
+
+static int
+_log_close (struct _mu_stream *str)
+{
+  struct _mu_log_stream *sp = (struct _mu_log_stream *)str;
+  if (str->flags & MU_STREAM_AUTOCLOSE)
+    return mu_stream_close (sp->transport);
+  return 0;
+}
+
+static int
+_log_setbuf_hook (mu_stream_t str, enum mu_buffer_type type, size_t size)
+{
+  if (type != mu_buffer_line)
+    return EACCES;
+  return 0;
+}
+
+static int
+_log_ctl (struct _mu_stream *str, int op, void *arg)
+{
+  struct _mu_log_stream *sp = (struct _mu_log_stream *)str;
+  mu_transport_t *ptrans;
+  
+  switch (op)
+    {
+    case MU_IOCTL_GET_TRANSPORT:
+      if (!arg)
+       return EINVAL;
+      ptrans = arg;
+      ptrans[0] = (mu_transport_t) sp->transport;
+      ptrans[1] = NULL;
+      break;
+
+    case MU_IOCTL_SET_TRANSPORT:
+      if (!arg)
+       return EINVAL;
+      ptrans = arg;
+      if (ptrans[0])
+       sp->transport = (mu_stream_t) ptrans[0];
+      break;
+
+    case MU_IOCTL_LOGSTREAM_GET_SEVERITY:
+      if (!arg)
+       return EINVAL;
+      *(unsigned*)arg = sp->severity;
+      break;
+      
+    case MU_IOCTL_LOGSTREAM_SET_SEVERITY:
+      if (!arg)
+       return EINVAL;
+      if (*(unsigned*)arg >= _mu_severity_num)
+       return EINVAL;
+      sp->severity = *(unsigned*)arg;
+      break;
+
+    case MU_IOCTL_LOGSTREAM_GET_MODE:
+      if (!arg)
+       return EINVAL;
+      *(int*)arg = sp->logmode;
+      break;
+
+    case MU_IOCTL_LOGSTREAM_SET_MODE:
+      if (!arg)
+       return EINVAL;
+      sp->logmode = *(int*)arg;
+      break;
+      
+    case MU_IOCTL_LOGSTREAM_GET_LOCUS:
+      {
+       struct mu_locus *ploc = arg;
+       if (!arg)
+         return EINVAL;
+       if (sp->locus.mu_file)
+         {
+           ploc->mu_file = strdup (sp->locus.mu_file);
+           if (!ploc->mu_file)
+             return ENOMEM;
+         }
+       else
+         ploc->mu_file = NULL;
+       ploc->mu_line = sp->locus.mu_line;
+       ploc->mu_col = sp->locus.mu_col;
+       break;
+      }
+       
+    case MU_IOCTL_LOGSTREAM_SET_LOCUS:
+      {
+       struct mu_locus *ploc = arg;
+       if (!arg)
+         {
+           free (sp->locus.mu_file);
+           sp->locus.mu_file = NULL;
+           sp->locus.mu_line = 0;
+           sp->locus.mu_col = 0;
+         }
+       else
+         {
+           if (ploc->mu_file)
+             _locus_set_file (&sp->locus, ploc->mu_file,
+                              strlen (ploc->mu_file));
+           if (ploc->mu_line)
+             _locus_set_line (&sp->locus, ploc->mu_line);
+           if (ploc->mu_col)
+             _locus_set_col (&sp->locus, ploc->mu_col);
+         }
+       break;
+      }
+      
+    default:
+      return ENOSYS;
+    }
+  return 0;
+}
+
+int
+mu_log_stream_create (mu_stream_t *pstr, mu_stream_t transport)
+{
+  struct _mu_log_stream *sp;
+  mu_stream_t stream;
+  int rc;
+  
+  sp = (struct _mu_log_stream *)
+    _mu_stream_create (sizeof (*sp), MU_STREAM_WRITE);
+  if (!sp)
+    return ENOMEM;
+  sp->base.write = _log_write;
+  sp->base.flush = _log_flush;
+  sp->base.close = _log_close;
+  sp->base.done = _log_done;
+  sp->base.setbuf_hook = _log_setbuf_hook;
+  sp->base.ctl = _log_ctl;
+  sp->transport = transport;
+  mu_stream_ref (transport);
+  sp->severity = MU_LOG_ERROR;
+  sp->logmode = 0;
+  
+  stream = (mu_stream_t) sp;
+  mu_stream_set_buffer (stream, mu_buffer_line, 0);
+  rc = mu_stream_open (stream);
+  if (rc)
+    mu_stream_destroy (&stream);
+  else
+    *pstr = stream;
+
+  return rc;
+}
+
+
diff --git a/libmailutils/stream/stream.c b/libmailutils/stream/stream.c
index 546c1ce..4cd5041 100644
--- a/libmailutils/stream/stream.c
+++ b/libmailutils/stream/stream.c
@@ -554,6 +554,13 @@ mu_stream_set_buffer (mu_stream_t stream, enum 
mu_buffer_type type,
   if (size == 0)
     size = mu_stream_default_buffer_size;
 
+  if (stream->setbuf_hook)
+    {
+      int rc = stream->setbuf_hook (stream, type, size);
+      if (rc)
+       return rc;
+    }
+  
   if (stream->buffer)
     {
       mu_stream_flush (stream);
diff --git a/libmailutils/stream/syslogstream.c 
b/libmailutils/stream/syslogstream.c
new file mode 100644
index 0000000..c81815f
--- /dev/null
+++ b/libmailutils/stream/syslogstream.c
@@ -0,0 +1,90 @@
+/* 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, 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 GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <syslog.h>
+#include <errno.h>
+#include <string.h>
+#include <mailutils/stream.h>
+#include <mailutils/sys/syslogstream.h>
+
+static int
+_syslog_stream_write (struct _mu_stream *stream, const char *buf,
+                     size_t size, size_t *pret)
+{
+  struct _mu_syslog_stream *lsp = (struct _mu_syslog_stream *)stream;
+
+  *pret = size;
+  if (size > 0 && buf[size-1] == '\n')
+    size--;
+  if (size == 0)
+    return 0;
+  syslog (lsp->prio, "%*.*s", (int) size, (int) size, buf);
+  return 0;
+}
+
+static int
+_syslog_ctl (struct _mu_stream *str, int op, void *arg)
+{
+  struct _mu_syslog_stream *sp = (struct _mu_syslog_stream *)str;
+
+  switch (op)
+    {
+    case MU_IOCTL_LOGSTREAM_GET_SEVERITY:
+      if (!arg)
+       return EINVAL;
+      *(int*)arg = sp->prio;
+      break;
+      
+    case MU_IOCTL_LOGSTREAM_SET_SEVERITY:
+      if (!arg)
+       return EINVAL;
+      sp->prio = *(int*)arg;
+      break;
+
+    default:
+      return ENOSYS;
+    }
+  return 0;
+}
+
+int
+_syslog_setbuf_hook (mu_stream_t str, enum mu_buffer_type type, size_t size)
+{
+  if (type != mu_buffer_line)
+    return EACCES;
+  return 0;
+}
+
+int
+mu_syslog_stream_create (mu_stream_t *pstream, int prio)
+{
+  struct _mu_syslog_stream *str =
+    (struct _mu_syslog_stream *) _mu_stream_create (sizeof (*str),
+                                                   MU_STREAM_WRITE);
+  if (!str)
+    return ENOMEM;
+  str->prio = prio;
+  str->base.write = _syslog_stream_write;
+  str->base.ctl = _syslog_ctl;
+  str->base.setbuf_hook = _syslog_setbuf_hook;
+  *pstream = (mu_stream_t) str;
+  mu_stream_set_buffer (*pstream, mu_buffer_line, 0);
+  return 0;
+}
diff --git a/libmailutils/tests/Makefile.am b/libmailutils/tests/Makefile.am
index cfcea39..b7960bf 100644
--- a/libmailutils/tests/Makefile.am
+++ b/libmailutils/tests/Makefile.am
@@ -41,7 +41,6 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac
 INCLUDES = @MU_LIB_COMMON_INCLUDES@ 
 noinst_PROGRAMS = \
  addr\
- argcv\
  decode2047\
  encode2047\
  fltst\
@@ -63,7 +62,6 @@ EXTRA_DIST += Encode Decode Wicketfile
 
 TESTSUITE_AT = \
  address.at\
- argcv.at\
  base64d.at\
  base64e.at\
  decode2047.at\
diff --git a/libmailutils/tests/testsuite.at b/libmailutils/tests/testsuite.at
index 722e839..fa31189 100644
--- a/libmailutils/tests/testsuite.at
+++ b/libmailutils/tests/testsuite.at
@@ -55,7 +55,6 @@ AT_INIT
 
 m4_include([list.at])
 m4_include([address.at])
-m4_include([argcv.at])
 m4_include([wordsplit.at])
 m4_include([url.at])
 m4_include([mailcap.at])
diff --git a/testsuite/testsuite.at b/libmu_compat/Makefile.am
similarity index 78%
copy from testsuite/testsuite.at
copy to libmu_compat/Makefile.am
index 63553e7..c555908 100644
--- a/testsuite/testsuite.at
+++ b/libmu_compat/Makefile.am
@@ -1,4 +1,4 @@
-# This file is part of GNU Mailutils. -*- Autotest -*-
+# This file is part of GNU Mailutils
 # Copyright (C) 2010 Free Software Foundation, Inc.
 #
 # GNU Mailutils is free software; you can redistribute it and/or
@@ -14,10 +14,12 @@
 # You should have received a copy of the GNU General Public License
 # along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>.
 
-m4_include([testsuite.inc])
+SUBDIRS = . tests
+lib_LTLIBRARIES = libmu_compat.la
 
-AT_INIT
+libmu_compat_la_SOURCES = \
+ argcv.c\
+ vartab.c
+
+INCLUDES = @MU_LIB_COMMON_INCLUDES@ -I/libmailutils
 
-m4_include([mime.at])
-m4_include([mbdel.at])
-m4_include([ufms.at])
diff --git a/libmailutils/base/argcv.c b/libmu_compat/argcv.c
similarity index 100%
rename from libmailutils/base/argcv.c
rename to libmu_compat/argcv.c
diff --git a/maidag/tests/.gitignore b/libmu_compat/tests/.gitignore
similarity index 91%
copy from maidag/tests/.gitignore
copy to libmu_compat/tests/.gitignore
index 93f8f46..81721a6 100644
--- a/maidag/tests/.gitignore
+++ b/libmu_compat/tests/.gitignore
@@ -4,3 +4,4 @@ package.m4
 testsuite
 testsuite.dir
 testsuite.log
+argcv
diff --git a/frm/tests/Makefile.am b/libmu_compat/tests/Makefile.am
similarity index 87%
copy from frm/tests/Makefile.am
copy to libmu_compat/tests/Makefile.am
index d587c2f..14bb70c 100644
--- a/frm/tests/Makefile.am
+++ b/libmu_compat/tests/Makefile.am
@@ -1,5 +1,5 @@
 # This file is part of GNU Mailutils.
-# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2010 Free Software Foundation, Inc.
 #
 # GNU Mailutils is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
@@ -34,11 +34,22 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac
 
 #
 
+## -------------------------- ##
+## Non-installable programs
+## -------------------------- ##
+
+INCLUDES = @MU_LIB_COMMON_INCLUDES@ 
+noinst_PROGRAMS = argcv
+
+LDADD = ../libmu_compat.la ${MU_LIB_MAILUTILS}
+
 ## ------------ ##
 ## Test suite.  ##
 ## ------------ ##
 
-TESTSUITE_AT = testsuite.at
+TESTSUITE_AT = \
+ argcv.at\
+ testsuite.at
 
 TESTSUITE = $(srcdir)/testsuite
 M4=m4
diff --git a/libmailutils/tests/argcv.at b/libmu_compat/tests/argcv.at
similarity index 92%
rename from libmailutils/tests/argcv.at
rename to libmu_compat/tests/argcv.at
index 857f500..6877cd5 100644
--- a/libmailutils/tests/argcv.at
+++ b/libmu_compat/tests/argcv.at
@@ -22,10 +22,14 @@ m4_pushdef([TESTARGS],[
 m4_pushdef([MU_TEST_GROUP],[Argcv])
 m4_pushdef([MU_TEST_KEYWORDS],[argcv])
 m4_pushdef([MU_TEST_COMMAND],[argcv])
-MU_GENERIC_TEST([$1],[$2],[$3],[],[$4],[$5])
-m4_popdef([MU_TEST_COMMAND])
-m4_popdef([MU_TEST_KEYWORDS])
-m4_popdef([MU_TEST_GROUP])
+
+AT_SETUP([Argcv: m4_if([$1],[],mu_firstline([$3]),[$1])])
+AT_KEYWORDS([argcv $2])
+AT_CHECK([
+AT_DATA([input],[$3
+])
+argcv < input],[0],[$4],[$5],[$6],[$7])
+AT_CLEANUP
 ])
 
 dnl ------------------------------------------------------------
diff --git a/libmailutils/tests/argcv.c b/libmu_compat/tests/argcv.c
similarity index 100%
rename from libmailutils/tests/argcv.c
rename to libmu_compat/tests/argcv.c
diff --git a/libmailutils/tests/atlocal.in b/libmu_compat/tests/atlocal.in
similarity index 100%
copy from libmailutils/tests/atlocal.in
copy to libmu_compat/tests/atlocal.in
diff --git a/sieve/tests/version.at b/libmu_compat/tests/testsuite.at
similarity index 92%
copy from sieve/tests/version.at
copy to libmu_compat/tests/testsuite.at
index f03eda4..0721f84 100644
--- a/sieve/tests/version.at
+++ b/libmu_compat/tests/testsuite.at
@@ -14,6 +14,6 @@
 # You should have received a copy of the GNU General Public License
 # along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>.
 
-dnl m4_include([testsuite.inc])
-
-MUT_VERSION(sieve)
+m4_include([testsuite.inc])
+AT_INIT
+m4_include([argcv.at])
diff --git a/libmailutils/base/vartab.c b/libmu_compat/vartab.c
similarity index 99%
rename from libmailutils/base/vartab.c
rename to libmu_compat/vartab.c
index 566a507..3e487dd 100644
--- a/libmailutils/base/vartab.c
+++ b/libmu_compat/vartab.c
@@ -24,6 +24,7 @@
 #include <mailutils/stream.h>
 #include <mailutils/errno.h>
 #include <mailutils/iterator.h>
+#define MU_SUPPRESS_DEPRECATION
 #include <mailutils/vartab.h>
 
 struct _mu_vartab
diff --git a/mu/Makefile.am b/mu/Makefile.am
index a4eb398..4cd89c7 100644
--- a/mu/Makefile.am
+++ b/mu/Makefile.am
@@ -41,6 +41,7 @@ MODULES = \
  help.c\
  info.c\
  ldflags.c\
+ logger.c\
  $(POP_C)\
  query.c\
  wicket.c
@@ -79,7 +80,7 @@ AM_CPPFLAGS = \
   -DI18NLIBS="\"$(LIBINTL)\""
 
 BUILT_SOURCES=mu-setup.c mu-setup.h
-EXTRA_DIST=mu-setup.c mu-setup.h
+EXTRA_DIST=mu-setup.c mu-setup.h template.c
 
 mu-setup.h: Makefile.am $(MODULES) $(IDLE_MODULES) 
        $(AM_V_GEN)$(AWK) -f $(top_srcdir)/mu/mu-setup.awk -v mode=h \
diff --git a/mu/acl.c b/mu/acl.c
index 9d86460..3b7f88b 100644
--- a/mu/acl.c
+++ b/mu/acl.c
@@ -163,7 +163,7 @@ mutool_acl (int argc, char **argv)
       const char *ap = *argv++;
 
       target_sa = parse_address (&target_salen, ap);
-      printf ("Testing %s:\n", ap);
+      mu_printf ("Testing %s:\n", ap);
       rc = mu_acl_check_sockaddr (acl, target_sa, target_salen, &result);
       if (rc)
        {
@@ -174,15 +174,15 @@ mutool_acl (int argc, char **argv)
       switch (result)
        {
        case mu_acl_result_undefined:
-         printf ("%s: undefined\n", ap);
+         mu_printf ("%s: undefined\n", ap);
          break;
       
        case mu_acl_result_accept:
-         printf ("%s: accept\n", ap);
+         mu_printf ("%s: accept\n", ap);
          break;
 
        case mu_acl_result_deny:
-         printf ("%s: deny\n", ap);
+         mu_printf ("%s: deny\n", ap);
          break;
        }
     }
diff --git a/mu/cflags.c b/mu/cflags.c
index ea510da..5c782f9 100644
--- a/mu/cflags.c
+++ b/mu/cflags.c
@@ -40,7 +40,7 @@ mutool_cflags (int argc, char **argv)
 {
   if (argp_parse (&cflags_argp, argc, argv, ARGP_IN_ORDER, NULL, NULL))
     return 1;
-  printf ("%s\n", COMPILE_FLAGS);
+  mu_printf ("%s\n", COMPILE_FLAGS);
   return 0;
 }
 
diff --git a/mu/filter.c b/mu/filter.c
index b050403..c455b6d 100644
--- a/mu/filter.c
+++ b/mu/filter.c
@@ -130,7 +130,7 @@ int
 mutool_filter (int argc, char **argv)
 {
   int rc, index;
-  mu_stream_t in, out, flt;
+  mu_stream_t flt;
   const char *fltname;
   
   if (argp_parse (&filter_argp, argc, argv, ARGP_IN_ORDER, &index, NULL))
@@ -156,25 +156,12 @@ mutool_filter (int argc, char **argv)
     }
 
   fltname = argv[0];
-  
-  rc = mu_stdio_stream_create (&in, MU_STDIN_FD, 0);
-  if (rc)
-    {
-      mu_error (_("cannot open input stream: %s"), mu_strerror (rc));
-      return 1;
-    }
-  
-  rc = mu_stdio_stream_create (&out, MU_STDOUT_FD, 0);
-  if (rc)
-    {
-      mu_error (_("cannot open output stream: %s"), mu_strerror (rc));
-      return 1;
-    }
 
   if (line_length_option)
     reset_line_length (fltname, line_length);
 
-  rc = mu_filter_create_args (&flt, in, fltname, argc, (const char **)argv,
+  rc = mu_filter_create_args (&flt, mu_strin, fltname,
+                             argc, (const char **)argv,
                              filter_mode, MU_STREAM_READ);
   if (rc)
     {
@@ -182,7 +169,7 @@ mutool_filter (int argc, char **argv)
       return 1;
     }
 
-  rc = mu_stream_copy (out, flt, 0, NULL);
+  rc = mu_stream_copy (mu_strout, flt, 0, NULL);
 
   if (rc)
     {
@@ -191,9 +178,10 @@ mutool_filter (int argc, char **argv)
     }
 
   if (newline_option)
-    mu_stream_write (out, "\n", 1, NULL);
+    mu_stream_write (mu_strout, "\n", 1, NULL);
 
-  mu_stream_flush (out);
+  mu_stream_destroy (&flt);
+  mu_stream_flush (mu_strout);
   
   return 0;
 }
diff --git a/mu/flt2047.c b/mu/flt2047.c
index ecd7e27..5d28912 100644
--- a/mu/flt2047.c
+++ b/mu/flt2047.c
@@ -88,7 +88,6 @@ int
 mutool_flt2047 (int argc, char **argv)
 {
   int rc, index;
-  mu_stream_t in, out;
   char *p;
   
   if (argp_parse (&flt2047_argp, argc, argv, ARGP_IN_ORDER, &index, NULL))
@@ -97,20 +96,6 @@ mutool_flt2047 (int argc, char **argv)
   argc -= index;
   argv += index;
 
-  rc = mu_stdio_stream_create (&in, MU_STDIN_FD, 0);
-  if (rc)
-    {
-      mu_error (_("cannot open input stream: %s"), mu_strerror (rc));
-      return 1;
-    }
-  
-  rc = mu_stdio_stream_create (&out, MU_STDOUT_FD, 0);
-  if (rc)
-    {
-      mu_error (_("cannot open output stream: %s"), mu_strerror (rc));
-      return 1;
-    }
-      
   if (argc)
     {
       char *p;
@@ -127,7 +112,7 @@ mutool_flt2047 (int argc, char **argv)
              mu_error ("%s", mu_strerror (rc));
              return 1;
            }
-         mu_stream_printf (out, "%s\n", p);
+         mu_printf ("%s\n", p);
        }
     }
   else
@@ -135,7 +120,8 @@ mutool_flt2047 (int argc, char **argv)
       size_t size = 0, n;
       char *buf = NULL;
 
-      while ((rc = mu_stream_getline (in, &buf, &size, &n)) == 0 && n > 0)
+      while ((rc = mu_stream_getline (mu_strin, &buf, &size, &n)) == 0
+            && n > 0)
        {
          mu_rtrim_class (buf, MU_CTYPE_SPACE);
          if (decode_mode)
@@ -147,10 +133,10 @@ mutool_flt2047 (int argc, char **argv)
              mu_error ("%s", mu_strerror (rc));
              return 1;
            }
-         mu_stream_printf (out, "%s\n", p);
+         mu_printf ("%s\n", p);
        }
     }
-  mu_stream_flush (out);
+  mu_stream_flush (mu_strout);
   
   return 0;
 }
diff --git a/mu/imap.c b/mu/imap.c
index 764547e..55e44c2 100644
--- a/mu/imap.c
+++ b/mu/imap.c
@@ -284,12 +284,11 @@ com_logout (int argc MU_ARG_UNUSED, char **argv 
MU_ARG_UNUSED)
        }
       else
        {
-         mu_stream_printf (mustrout, "Try 'exit' to leave %s\n",
-                           mu_program_name);
+         mu_printf ("Try 'exit' to leave %s\n", mu_program_name);
        }
     }
   else
-    mu_stream_printf (mustrout, "Try 'exit' to leave %s\n", mu_program_name);
+    mu_printf ("Try 'exit' to leave %s\n", mu_program_name);
   return status;
 }
 
@@ -325,13 +324,13 @@ com_capability (int argc, char **argv)
            {
            case 0:
              if (*elt)
-               mu_stream_printf (mustrout, "%s: %s\n", argv[i], elt);
+               mu_printf ("%s: %s\n", argv[i], elt);
              else
-               mu_stream_printf (mustrout, "%s is set\n", argv[i]);
+               mu_printf ("%s is set\n", argv[i]);
              break;
 
            case MU_ERR_NOENT:
-             mu_stream_printf (mustrout, "%s is not set\n", argv[i]);
+             mu_printf ("%s is not set\n", argv[i]);
              break;
 
            default:
@@ -350,7 +349,7 @@ com_capability (int argc, char **argv)
            {
              char *capa = NULL;
              mu_iterator_current (iterator, (void **) &capa);
-             mu_stream_printf (mustrout, "CAPA: %s\n", capa ? capa : "");
+             mu_printf ("CAPA: %s\n", capa ? capa : "");
            }
          mu_iterator_destroy (&iterator);
        }
@@ -371,7 +370,7 @@ com_login (int argc, char **argv)
          mu_error (_("login: password required"));
          return 1;
        }
-      status = mu_getpass (mustrin, mustrout, "Password:", &passbuf);
+      status = mu_getpass (mu_strin, mu_strout, "Password:", &passbuf);
       if (status)
        return status;
       pwd = passbuf;
@@ -400,7 +399,7 @@ static int
 _print_id (void *item, void *data)
 {
   const char *id = item;
-  mu_stream_printf (mustrout, "ID: %s %s\n", id, id + strlen (id) + 1);
+  mu_printf ("ID: %s %s\n", id, id + strlen (id) + 1);
   return 0;
 }
 
@@ -435,12 +434,11 @@ com_id (int argc, char **argv)
          switch (rc)
            {
            case 0:
-             mu_stream_printf (mustrout, "%s: %s\n", test,
-                               res + strlen (res) + 1);
+             mu_printf ("%s: %s\n", test, res + strlen (res) + 1);
              break;
              
            case MU_ERR_NOENT:
-             mu_stream_printf (mustrout, "%s is not set\n", test);
+             mu_printf ("%s is not set\n", test);
              break;
 
            default:
diff --git a/mu/info.c b/mu/info.c
index 48f903c..0b9888d 100644
--- a/mu/info.c
+++ b/mu/info.c
@@ -74,7 +74,7 @@ mutool_info (int argc, char **argv)
   argv += index;
 
   if (argc == 0)
-    mu_fprint_options (stdout, verbose);
+    mu_format_options (mu_strout, verbose);
   else
     {
       int i, found = 0;
@@ -85,7 +85,7 @@ mutool_info (int argc, char **argv)
          if (opt)
            {
              found++;
-             mu_fprint_conf_option (stdout, opt, verbose);
+             mu_format_conf_option (mu_strout, opt, verbose);
            }
        }
       return found == argc ? 0 : 1;
diff --git a/mu/ldflags.c b/mu/ldflags.c
index f93536c..835fff2 100644
--- a/mu/ldflags.c
+++ b/mu/ldflags.c
@@ -57,6 +57,7 @@ struct lib_descr {
   { "nntp",   "mu_nntp", 0 },
   { "mailer", "mu_mailer", 0 },
   { "sieve",  "mu_sieve", NOTALL },
+  { "compat", "mu_compat" },
   { NULL }
 };
 
@@ -183,12 +184,12 @@ mutool_ldflags (int argc, char **argv)
   sort_entries ();
          
   /* At least one entry is always present */
-  printf ("%s", lib_entry[0].ptr);
+  mu_printf ("%s", lib_entry[0].ptr);
 
   /* Print the rest of them separated by a space */
   for (j = 1; j < nentry; j++)
-    printf (" %s", lib_entry[j].ptr);
-  putchar ('\n');
+    mu_printf (" %s", lib_entry[j].ptr);
+  mu_printf ("\n");
   return 0;
 }
 
diff --git a/mu/logger.c b/mu/logger.c
new file mode 100644
index 0000000..f383723
--- /dev/null
+++ b/mu/logger.c
@@ -0,0 +1,218 @@
+/* GNU Mailutils -- a suite of utilities for electronic mail
+   Copyright (C) 2010 Free Software Foundation, Inc.
+
+   GNU Mailutils is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GNU Mailutils 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */
+
+#if defined(HAVE_CONFIG_H)
+# include <config.h>
+#endif
+#include <mailutils/mailutils.h>
+#include "argp.h"
+#include "mu.h"
+
+static char logger_doc[] = N_("mu logger - log data using Mailutils log 
facility");
+char logger_docstring[] = N_("log data using Mailutils log facility");
+static char logger_args_doc[] = N_("[TEXT]");
+
+#define OPT_SYSLOG 256
+#define OPT_STDERR 257
+
+static struct argp_option logger_options[] = {
+  { "file", 'f', N_("FILE"), 0, N_("read message from FILE") },
+  { "priority", 'p', N_("[FACILITY.LEVEL]"), 0,
+    N_("log at the specified syslog priority (implies --syslog)") },
+  { "syslog", OPT_SYSLOG, NULL, 0, N_("log via syslog") },
+  { "stderr", OPT_STDERR, NULL, 0, N_("log to the standard error") },
+  { "severity", 's', N_("SEV"), 0,
+    N_("log at Mailutils severity level SEV") },
+  { "locus", 'l', N_("FILE:LINE[:COL]"), 0,
+    N_("set locus for logging") },
+  { "tag", 't', N_("syslog tag"), 0,
+    N_("set syslog tag") },
+  { NULL }
+};
+
+static char *input_file = NULL;
+static int logger_type = MU_STRERR_STDERR;
+static int log_severity = MU_LOG_ERROR;
+static struct mu_locus locus;
+static int syslog_facility = LOG_USER;
+static int syslog_priority = LOG_ERR;
+static char *syslog_tag = NULL;
+
+static error_t
+logger_parse_opt (int key, char *arg, struct argp_state *state)
+{
+  switch (key)
+    {
+    case 'f':
+      input_file = arg;
+      break;
+
+    case OPT_SYSLOG:
+      logger_type = MU_STRERR_SYSLOG;
+      break;
+
+    case OPT_STDERR:
+      logger_type = MU_STRERR_STDERR;
+      break;
+
+    case 's':
+      {
+       int i;
+
+       for (i = 0; i < _mu_severity_num; i++)
+         if (mu_c_strcasecmp (_mu_severity_str[i], arg) == 0)
+           {
+             log_severity = i;
+             return 0;
+           }
+       argp_error (state, _("unknown severity: %s"), arg);
+       break;
+      }
+
+    case 't':
+      syslog_tag = arg;
+      break;
+      
+    case 'p':
+      {
+       char *s = strchr (arg, '.');
+       if (s)
+         *s++ = 0;
+       if (mu_string_to_syslog_facility (arg, &syslog_facility))
+         argp_error (state, _("unknown facility: %s"), arg);
+       if (s &&
+           mu_string_to_syslog_priority (s, &syslog_priority))
+         argp_error (state, _("unknown priority: %s"), s);
+       logger_type = MU_STRERR_SYSLOG;
+       break;
+      }
+      
+    case 'l':
+      {
+       char *s;
+       
+       locus.mu_file = arg;
+       s = strchr (arg, ':');
+       if (s)
+         {
+           *s++ = 0;
+           locus.mu_line = strtoul (s, &s, 10);
+           if (*s == ':')
+             {
+               locus.mu_col = strtoul (s + 1, &s, 10);
+               if (*s)
+                 argp_error (state, _("bad column number: %s"), arg);
+             }
+           else if (*s)
+             argp_error (state, _("bad line number: %s"), arg);
+         }
+       break;
+      }
+      
+    default:
+      return ARGP_ERR_UNKNOWN;
+    }
+  return 0;
+}
+
+static struct argp logger_argp = {
+  logger_options,
+  logger_parse_opt,
+  logger_args_doc,
+  logger_doc,
+  NULL,
+  NULL,
+  NULL
+};
+
+int
+mutool_logger (int argc, char **argv)
+{
+  int index;
+  mu_stream_t logger, input;
+  int rc, mode;
+  
+  if (argp_parse (&logger_argp, argc, argv, ARGP_IN_ORDER, &index, NULL))
+    return 1;
+  argc -= index;
+  argv += index;
+
+  if (argc && input_file)
+    {
+      mu_error (_("both input file and message text given"));
+      exit (1);
+    }
+
+  if (!syslog_tag)
+    syslog_tag = "mu-logger";
+  if (mu_stdstream_strerr_create (&logger, logger_type,
+                                 syslog_facility, syslog_priority,
+                                 syslog_tag, NULL))
+    {
+      mu_error (_("cannot create log stream: %s"),
+               mu_strerror (rc));
+      exit (1);
+    }
+
+  mode = MU_LOGMODE_SEVERITY | MU_LOGMODE_LOCUS;
+  mu_stream_ioctl (logger, MU_IOCTL_LOGSTREAM_SET_MODE, &mode);
+  if (locus.mu_file)
+    mu_stream_ioctl (logger, MU_IOCTL_LOGSTREAM_SET_LOCUS, &locus);
+  mu_stream_ioctl (logger, MU_IOCTL_LOGSTREAM_SET_SEVERITY, &log_severity);
+  
+  if (argc)
+    {
+      int i;
+      
+      for (i = 0; i < argc; i++)
+       {
+         if (i > 0)
+           mu_stream_write (logger, " ", 1, NULL);
+         mu_stream_write (logger, argv[i], strlen (argv[i]), NULL);
+       }
+      mu_stream_write (logger, "\n", 1, NULL);
+    }
+  else if (!input_file || strcmp (input_file, "-") == 0)
+    {
+      mu_stream_ref (mu_strin);
+      input = mu_strin;
+    }
+  else
+    {
+      rc = mu_file_stream_create (&input, input_file, MU_STREAM_READ);
+      if (rc)
+       {
+         mu_error (_("cannot open input stream %s: %s"),
+                   input_file, mu_strerror (rc));
+         return 1;
+       }
+    } 
+
+  rc = mu_stream_copy (logger, input, 0, NULL);
+  mu_stream_unref (input);
+  mu_stream_unref (logger);
+  return !!rc;
+}
+
+/*
+  MU Setup: logger
+  mu-handler: mutool_logger
+  mu-docstring: logger_docstring
+  End MU Setup:
+*/
+
+  
+  
diff --git a/mu/mu.c b/mu/mu.c
index b5e8bc6..5933f63 100644
--- a/mu/mu.c
+++ b/mu/mu.c
@@ -104,6 +104,8 @@ main (int argc, char **argv)
   /* Native Language Support */
   MU_APP_INIT_NLS ();
   MU_AUTH_REGISTER_ALL_MODULES ();
+
+  mu_stdstream_setup ();
   
   /* Register the desired mailbox formats.  */
   mu_register_all_mbox_formats ();
diff --git a/mu/mu.h b/mu/mu.h
index 01150ae..c58f722 100644
--- a/mu/mu.h
+++ b/mu/mu.h
@@ -33,7 +33,6 @@ struct mutool_command
 extern char *mutool_shell_prompt;
 extern char **mutool_prompt_env;
 extern int mutool_shell_interactive;
-extern mu_stream_t mustrin, mustrout;
 int mutool_shell (const char *name, struct mutool_command *cmd);
 mu_stream_t mutool_open_pager (void);
 
diff --git a/mu/pop.c b/mu/pop.c
index 5a77e56..709de80 100644
--- a/mu/pop.c
+++ b/mu/pop.c
@@ -186,7 +186,7 @@ com_apop (int argc, char **argv)
     }
   else
     {
-      status = mu_getpass (mustrin, mustrout, "Password:", &passbuf);
+      status = mu_getpass (mu_strin, mu_strout, "Password:", &passbuf);
       if (status)
        return status;
       pwd = passbuf;
@@ -234,13 +234,13 @@ com_capa (int argc, char **argv)
            {
            case 0:
              if (*elt)
-               mu_stream_printf (mustrout, "%s: %s\n", argv[i], elt);
+               mu_printf ("%s: %s\n", argv[i], elt);
              else
-               mu_stream_printf (mustrout, "%s is set\n", argv[i]);
+               mu_printf ("%s is set\n", argv[i]);
              break;
 
            case MU_ERR_NOENT:
-             mu_stream_printf (mustrout, "%s is not set\n", argv[i]);
+             mu_printf ("%s is not set\n", argv[i]);
              break;
 
            default:
@@ -259,7 +259,7 @@ com_capa (int argc, char **argv)
            {
              char *capa = NULL;
              mu_iterator_current (iterator, (void **) &capa);
-             mu_stream_printf (mustrout, "CAPA: %s\n", capa ? capa : "");
+             mu_printf ("CAPA: %s\n", capa ? capa : "");
            }
          mu_iterator_destroy (&iterator);
        }
@@ -296,7 +296,7 @@ com_uidl (int argc, char **argv)
       unsigned int msgno = strtoul (argv[1], NULL, 10);
       status = mu_pop3_uidl (pop3, msgno, &uidl);
       if (status == 0)
-       mu_stream_printf (mustrout, "Msg: %d UIDL: %s\n", msgno, uidl ? uidl : 
"");
+       mu_printf ("Msg: %d UIDL: %s\n", msgno, uidl ? uidl : "");
       free (uidl);
     }
   return status;
@@ -331,7 +331,7 @@ com_list (int argc, char **argv)
       unsigned int msgno = strtoul (argv[1], NULL, 10);
       status = mu_pop3_list (pop3, msgno, &size);
       if (status == 0)
-       mu_stream_printf (mustrout, "Msg: %u Size: %lu\n", msgno, (unsigned 
long) size);
+       mu_printf ("Msg: %u Size: %lu\n", msgno, (unsigned long) size);
     }
   return status;
 }
@@ -355,7 +355,7 @@ com_pass (int argc, char **argv)
          mu_error (_("pass: password required"));
          return 1;
        }
-      status = mu_getpass (mustrin, mustrout, "Password:", &passbuf);
+      status = mu_getpass (mu_strin, mu_strout, "Password:", &passbuf);
       if (status)
        return status;
       pwd = passbuf;
@@ -380,8 +380,8 @@ com_stat (int argc MU_ARG_UNUSED, char **argv MU_ARG_UNUSED)
   int status = 0;
 
   status = mu_pop3_stat (pop3, &count, &size);
-  mu_stream_printf (mustrout, "Mesgs: %lu Size %lu\n",
-                   (unsigned long) count, (unsigned long) size);
+  mu_printf ("Mesgs: %lu Size %lu\n",
+            (unsigned long) count, (unsigned long) size);
   return status;
 }
 
@@ -578,11 +578,11 @@ com_quit (int argc MU_ARG_UNUSED, char **argv 
MU_ARG_UNUSED)
        }
       else
        {
-         mu_stream_printf (mustrout, "Try 'exit' to leave %s\n", 
mu_program_name);
+         mu_printf ("Try 'exit' to leave %s\n", mu_program_name);
        }
     }
   else
-    mu_stream_printf (mustrout, "Try 'exit' to leave %s\n", mu_program_name);
+    mu_printf ("Try 'exit' to leave %s\n", mu_program_name);
   return status;
 }
 
diff --git a/mu/query.c b/mu/query.c
index 6a1c557..2f98fae 100644
--- a/mu/query.c
+++ b/mu/query.c
@@ -72,10 +72,9 @@ static struct argp query_argp = {
 int
 mutool_query (int argc, char **argv)
 {
-  int rc, index;
+  int index;
   mu_cfg_tree_t *tree = NULL;
   int fmtflags = 0;
-  mu_stream_t stream;
   
   if (argp_parse (&query_argp, argc, argv, ARGP_IN_ORDER, &index, NULL))
     return 1;
@@ -100,12 +99,6 @@ mutool_query (int argc, char **argv)
     return 1;
   if (!tree)
     return 0;
-  rc = mu_stdio_stream_create (&stream, MU_STDOUT_FD, 0);
-  if (rc)
-    {
-      mu_error ("mu_stdio_stream_create: %s", mu_strerror (rc));
-      return 1;
-    }
   if (verbose_option)
     fmtflags = MU_CFG_FMT_LOCUS;
   for ( ; argc > 0; argc--, argv++)
@@ -114,7 +107,7 @@ mutool_query (int argc, char **argv)
       mu_cfg_node_t *node;
 
       if (mu_cfg_find_node (tree, path, &node) == 0)
-       mu_cfg_format_node (stream, node, fmtflags);
+       mu_cfg_format_node (mu_strout, node, fmtflags);
     }
   return 0;
 }
diff --git a/mu/shell.c b/mu/shell.c
index ab12fd4..76bd2c6 100644
--- a/mu/shell.c
+++ b/mu/shell.c
@@ -33,7 +33,6 @@
 char *mutool_shell_prompt;
 char **mutool_prompt_env;
 int mutool_shell_interactive;
-mu_stream_t mustrin, mustrout;
 
 
 static int shell_exit (int, char **);
@@ -161,16 +160,16 @@ list_commands (struct mutool_command *tab, const char 
*name)
       if (printed == 6)
        {
          printed = 0;
-         mu_stream_printf (mustrout, "\n");
+         mu_printf ("\n");
        }
       if (mu_c_strncasecmp (tab->name, name, namelen) == 0)
        {
-         mu_stream_printf (mustrout, "%s\t", tab->name);
+         mu_printf ("%s\t", tab->name);
          printed++;
        }
     }
   if (printed && printed < 6)
-    mu_stream_printf (mustrout, "\n");
+    mu_printf ("\n");
 }
 
 static struct mutool_command *
@@ -204,12 +203,10 @@ shell_help (int argc, char **argv)
       struct mutool_command *com = find_command (argv[1]);
 
       if (com)
-       print_comtab (mustrout, com);
+       print_comtab (mu_strout, com);
       else
        {
-         mu_stream_printf (mustrout,
-                           "No commands match `%s'.  Possibilties are:\n",
-                           name);
+         mu_printf ("No commands match `%s'.  Possibilties are:\n", name);
          list_commands (shell_comtab, name);
        }
     }
@@ -248,8 +245,8 @@ mutool_open_pager ()
        return stream;
       mu_error (_("cannot start pager: %s"), mu_strerror (rc));
     }
-  mu_stream_ref (mustrout);
-  return mustrout;
+  mu_stream_ref (mu_strout);
+  return mu_strout;
 }
 
 
@@ -391,7 +388,7 @@ retrieve_history (char *str)
       return 1;
 
     case 2:
-      mu_stream_printf (mustrout, "%s\n", out);
+      mu_printf ("%s\n", out);
       free (out);
       return 1;
     }
@@ -425,10 +422,10 @@ readline (char *prompt)
 
   if (prompt)
     {
-      mu_stream_printf (mustrout, "%s", prompt);
-      fflush (stdout);
+      mu_printf ("%s", prompt);
+      mu_stream_flush (mu_strout);
     }
-  if (mu_stream_getline (mustrin, &buf, &size, &n) || n == 0)
+  if (mu_stream_getline (mu_strin, &buf, &size, &n) || n == 0)
     {
       free (buf);
       buf = NULL;
@@ -530,7 +527,7 @@ input_line_script ()
   size_t size = 0, n;
   char *buf = NULL;
 
-  if (mu_stream_getline (mustrin, &buf, &size, &n) || n == 0)
+  if (mu_stream_getline (mu_strin, &buf, &size, &n) || n == 0)
     return NULL;
   return buf;
 }
@@ -547,28 +544,9 @@ shell_exit (int argc MU_ARG_UNUSED, char **argv 
MU_ARG_UNUSED)
 int
 mutool_shell (const char *name, struct mutool_command *cmd)
 {
-  int rc;
   size_t n;
   char *(*input_line) ();
 
-  rc = mu_stdio_stream_create (&mustrin, MU_STDIN_FD,
-                              MU_STREAM_READ);
-  if (rc)
-    {
-      mu_diag_funcall (MU_DIAG_ERROR, "mu_stdio_stream_create",
-                      "MU_STDIN_FD", rc);
-      return 1;
-    } 
- 
-  rc = mu_stdio_stream_create (&mustrout, MU_STDOUT_FD,
-                              MU_STREAM_WRITE);
-  if (rc)
-    {
-      mu_diag_funcall (MU_DIAG_ERROR, "mu_stdio_stream_create",
-                      "MU_STDOUT_FD", rc);
-      return 1;
-    } 
- 
   mutool_shell_interactive = isatty (0);
   input_line = mutool_shell_interactive ?
                              input_line_interactive : input_line_script;
@@ -616,8 +594,8 @@ mutool_shell (const char *name, struct mutool_command *cmd)
     }
   if (mutool_shell_interactive)
     finish_readline ();
-  mu_stream_destroy (&mustrin);
-  mu_stream_destroy (&mustrout);
+  mu_stream_destroy (&mu_strin);
+  mu_stream_destroy (&mu_strout);
   return 0;
 }
 
diff --git a/mu/template.c b/mu/template.c
new file mode 100644
index 0000000..299772c
--- /dev/null
+++ b/mu/template.c
@@ -0,0 +1,91 @@
+/* GNU Mailutils -- a suite of utilities for electronic mail
+   Copyright (C) 2010 Free Software Foundation, Inc.
+
+   GNU Mailutils is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GNU Mailutils 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */
+
+/* This file is a template for writing modules for the `mu' utility.
+   It defines an imaginary module FOO, which does nothing.
+
+   Usage checklist:
+
+   1. [ ] Copy this file to another location.
+   2. [ ] Replace FOO with the desired module name.
+   3. [ ] Edit the text strings marked with `#warning', removing the warnings
+          when ready.
+   4. [ ] Implement the desired functionality.
+   5. [ ] Add the module to Makefile.am
+   6. [ ] Remove this comment.
+*/
+
+#if defined(HAVE_CONFIG_H)
+# include <config.h>
+#endif
+#include <mailutils/mailutils.h>
+#include "argp.h"
+#include "mu.h"
+
+#warning "Replace DESCRIPTION with a short description of this module."
+static char FOO_doc[] = N_("mu FOO - DESCRIPTION");
+
+#warning "Usually DESCRIPTION is the same text as the one used in FOO_doc."
+char FOO_docstring[] = N_("DESCRIPTION");
+
+#warning "Edit ARGDOC or remove this variable if module does not take 
arguments"
+static char FOO_args_doc[] = N_("ARGDOC");
+
+static struct argp_option FOO_options[] = {
+  { NULL }
+};
+
+static error_t
+FOO_parse_opt (int key, char *arg, struct argp_state *state)
+{
+  switch (key)
+    {
+    default:
+      return ARGP_ERR_UNKNOWN;
+    }
+  return 0;
+}
+
+static struct argp FOO_argp = {
+  FOO_options,
+  FOO_parse_opt,
+  FOO_args_doc,
+  FOO_doc,
+  NULL,
+  NULL,
+  NULL
+};
+
+int
+mutool_FOO (int argc, char **argv)
+{
+  int index;
+  
+  if (argp_parse (&FOO_argp, argc, argv, ARGP_IN_ORDER, &index, NULL))
+    return 1;
+#warning "Add the necessary functionality here"  
+  return 0;
+}
+
+/*
+  MU Setup: FOO
+  mu-handler: mutool_FOO
+  mu-docstring: FOO_docstring
+  End MU Setup:
+*/
+
+  
+  
diff --git a/mu/verbose.c b/mu/verbose.c
index e043abe..71ff1d5 100644
--- a/mu/verbose.c
+++ b/mu/verbose.c
@@ -67,24 +67,24 @@ shell_verbose (int argc, char **argv,
     {
       if (QRY_VERBOSE ())
        {
-         mu_stream_printf (mustrout, "verbose is on");
+         mu_printf ("verbose is on");
          if (HAS_VERBOSE_MASK ())
            {
              char *delim = " (";
            
              if (QRY_VERBOSE_MASK (MU_XSCRIPT_SECURE))
                {
-                 mu_stream_printf (mustrout, "%ssecure", delim);
+                 mu_printf ("%ssecure", delim);
                  delim = ", ";
                }
              if (QRY_VERBOSE_MASK (MU_XSCRIPT_PAYLOAD))
-               mu_stream_printf (mustrout, "%spayload", delim);
-             mu_stream_printf (mustrout, ")");
+               mu_printf ("%spayload", delim);
+             mu_printf (")");
            }
-         mu_stream_printf (mustrout, "\n");
+         mu_printf ("\n");
        }
       else
-       mu_stream_printf (mustrout, "verbose is off\n");
+       mu_printf ("verbose is off\n");
     }
   else
     {
diff --git a/mu/wicket.c b/mu/wicket.c
index 6cd9715..cfc6f1e 100644
--- a/mu/wicket.c
+++ b/mu/wicket.c
@@ -103,16 +103,16 @@ wicket_match (mu_stream_t stream, const char *str)
       ret = 0;
       if (wicket_verbose)
        {
-         printf ("%s: %s:%d", str, loc.file, loc.line);
+         mu_printf ("%s: %s:%d", str, loc.file, loc.line);
          if (wicket_verbose > 1)
-           printf (": %s", mu_url_to_string (url));
-         putchar ('\n');
+           mu_printf (": %s", mu_url_to_string (url));
+         mu_printf ("\n");
        }
       break;
 
     case MU_ERR_NOENT:
       if (wicket_verbose)
-       printf ("%s: %s\n", str, _("not found"));
+       mu_printf ("%s: %s\n", str, _("not found"));
       ret = 1;
       break;
 
diff --git a/po/POTFILES.in b/po/POTFILES.in
index a31d9e5..b0bd63b 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -133,6 +133,7 @@ libmailutils/server/acl.c
 
 libmailutils/stream/file_stream.c
 libmailutils/stream/prog_stream.c
+libmailutils/stream/logstream.c
 
 libmailutils/filter/filter_iconv.c
 
@@ -156,6 +157,9 @@ libmailutils/base/tempfile.c
 
 libmailutils/string/trueans.c
 
+libmailutils/stdstream/baseio.c
+libmailutils/stdstream/strerr.c
+
 messages/messages.c
 
 mh/anno.c
@@ -226,6 +230,7 @@ mu/shell.c
 mu/cflags.c
 mu/ldflags.c
 mu/wicket.c
+mu/logger.c
 
 # EOF
 


hooks/post-receive
-- 
GNU Mailutils



reply via email to

[Prev in Thread] Current Thread [Next in Thread]