summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2016-11-24 15:25:07 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2016-11-24 15:25:07 +0200
commit05df35d07a46f70e7d09a4da39fdd2d7a7d58ed0 (patch)
tree0ed8642e5ffb858ba12f1b01dfa3db1934fd4230
parenta4c1a0e88bdeb8372ae66e27da4009a49b0f8009 (diff)
downloadmailutils-05df35d07a46f70e7d09a4da39fdd2d7a7d58ed0.tar.gz
mailutils-05df35d07a46f70e7d09a4da39fdd2d7a7d58ed0.tar.bz2
sieve: simplify action logging API
* include/mailutils/sieve.h (mu_sieve_action_log_t): Change proto. * lib/sieve.c (_sieve_action_log): Rewrite. * libmu_sieve/util.c (mu_sieve_log_action): Rewrite. * python/libmu_py/sieve.c (_sieve_action_printer): Rewrite. * sieve/sieve.c (_sieve_action_log): Rewrite.
-rw-r--r--include/mailutils/sieve.h4
-rw-r--r--lib/sieve.c11
-rw-r--r--libmu_sieve/util.c13
-rw-r--r--python/libmu_py/sieve.c17
-rw-r--r--sieve/sieve.c13
5 files changed, 30 insertions, 28 deletions
diff --git a/include/mailutils/sieve.h b/include/mailutils/sieve.h
index 22cc2c620..364a71a46 100644
--- a/include/mailutils/sieve.h
+++ b/include/mailutils/sieve.h
@@ -35,9 +35,7 @@ typedef struct mu_sieve_machine *mu_sieve_machine_t;
typedef int (*mu_sieve_handler_t) (mu_sieve_machine_t mach,
mu_list_t args, mu_list_t tags);
-typedef void (*mu_sieve_action_log_t) (void *data,
- mu_stream_t stream,
- size_t msgno, mu_message_t msg,
+typedef void (*mu_sieve_action_log_t) (mu_sieve_machine_t mach,
const char *action,
const char *fmt, va_list ap);
diff --git a/lib/sieve.c b/lib/sieve.c
index a7450c1ef..249b5607d 100644
--- a/lib/sieve.c
+++ b/lib/sieve.c
@@ -28,15 +28,17 @@ struct sieve_log_data
};
static void
-_sieve_action_log (void *data,
- mu_stream_t stream, size_t msgno,
- mu_message_t msg,
+_sieve_action_log (mu_sieve_machine_t mach,
const char *action, const char *fmt, va_list ap)
{
- struct sieve_log_data *ldat = data;
+ struct sieve_log_data *ldat = mu_sieve_get_data (mach);
int pfx = 0;
+ mu_stream_t stream;
+ mu_message_t msg = mu_sieve_get_message (mach);
+ mu_sieve_get_diag_stream (mach, &stream);
mu_stream_printf (stream, "\033s<%d>", MU_LOG_NOTICE);
+
if (ldat)
{
if (ldat->user)
@@ -70,6 +72,7 @@ _sieve_action_log (void *data,
mu_stream_vprintf (stream, fmt, ap);
}
mu_stream_printf (stream, "\n");
+ mu_stream_unref (stream);
}
static int
diff --git a/libmu_sieve/util.c b/libmu_sieve/util.c
index b2011e2d1..8b437c7d3 100644
--- a/libmu_sieve/util.c
+++ b/libmu_sieve/util.c
@@ -344,16 +344,11 @@ mu_sieve_log_action (mu_sieve_machine_t mach, const char *action,
if (!mach->logger)
return;
+
+ mu_stream_ioctl (mach->errstream, MU_IOCTL_LOGSTREAM,
+ MU_IOCTL_LOGSTREAM_SET_LOCUS, &mach->locus);
va_start (ap, fmt);
- mu_stream_printf (mach->errstream, "\033s<%d>", MU_LOG_INFO);
- if (mach->locus.mu_file)
- mu_stream_printf (mach->errstream, "\033O<%d>\033f<%u>%s\033l<%u>",
- MU_LOGMODE_LOCUS,
- (unsigned) strlen (mach->locus.mu_file),
- mach->locus.mu_file,
- mach->locus.mu_line);
- mach->logger (mach->data, mach->errstream, mach->msgno, mach->msg,
- action, fmt, ap);
+ mach->logger (mach, action, fmt, ap);
va_end (ap);
}
diff --git a/python/libmu_py/sieve.c b/python/libmu_py/sieve.c
index 8a9ac8d54..baa3fb012 100644
--- a/python/libmu_py/sieve.c
+++ b/python/libmu_py/sieve.c
@@ -236,8 +236,7 @@ api_sieve_message (PyObject *self, PyObject *args)
}
static void
-_sieve_action_printer (void *data, mu_stream_t stream,
- size_t msgno, mu_message_t msg,
+_sieve_action_printer (mu_sieve_machine_t mach,
const char *action, const char *fmt, va_list ap)
{
PyObject *py_args;
@@ -258,10 +257,12 @@ _sieve_action_printer (void *data, mu_stream_t stream,
PyStream *py_stm = PyStream_NEW ();
if (py_stm)
{
- py_stm->stm = stream;
- mu_stream_ref (stream);
-
- py_msg->msg = msg;
+ size_t msgno;
+
+ mu_sieve_get_diag_stream (mach, &py_stm->stm);
+ msgno = mu_sieve_get_message_num (mach);
+
+ py_msg->msg = mu_sieve_get_message (mach);
Py_INCREF (py_msg);
PyDict_SetItemString (py_dict, "msgno",
@@ -272,7 +273,7 @@ _sieve_action_printer (void *data, mu_stream_t stream,
if (mu_vasnprintf (&buf, &buflen, fmt, ap))
{
- mu_stream_unref (stream);
+ mu_stream_destroy (&py_stm->stm);
return;
}
PyDict_SetItemString (py_dict, "text",
@@ -282,7 +283,7 @@ _sieve_action_printer (void *data, mu_stream_t stream,
py_args = PyTuple_New (1);
if (py_args)
{
- struct _mu_py_sieve_logger *s = data;
+ struct _mu_py_sieve_logger *s = mu_sieve_get_data (mach);
PyObject *py_fnc = s->py_action_printer;
Py_INCREF (py_dict);
diff --git a/sieve/sieve.c b/sieve/sieve.c
index 4a77b122a..e5e066c93 100644
--- a/sieve/sieve.c
+++ b/sieve/sieve.c
@@ -264,18 +264,21 @@ Compatibility debug flags:\n\
};
static void
-_sieve_action_log (void *unused,
- mu_stream_t stream, size_t msgno,
- mu_message_t msg,
+_sieve_action_log (mu_sieve_machine_t mach,
const char *action, const char *fmt, va_list ap)
{
size_t uid = 0;
+ mu_message_t msg;
+ mu_stream_t stream;
+
+ mu_sieve_get_diag_stream (mach, &stream);
+ msg = mu_sieve_get_message (mach);
mu_message_get_uid (msg, &uid);
mu_stream_printf (stream, "\033s<%d>\033%c<%d>", MU_LOG_NOTICE,
sieve_print_locus ? 'O' : 'X', MU_LOGMODE_LOCUS);
mu_stream_printf (stream, _("%s on msg uid %lu"),
- action, (unsigned long) uid);
+ action, (unsigned long) uid);
if (fmt && strlen (fmt))
{
@@ -283,6 +286,8 @@ _sieve_action_log (void *unused,
mu_stream_vprintf (stream, fmt, ap);
}
mu_stream_printf (stream, "\n");
+
+ mu_stream_unref (stream);
}
static int

Return to:

Send suggestions and report system problems to the System administrator.