summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2016-12-31 14:25:13 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2016-12-31 14:25:13 +0200
commit66f7ed9562cce859f20166f9cf0c38a018a83dbe (patch)
treee2b11f6d2d74fd07bd981eae1d774ff58f2d80a7
parentda63ec15b4c8fb3084075730332a8d20a9af374f (diff)
downloadmailutils-66f7ed9562cce859f20166f9cf0c38a018a83dbe.tar.gz
mailutils-66f7ed9562cce859f20166f9cf0c38a018a83dbe.tar.bz2
Provide a way to discern between erroneous return and user-induced break condition in foreach iterator functions
* libmailutils/diag/errors (MU_ERR_USER0-MU_ERR_USER7): New error constants. Reserved for user's purposes, such as breaking from foreach iterators. * libmaildutils/list/foreach.c (mu_list_foreach): Treat NULL list as a list of 0 elements. * libmailutils/list/foreachdir.c (mu_list_foreach_dir): Likewise. * imap4d/imap4d.h (imap4d_auth_result): Remap constants to MU_ERR_USER[0-2] * libmu_sieve/prog.c (mu_i_sv_lint_command): Use mu_list_locate with the default comparator. * mh/mh_list.c (_comp_name): Rewrite to match the definition of mu_list_comparator_t (mhl_format_run): Set _comp_name as comparator for the env.printed_fields list. (header_is_printed): Use mu_list_locate. * imap4d/authenticate.c: Use MU_ERR_USER0-MU_ERR_USER7 to indicate normal break condition in foreach iterators. * imap4d/imap4d.c: Likewise. * imap4d/namespace.c: Likewise. * libmailutils/auth/auth.c: Likewise. * libmailutils/cfg/driver.c: Likewise. * libmailutils/cfg/parser.y: Likewise. * libmailutils/server/acl.c: Likewise. * libmailutils/server/msrv.c: Likewise. * libmu_sieve/conf.c: Likewise. * libmu_sieve/load.c: Likewise. * libmu_sieve/sieve.l: Likewise. * libmu_sieve/strexp.c: Likewise. * libproto/imap/mbox.c: Likewise. * libproto/imap/search.c: Likewise. * mh/mh_format.c: Likewise. * mh/send.c: Likewise. * mh/sortm.c: Likewise. * mimeview/mimetypes.y: Likewise. * movemail/movemail.c: Likewise.
-rw-r--r--imap4d/authenticate.c6
-rw-r--r--imap4d/imap4d.c6
-rw-r--r--imap4d/imap4d.h8
-rw-r--r--imap4d/namespace.c16
-rw-r--r--libmailutils/auth/auth.c2
-rw-r--r--libmailutils/cfg/driver.c30
-rw-r--r--libmailutils/cfg/parser.y25
-rw-r--r--libmailutils/diag/errors11
-rw-r--r--libmailutils/list/foreach.c4
-rw-r--r--libmailutils/list/foreachdir.c4
-rw-r--r--libmailutils/server/acl.c14
-rw-r--r--libmailutils/server/msrv.c2
-rw-r--r--libmu_sieve/conf.c21
-rw-r--r--libmu_sieve/load.c19
-rw-r--r--libmu_sieve/prog.c10
-rw-r--r--libmu_sieve/sieve.l2
-rw-r--r--libmu_sieve/strexp.c18
-rw-r--r--libproto/imap/mbox.c10
-rw-r--r--libproto/imap/search.c6
-rw-r--r--mh/mh_format.c2
-rw-r--r--mh/mh_list.c7
-rw-r--r--mh/send.c6
-rw-r--r--mh/sortm.c2
-rw-r--r--mimeview/mimetypes.y2
-rw-r--r--movemail/movemail.c2
25 files changed, 155 insertions, 80 deletions
diff --git a/imap4d/authenticate.c b/imap4d/authenticate.c
index 92c4719d8..13fcf9a3e 100644
--- a/imap4d/authenticate.c
+++ b/imap4d/authenticate.c
@@ -96,7 +96,7 @@ imap4d_authenticate (struct imap4d_session *session,
{
char *auth_type;
struct imap4d_auth adata;
- enum imap4d_auth_result res;
+ int res;
if (imap4d_tokbuf_argc (tok) != 3)
return io_completion_response (command, RESP_BAD, "Invalid arguments");
@@ -136,6 +136,10 @@ imap4d_authenticate (struct imap4d_session *session,
case imap4d_auth_fail:
adata.response = RESP_NO;
break;
+
+ default:
+ adata.response = RESP_NO;
+ mu_error ("%s", mu_strerror (res));
}
return io_completion_response (command, adata.response,
"%s authentication failed", auth_type);
diff --git a/imap4d/imap4d.c b/imap4d/imap4d.c
index df9cc7a2b..348e615a0 100644
--- a/imap4d/imap4d.c
+++ b/imap4d/imap4d.c
@@ -340,11 +340,11 @@ check_user_groups (void *item, void *data)
return 0;
if (gp->gr_gid == auth_data->gid)
- return MU_ERR_EXISTS;
+ return MU_ERR_USER0;
for (p = gp->gr_mem; *p; p++)
if (strcmp (*p, auth_data->name) == 0)
- return MU_ERR_EXISTS;
+ return MU_ERR_USER0;
return 0;
}
@@ -353,7 +353,7 @@ static int
imap_check_group_list (mu_list_t l)
{
int rc = mu_list_foreach (l, check_user_groups, NULL);
- if (rc == MU_ERR_EXISTS)
+ if (rc == MU_ERR_USER0)
return 0;
else if (rc == 0)
return MU_ERR_NOENT;
diff --git a/imap4d/imap4d.h b/imap4d/imap4d.h
index d5472873c..c08290d30 100644
--- a/imap4d/imap4d.h
+++ b/imap4d/imap4d.h
@@ -467,10 +467,10 @@ struct imap4d_auth
enum imap4d_auth_result
{
- imap4d_auth_nosup,
- imap4d_auth_ok,
- imap4d_auth_resp,
- imap4d_auth_fail
+ imap4d_auth_nosup = 0,
+ imap4d_auth_ok = MU_ERR_USER0,
+ imap4d_auth_resp = MU_ERR_USER1,
+ imap4d_auth_fail = MU_ERR_USER2
};
typedef enum imap4d_auth_result
diff --git a/imap4d/namespace.c b/imap4d/namespace.c
index 9d694942c..e05aa132e 100644
--- a/imap4d/namespace.c
+++ b/imap4d/namespace.c
@@ -83,8 +83,18 @@ namespace_enumerate (int id, nsfp_t f, void *closure)
nsc.id = id;
nsc.fun = f;
nsc.closure = closure;
- return namespace[id] == 0 ? 0 :
- mu_list_foreach (namespace[id], _enum_fun, &nsc);
+ if (namespace[id])
+ {
+ int rc = mu_list_foreach (namespace[id], _enum_fun, &nsc);
+ if (rc == MU_ERR_USER0)
+ return 1;
+ else if (rc != 0)
+ {
+ mu_diag_funcall (MU_DIAG_ERROR, "mu_list_foreach", NULL, rc);
+ return 0;
+ }
+ }
+ return 0;
}
static int
@@ -149,7 +159,7 @@ check_namespace (void *closure, int ns, char *path, int delim)
{
p->ns = ns;
p->exact = len == p->namelen;
- return 1;
+ return MU_ERR_USER0;
}
return 0;
}
diff --git a/libmailutils/auth/auth.c b/libmailutils/auth/auth.c
index 0b5daf584..413092eb6 100644
--- a/libmailutils/auth/auth.c
+++ b/libmailutils/auth/auth.c
@@ -123,7 +123,7 @@ try_auth (void *item, void *data)
if (authenticate (cb->authority) == 0)
{
cb->status = 0;
- return 1;
+ return MU_ERR_USER0;
}
return 0;
}
diff --git a/libmailutils/cfg/driver.c b/libmailutils/cfg/driver.c
index 1c897af32..2d1022f75 100644
--- a/libmailutils/cfg/driver.c
+++ b/libmailutils/cfg/driver.c
@@ -165,7 +165,13 @@ dup_container (struct mu_cfg_cont **pcont)
newcont->v.section.offset = oldcont->v.section.offset;
newcont->v.section.docstring = oldcont->v.section.docstring;
newcont->v.section.children = NULL;
- mu_list_foreach (oldcont->v.section.children, _dup_cont_action, &dd);
+ rc = mu_list_foreach (oldcont->v.section.children, _dup_cont_action, &dd);
+ if (rc)
+ {
+ mu_diag_funcall (MU_DIAG_ERROR, "_dup_cont_action",
+ oldcont->v.section.ident, rc);
+ abort ();
+ }
break;
case mu_cfg_cont_param:
@@ -325,8 +331,7 @@ mu_config_clone_container (struct mu_cfg_cont *cont)
switch (cont->type)
{
case mu_cfg_cont_section:
- mu_list_foreach (cont->v.section.children, _clone_action, NULL);
- break;
+ return mu_list_foreach (cont->v.section.children, _clone_action, NULL);
case mu_cfg_cont_param:
break;
@@ -590,7 +595,6 @@ struct mapping_closure
{
mu_assoc_t assoc;
char *err_term;
- int err;
};
static int
@@ -600,6 +604,7 @@ parse_mapping (void *item, void *data)
char *str = item;
size_t len;
char *key, *val;
+ int rc;
len = strcspn (str, "=");
if (str[len] == 0)
@@ -613,11 +618,9 @@ parse_mapping (void *item, void *data)
val = mu_strdup (str + len + 1);
if (!val)
return ENOMEM;
- clos->err = mu_assoc_install (clos->assoc, key, val);
+ rc = mu_assoc_install (clos->assoc, key, val);
free (key);
- if (clos->err)
- return 1;
- return 0;
+ return rc;
}
int
@@ -655,10 +658,15 @@ mu_cfg_field_map (struct mu_config_value const *val, mu_assoc_t *passoc,
if (rc)
{
- if (err_term)
- *err_term = clos.err_term;
+ if (rc == MU_ERR_PARSE)
+ {
+ if (err_term)
+ *err_term = clos.err_term;
+ else
+ free (clos.err_term);
+ }
else
- free (clos.err_term);
+ mu_error ("%s:%d: %s", __FILE__, __LINE__, mu_strerror (rc));
mu_assoc_destroy (&clos.assoc);
}
else
diff --git a/libmailutils/cfg/parser.y b/libmailutils/cfg/parser.y
index 48f94d968..d66edb1b2 100644
--- a/libmailutils/cfg/parser.y
+++ b/libmailutils/cfg/parser.y
@@ -565,7 +565,7 @@ mu_cfg_tree_postprocess (mu_cfg_tree_t *tree, struct mu_cfg_parse_hints *hints)
{
/* Reset the parent node */
mu_list_foreach (node->nodes, _node_set_parent,
- node->parent);
+ node->parent);
/* Move all nodes from this block to the topmost
level */
mu_iterator_ctl (itr, mu_itrctl_insert_list,
@@ -619,6 +619,7 @@ _mu_cfg_preorder_recursive (void *item, void *cbdata)
{
mu_cfg_node_t *node = item;
struct mu_cfg_iter_closure *clos = cbdata;
+ int rc;
switch (node->type)
{
@@ -629,22 +630,24 @@ _mu_cfg_preorder_recursive (void *item, void *cbdata)
switch (clos->beg (node, clos->data))
{
case MU_CFG_ITER_OK:
- if (mu_cfg_preorder (node->nodes, clos))
- return 1;
+ rc = mu_cfg_preorder (node->nodes, clos);
+ if (rc)
+ return rc;
if (clos->end && clos->end (node, clos->data) == MU_CFG_ITER_STOP)
- return 1;
+ return MU_ERR_USER0;
break;
case MU_CFG_ITER_SKIP:
break;
case MU_CFG_ITER_STOP:
- return 1;
+ return MU_ERR_USER0;
}
break;
case mu_cfg_node_param:
- return clos->beg (node, clos->data) == MU_CFG_ITER_STOP;
+ if (clos->beg (node, clos->data) == MU_CFG_ITER_STOP)
+ return MU_ERR_USER0;
}
return 0;
}
@@ -1035,6 +1038,7 @@ mu_cfg_scan_tree (mu_cfg_tree_t *tree, struct mu_cfg_section *sections,
struct mu_cfg_iter_closure clos;
int save_mode = 0, mode;
struct mu_locus save_locus = { NULL, };
+ int rc;
dat.tree = tree;
dat.list = NULL;
@@ -1055,9 +1059,10 @@ mu_cfg_scan_tree (mu_cfg_tree_t *tree, struct mu_cfg_section *sections,
clos.beg = _scan_tree_helper;
clos.end = _scan_tree_end_helper;
clos.data = &dat;
- mu_cfg_preorder (tree->nodes, &clos);
+ rc = mu_cfg_preorder (tree->nodes, &clos);
pop_section (&dat);
-
+ if (rc && rc != MU_ERR_USER0)
+ dat.error++;
mu_stream_ioctl (mu_strerr, MU_IOCTL_LOGSTREAM,
MU_IOCTL_LOGSTREAM_SET_MODE, &save_mode);
mu_stream_ioctl (mu_strerr, MU_IOCTL_LOGSTREAM,
@@ -1448,11 +1453,13 @@ mu_cfg_find_node (mu_cfg_tree_t *tree, const char *path, mu_cfg_node_t **pval)
clos.data = &data;
rc = mu_cfg_preorder (tree->nodes, &clos);
destroy_value (data.label);
- if (rc)
+ if (rc == MU_ERR_USER0)
{
*pval = (mu_cfg_node_t *) data.node;
return 0;
}
+ else
+ mu_diag_funcall (MU_DIAG_ERR, "mu_cfg_preorder", NULL, rc);
}
return MU_ERR_NOENT;
}
diff --git a/libmailutils/diag/errors b/libmailutils/diag/errors
index c4fec20e1..9cd561106 100644
--- a/libmailutils/diag/errors
+++ b/libmailutils/diag/errors
@@ -129,3 +129,14 @@ MU_ERR_FORMAT _("Error in format string")
MU_ERR_REMOVE_SOURCE _("Failed to remove source file")
MU_ERR_REMOVE_DEST _("Failed to remove destination file")
MU_ERR_RESTORE_META _("Failed to restore ownership or mode")
+
+# User-defined errors are meant to be returned by foreach iterator
+# callbacks when they need to break iterations.
+MU_ERR_USER0 _("User-defined error 0")
+MU_ERR_USER1 _("User-defined error 1")
+MU_ERR_USER2 _("User-defined error 2")
+MU_ERR_USER3 _("User-defined error 3")
+MU_ERR_USER4 _("User-defined error 4")
+MU_ERR_USER5 _("User-defined error 5")
+MU_ERR_USER6 _("User-defined error 6")
+MU_ERR_USER7 _("User-defined error 7")
diff --git a/libmailutils/list/foreach.c b/libmailutils/list/foreach.c
index 353de05d7..9794dda0d 100644
--- a/libmailutils/list/foreach.c
+++ b/libmailutils/list/foreach.c
@@ -29,7 +29,9 @@ mu_list_foreach (mu_list_t list, mu_list_action_t action, void *cbdata)
mu_iterator_t itr;
int status = 0;
- if (list == NULL || action == NULL)
+ if (list == NULL)
+ return 0;
+ if (action == NULL)
return EINVAL;
status = mu_list_get_iterator (list, &itr);
if (status)
diff --git a/libmailutils/list/foreachdir.c b/libmailutils/list/foreachdir.c
index 4cce203b4..6fa487447 100644
--- a/libmailutils/list/foreachdir.c
+++ b/libmailutils/list/foreachdir.c
@@ -30,7 +30,9 @@ mu_list_foreach_dir (mu_list_t list, int dir,
mu_iterator_t itr;
int status = 0;
- if (list == NULL || action == NULL)
+ if (list == NULL)
+ return 0;
+ if (action == NULL)
return EINVAL;
status = mu_list_get_iterator (list, &itr);
if (status)
diff --git a/libmailutils/server/acl.c b/libmailutils/server/acl.c
index f37e1eba6..1c5906c52 100644
--- a/libmailutils/server/acl.c
+++ b/libmailutils/server/acl.c
@@ -483,12 +483,12 @@ _run_entry (void *item, void *data)
{
case mu_acl_accept:
*rp->result = mu_acl_result_accept;
- status = 1;
+ status = MU_ERR_USER0;
break;
case mu_acl_deny:
*rp->result = mu_acl_result_deny;
- status = 1;
+ status = MU_ERR_USER0;
break;
case mu_acl_log:
@@ -523,12 +523,12 @@ _run_entry (void *item, void *data)
{
case 0:
*rp->result = mu_acl_result_accept;
- status = 1;
+ status = MU_ERR_USER0;
break;
case 1:
*rp->result = mu_acl_result_deny;
- status = 1;
+ status = MU_ERR_USER0;
}
}
}
@@ -573,9 +573,11 @@ mu_acl_check_sockaddr (mu_acl_t acl, const struct sockaddr *sa, int salen,
r.result = pres;
r.env = acl->envv;
*r.result = mu_acl_result_undefined;
- mu_list_foreach (acl->aclist, _run_entry, &r);
+ rc = mu_list_foreach (acl->aclist, _run_entry, &r);
free (r.addrstr);
- return 0;
+ if (rc == MU_ERR_USER0)
+ rc = 0;
+ return rc;
}
int
diff --git a/libmailutils/server/msrv.c b/libmailutils/server/msrv.c
index 1048a5e9c..19c30a1d3 100644
--- a/libmailutils/server/msrv.c
+++ b/libmailutils/server/msrv.c
@@ -216,7 +216,7 @@ m_server_cleanup (void *item, void *data)
mu_diag_output (MU_DIAG_ERR,
"process %lu terminated (cause unknown)",
(unsigned long) datp->pid);
- return 1;
+ return MU_ERR_USER0;
}
return 0;
}
diff --git a/libmu_sieve/conf.c b/libmu_sieve/conf.c
index 9b9b0d95f..d6ccfda62 100644
--- a/libmu_sieve/conf.c
+++ b/libmu_sieve/conf.c
@@ -50,9 +50,11 @@ _path_append (void *item, void *data)
{
mu_list_t *plist = data;
char *p;
+ int rc;
+
if (!*plist)
{
- int rc = mu_list_create (plist);
+ rc = mu_list_create (plist);
if (rc)
{
mu_error (_("cannot create list: %s"), mu_strerror (rc));
@@ -62,8 +64,15 @@ _path_append (void *item, void *data)
}
p = strdup (item);
if (!p)
- return ENOMEM;
- return mu_list_append (*plist, p);
+ rc = errno;
+ else
+ rc = mu_list_append (*plist, p);
+ if (rc)
+ {
+ mu_error (_("can't add directory to path: %s"), mu_strerror (rc));
+ exit (1);
+ }
+ return 0;
}
static int
@@ -223,7 +232,8 @@ sieve_commit (void *ptr)
{
if (sieve_settings.clearflags & MU_SIEVE_CLEAR_INCLUDE_PATH)
mu_list_destroy (&mu_sieve_include_path);
- mu_list_foreach (sieve_settings.include_path, _path_append, &mu_sieve_include_path);
+ mu_list_foreach (sieve_settings.include_path, _path_append,
+ &mu_sieve_include_path);
if (sieve_settings.clearflags & MU_SIEVE_CLEAR_LIBRARY_PATH)
{
mu_list_destroy (&mu_sieve_library_path);
@@ -231,7 +241,8 @@ sieve_commit (void *ptr)
}
mu_list_foreach (sieve_settings.library_path_prefix, _path_append,
&mu_sieve_library_path_prefix);
- mu_list_foreach (sieve_settings.library_path, _path_append, &mu_sieve_library_path);
+ mu_list_foreach (sieve_settings.library_path, _path_append,
+ &mu_sieve_library_path);
mu_list_destroy (&sieve_settings.library_path);
mu_list_destroy (&sieve_settings.library_path_prefix);
mu_list_destroy (&sieve_settings.include_path);
diff --git a/libmu_sieve/load.c b/libmu_sieve/load.c
index deddcd2d8..b09e08412 100644
--- a/libmu_sieve/load.c
+++ b/libmu_sieve/load.c
@@ -34,7 +34,7 @@ typedef int (*sieve_module_init_t) (mu_sieve_machine_t mach);
static int _add_load_dir (void *, void *);
static int
-sieve_init_load_path ()
+sieve_init_load_path (void)
{
static int inited = 0;
@@ -42,11 +42,14 @@ sieve_init_load_path ()
{
if (lt_dlinit ())
return 1;
- mu_list_foreach (mu_sieve_library_path_prefix, _add_load_dir, NULL);
+ if (mu_list_foreach (mu_sieve_library_path_prefix, _add_load_dir, NULL))
+ return 1;
#ifdef MU_SIEVE_MODDIR
- _add_load_dir (MU_SIEVE_MODDIR, NULL);
+ if (_add_load_dir (MU_SIEVE_MODDIR, NULL))
+ return 1;
#endif
- mu_list_foreach (mu_sieve_library_path, _add_load_dir, NULL);
+ if (mu_list_foreach (mu_sieve_library_path, _add_load_dir, NULL))
+ return 1;
inited = 1;
}
return 0;
@@ -122,7 +125,13 @@ mu_sieve_unload_ext (void *data)
static int
_add_load_dir (void *item, void *unused)
{
- return lt_dladdsearchdir (item);
+ if (lt_dladdsearchdir (item))
+ {
+ mu_error (_("can't add dynamic library search directory: %s"),
+ lt_dlerror ());
+ return MU_ERR_FAILURE;
+ }
+ return 0;
}
int
diff --git a/libmu_sieve/prog.c b/libmu_sieve/prog.c
index 3565a6622..516252586 100644
--- a/libmu_sieve/prog.c
+++ b/libmu_sieve/prog.c
@@ -86,12 +86,6 @@ find_tag (mu_sieve_tag_group_t *taglist, char *tagname,
return NULL;
}
-static int
-_compare_ptr (void *item, void *data)
-{
- return item == data;
-}
-
struct check_arg
{
struct mu_sieve_machine *mach;
@@ -125,7 +119,7 @@ _run_checker (void *item, void *data)
mach->tagcount = 0;
mach->identifier = NULL;
- return rc;
+ return rc ? MU_ERR_USER0 : 0;
}
void
@@ -223,7 +217,7 @@ mu_i_sv_lint_command (struct mu_sieve_machine *mach,
err = 1;
break;
}
- if (mu_list_foreach (chk_list, _compare_ptr, cf) == 0)
+ if (mu_list_locate (chk_list, cf, NULL) == MU_ERR_NOENT)
{
rc = mu_list_append (chk_list, cf);
if (rc)
diff --git a/libmu_sieve/sieve.l b/libmu_sieve/sieve.l
index ffc7a4ab8..be5557604 100644
--- a/libmu_sieve/sieve.l
+++ b/libmu_sieve/sieve.l
@@ -388,7 +388,7 @@ _try_include (void *item, void *data)
if (access (name, R_OK) == 0)
{
*(char**) data = name;
- return 1;
+ return MU_ERR_USER0;
}
free (name);
return 0;
diff --git a/libmu_sieve/strexp.c b/libmu_sieve/strexp.c
index d629e4aa5..f5a079659 100644
--- a/libmu_sieve/strexp.c
+++ b/libmu_sieve/strexp.c
@@ -200,11 +200,16 @@ string_split (struct stringbuf *buf)
static int
string_assemble (struct stringbuf *buf)
{
- struct segm_stat st;
+ int rc;
+ struct segm_stat st;
+
st.len = 0;
st.end = 0;
- mu_list_foreach (buf->seglist, update_len, &st);
+ rc = mu_list_foreach (buf->seglist, update_len, &st);
+ if (rc)
+ longjmp (buf->errbuf, rc);
+
if (st.end == buf->length - 1)
return MU_ERR_CANCELED;
@@ -212,7 +217,14 @@ string_assemble (struct stringbuf *buf)
if (!buf->expansion)
longjmp (buf->errbuf, ENOMEM);
buf->endptr = buf->expansion;
- mu_list_foreach (buf->seglist, append_segm, buf);
+ rc = mu_list_foreach (buf->seglist, append_segm, buf);
+ if (rc)
+ {
+ free (buf->expansion);
+ buf->expansion = NULL;
+ longjmp (buf->errbuf, rc);
+ }
+
*buf->endptr = 0;
return 0;
diff --git a/libproto/imap/mbox.c b/libproto/imap/mbox.c
index b775b140d..6b75769c2 100644
--- a/libproto/imap/mbox.c
+++ b/libproto/imap/mbox.c
@@ -1119,9 +1119,11 @@ sum_lines (void *item, void *data)
struct mu_bodystructure *bs = item;
size_t *pn = data;
size_t n;
-
- if (_compute_lines (bs, &n))
- return 1;
+ int rc;
+
+ rc = _compute_lines (bs, &n);
+ if (rc)
+ return rc;
*pn += n;
return 0;
}
@@ -1146,7 +1148,7 @@ _compute_lines (struct mu_bodystructure *bs, size_t *pcount)
*pcount = 0;
return mu_list_foreach (bs->v.multipart.body_parts, sum_lines, pcount);
}
- return 1;
+ return MU_ERR_USER0;
}
static int
diff --git a/libproto/imap/search.c b/libproto/imap/search.c
index 52c32bd6e..85f41071a 100644
--- a/libproto/imap/search.c
+++ b/libproto/imap/search.c
@@ -45,7 +45,7 @@ add_msgno (void *item, void *data)
mu_debug (MU_DEBCAT_MAILBOX, MU_DEBUG_ERROR,
(_("unexpected list element in untagged response from SEARCH")));
scp->retcode = MU_ERR_BADREPLY;
- return 1;
+ return MU_ERR_USER0;
}
if (!scp->msgset)
@@ -70,7 +70,7 @@ add_msgno (void *item, void *data)
(_("not a number in untagged response from SEARCH: %s"),
elt->v.string));
scp->retcode = MU_ERR_BADREPLY;
- return 1;
+ return MU_ERR_USER0;
}
rc = mu_msgset_add_range (scp->msgset, num, num, MU_MSGSET_NUM);
@@ -79,7 +79,7 @@ add_msgno (void *item, void *data)
mu_debug (MU_DEBCAT_MAILBOX, MU_DEBUG_ERROR,
("mu_msgset_add_range: %s", mu_strerror (rc)));
scp->retcode = rc;
- return 1;
+ return MU_ERR_USER0;
}
return 0;
}
diff --git a/mh/mh_format.c b/mh/mh_format.c
index c74a260b9..a15aa4155 100644
--- a/mh/mh_format.c
+++ b/mh/mh_format.c
@@ -447,7 +447,7 @@ addr_cmp (void *item, void *data)
continue;
rc = mu_address_contains_email (b, str);
}
- return rc;
+ return rc ? MU_ERR_USER0 : 0;
}
static int
diff --git a/mh/mh_list.c b/mh/mh_list.c
index 5f4d61704..07f2f6330 100644
--- a/mh/mh_list.c
+++ b/mh/mh_list.c
@@ -466,15 +466,15 @@ static void goto_offset (struct eval_env *env, int count);
static void print (struct eval_env *env, char *str, int nloff);
static int
-_comp_name (void *item, void *date)
+_comp_name (void const *item, void const *date)
{
- return mu_c_strcasecmp (item, date) == 0;
+ return mu_c_strcasecmp (item, date);
}
int
header_is_printed (struct eval_env *env, const char *name)
{
- return mu_list_foreach (env->printed_fields, _comp_name, (void*) name) == 1;
+ return mu_list_locate (env->printed_fields, (void*) name, NULL) == 0;
}
int
@@ -842,6 +842,7 @@ mhl_format_run (mu_list_t fmt,
env.bvar[B_NEWLINE] = 1;
mu_list_create (&env.printed_fields);
+ mu_list_set_comparator (env.printed_fields, _comp_name);
env.ivar[I_WIDTH] = width;
env.ivar[I_LENGTH] = length;
env.bvar[B_CLEARSCREEN] = flags & MHL_CLEARSCREEN;
diff --git a/mh/send.c b/mh/send.c
index 5bf5b4aca..d017c841e 100644
--- a/mh/send.c
+++ b/mh/send.c
@@ -221,7 +221,7 @@ elt_fixup (void *item, void *data)
exit (1);
elt->msg = mh_file_to_message (NULL, elt->file_name);
if (!elt->msg)
- return 1;
+ return MU_ERR_USER0;
return 0;
}
@@ -633,7 +633,7 @@ _action_send (void *item, void *data)
mailer = open_mailer ();
if (!mailer)
- return 1;
+ return MU_ERR_FAILURE;
WATCH ((_("Sending message %s"), elt->file_name));
if (split_message)
@@ -650,7 +650,7 @@ _action_send (void *item, void *data)
if (rc)
{
mu_error(_("cannot send message: %s"), mu_strerror (rc));
- return 1;
+ return MU_ERR_FAILURE;
}
WATCH ((_("Destroying the mailer")));
diff --git a/mh/sortm.c b/mh/sortm.c
index 4415422b0..33e27ef7d 100644
--- a/mh/sortm.c
+++ b/mh/sortm.c
@@ -286,7 +286,7 @@ compare_action (void *item, void *data)
free (a);
free (b);
- return dp->r; /* go on until the difference is found */
+ return dp->r ? MU_ERR_USER0 : 0; /* go on until the difference is found */
}
static int
diff --git a/mimeview/mimetypes.y b/mimeview/mimetypes.y
index 7b8839c5f..497093993 100644
--- a/mimeview/mimetypes.y
+++ b/mimeview/mimetypes.y
@@ -693,7 +693,7 @@ evaluate (void *item, void *data)
if (eval_rule (p->node))
{
*ptype = p->type;
- return 1;
+ return MU_ERR_USER0;
}
return 0;
}
diff --git a/movemail/movemail.c b/movemail/movemail.c
index 7037ce9b8..a2ac061f2 100644
--- a/movemail/movemail.c
+++ b/movemail/movemail.c
@@ -218,7 +218,7 @@ set_onerror_action (void *item, void *data)
if (mu_kwd_xlat_name (onerror_kw, str, &flag))
{
mu_error (_("unknown keyword: %s"), str);
- return 1;
+ return MU_ERR_FAILURE;
}
if (clr)
onerror_flags &= ~flag;

Return to:

Send suggestions and report system problems to the System administrator.