summaryrefslogtreecommitdiff
path: root/libmailutils/cli/stdcapa.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmailutils/cli/stdcapa.c')
-rw-r--r--libmailutils/cli/stdcapa.c106
1 files changed, 72 insertions, 34 deletions
diff --git a/libmailutils/cli/stdcapa.c b/libmailutils/cli/stdcapa.c
index b72f024cb..1d496161c 100644
--- a/libmailutils/cli/stdcapa.c
+++ b/libmailutils/cli/stdcapa.c
@@ -307,10 +307,9 @@ static struct mu_cfg_param mailbox_cfg[] = {
static int
cb_locker_flags (void *data, mu_config_value_t *val)
{
- int flags = 0;
char const *s;
static struct mu_kwd flag_tab[] = {
- { "external-locker", 'E' },
+ { "type external", 'E' },
{ "retry-count", 'R' },
{ "expire-timeout", 'T' },
{ "pid-check", 'P' },
@@ -334,7 +333,7 @@ cb_locker_flags (void *data, mu_config_value_t *val)
mu_diag_output (MU_DIAG_WARNING,
_("applying legacy flag %c, use %s instead"),
*s, kw);
- flags |= MU_LOCKER_PID;
+ mu_locker_defaults.flags |= MU_LOCKER_FLAG_CHECK_PID;
}
else
{
@@ -345,13 +344,11 @@ cb_locker_flags (void *data, mu_config_value_t *val)
*s, kw);
}
}
- if (flags)
- mu_locker_set_default_flags (flags, mu_locker_assign);
return 0;
}
static int
-cb_locker_retry_timeout (void *data, mu_config_value_t *val)
+cb_locker_retry_sleep (void *data, mu_config_value_t *val)
{
int rc;
time_t t;
@@ -366,17 +363,24 @@ cb_locker_retry_timeout (void *data, mu_config_value_t *val)
mu_strerror (rc));
free (errmsg);
}
- else if (t == 0)
- mu_locker_set_default_flags (MU_LOCKER_RETRY, mu_locker_clear_bit);
else
{
- mu_locker_set_default_retry_timeout (t);
- mu_locker_set_default_flags (MU_LOCKER_RETRY, mu_locker_set_bit);
+ mu_locker_defaults.flags |= MU_LOCKER_FLAG_RETRY;
+ mu_locker_defaults.retry_sleep = t;
}
return 0;
}
static int
+cb_locker_retry_timeout (void *data, mu_config_value_t *val)
+{
+ mu_diag_output (MU_DIAG_WARNING,
+ _("%s is deprecated, please use %s instead"),
+ "retry-timeout", "retry-sleep");
+ return cb_locker_retry_sleep (data, val);
+}
+
+static int
cb_locker_retry_count (void *data, mu_config_value_t *val)
{
int rc;
@@ -393,11 +397,11 @@ cb_locker_retry_count (void *data, mu_config_value_t *val)
free (errmsg);
}
else if (n == 0)
- mu_locker_set_default_flags (MU_LOCKER_RETRY, mu_locker_clear_bit);
+ mu_locker_defaults.flags &= ~MU_LOCKER_FLAG_RETRY;
else
{
- mu_locker_set_default_retry_count (n);
- mu_locker_set_default_flags (MU_LOCKER_RETRY, mu_locker_set_bit);
+ mu_locker_defaults.flags |= MU_LOCKER_FLAG_RETRY;
+ mu_locker_defaults.retry_count = n;
}
return 0;
}
@@ -419,31 +423,58 @@ cb_locker_expire_timeout (void *data, mu_config_value_t *val)
free (errmsg);
}
else if (t == 0)
- mu_locker_set_default_flags (MU_LOCKER_TIME, mu_locker_clear_bit);
+ mu_locker_defaults.flags &= ~MU_LOCKER_FLAG_EXPIRE_TIME;
else
{
- mu_locker_set_default_expire_timeout (t);
- mu_locker_set_default_flags (MU_LOCKER_TIME, mu_locker_set_bit);
+ mu_locker_defaults.flags |= MU_LOCKER_FLAG_EXPIRE_TIME;
+ mu_locker_defaults.expire_time = t;
}
return 0;
}
static int
-cb_locker_external (void *data, mu_config_value_t *val)
+cb_locker_type (void *data, mu_config_value_t *val)
{
int t;
-
+ static struct mu_kwd ltab[] = {
+ { "dotlock", MU_LOCKER_TYPE_DOTLOCK },
+ { "default", MU_LOCKER_TYPE_DEFAULT },
+ { "external", MU_LOCKER_TYPE_EXTERNAL },
+ { "kernel", MU_LOCKER_TYPE_KERNEL },
+ { "null", MU_LOCKER_TYPE_NULL },
+ { NULL }
+ };
+
if (mu_cfg_assert_value_type (val, MU_CFG_STRING))
return 1;
- if (mu_str_to_c (val->v.string, mu_c_bool, &t, NULL) == 0 && t == 0)
- {
- mu_locker_set_default_flags (MU_LOCKER_EXTERNAL, mu_locker_clear_bit);
- }
- else
+
+ if (mu_kwd_xlat_name (ltab, val->v.string, &t))
{
- mu_locker_set_default_external_program (val->v.string);
- mu_locker_set_default_flags (MU_LOCKER_EXTERNAL, mu_locker_set_bit);
+ mu_error (_("unrecognized locker type: %s"), val->v.string);
+ return 1;
}
+
+ free (mu_locker_defaults.ext_locker);
+ mu_locker_defaults.ext_locker = NULL;
+
+ mu_locker_defaults.type = t;
+ mu_locker_defaults.flags |= MU_LOCKER_FLAG_TYPE;
+
+ return 0;
+}
+
+static int
+cb_locker_external (void *data, mu_config_value_t *val)
+{
+ int t;
+
+ if (mu_cfg_assert_value_type (val, MU_CFG_STRING))
+ return 1;
+
+ free (mu_locker_defaults.ext_locker);
+ mu_locker_defaults.flags |= MU_LOCKER_FLAG_EXT_LOCKER;
+ mu_locker_defaults.ext_locker = strdup (val->v.string);
+
return 0;
}
@@ -459,22 +490,26 @@ cb_locker_pid_check (void *data, mu_config_value_t *val)
mu_error ("%s", _("not a boolean"));
return 1;
}
- mu_locker_set_default_flags (MU_LOCKER_PID,
- t ? mu_locker_set_bit : mu_locker_clear_bit);
+ if (t)
+ mu_locker_defaults.flags |= MU_LOCKER_FLAG_CHECK_PID;
+ else
+ mu_locker_defaults.flags &= ~MU_LOCKER_FLAG_CHECK_PID;
return 0;
}
static struct mu_cfg_param locking_cfg[] = {
- /* FIXME: Flags are superfluous. */
- { "flags", mu_cfg_callback, NULL, 0, cb_locker_flags,
- N_("Default locker flags (E=external, R=retry, T=time, P=pid)."),
- N_("arg: string") },
- { "retry-timeout", mu_cfg_callback, NULL, 0, cb_locker_retry_timeout,
- N_("Set timeout for acquiring the lock."),
- N_("arg: interval")},
+ { "type", mu_cfg_callback, NULL, 0, cb_locker_type,
+ N_("Set locker type."),
+ N_("type: default | dotlock | external | kernel | null") },
{ "retry-count", mu_cfg_callback, NULL, 0, cb_locker_retry_count,
N_("Set the maximum number of times to retry acquiring the lock."),
N_("arg: integer") },
+ { "retry-sleep", mu_cfg_callback, NULL, 0, cb_locker_retry_sleep,
+ N_("Set the delay between two successive locking attempts."),
+ N_("arg: interval")},
+ { "retry-timeout", mu_cfg_callback, NULL, 0, cb_locker_retry_timeout,
+ N_("Deprecated alias of retry-sleep. Retained for backward compatibility."),
+ N_("arg: interval")},
{ "expire-timeout", mu_cfg_callback, NULL, 0, cb_locker_expire_timeout,
N_("Expire locks older than this amount of time."),
N_("arg: interval")},
@@ -484,6 +519,9 @@ static struct mu_cfg_param locking_cfg[] = {
{ "pid-check", mu_cfg_callback, NULL, 0, cb_locker_pid_check,
N_("Check if PID of the lock owner is active."),
N_("arg: bool") },
+ { "flags", mu_cfg_callback, NULL, 0, cb_locker_flags,
+ N_("Deprecated. Retained for backward compatibility."),
+ N_("arg: string") },
{ NULL, }
};

Return to:

Send suggestions and report system problems to the System administrator.