static void rx_to_string (char* dst, ssize_t dstlen, struct option_t* option);
static void magic_to_string (char* dst, ssize_t dstlen, struct option_t* option);
static void addr_to_string (char* dst, ssize_t dstlen, struct option_t* option);
-static void user_to_string (char* dst, ssize_t dstlen, struct option_t* option);
static void sys_to_string (char* dst, ssize_t dstlen, struct option_t* option);
/* protos for config type handles: convert to value from string */
char* errbuf, ssize_t errlen);
static int addr_from_string (struct option_t* dst, const char* val,
char* errbuf, ssize_t errlen);
-static int user_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
static struct {
unsigned short type;
* but must define it as DT_ is used for indexing */
{ DT_SYN, NULL, NULL },
{ DT_ADDR, addr_to_string, addr_from_string },
- { DT_USER, user_to_string, user_from_string },
{ DT_SYS, sys_to_string, NULL },
};
NONULL (*((char**) option->data)));
}
-static void user_to_string (char* dst, ssize_t dstlen,
- struct option_t* option) {
- snprintf (dst, dstlen, "%s=\"%s\"", option->option,
- NONULL (((char*) option->data)));
-}
-
static void sys_to_string (char* dst, ssize_t dstlen,
struct option_t* option) {
char *val = NULL, *t = NULL;
return (1);
}
-static int user_from_string (struct option_t* dst, const char* val,
- char* errbuf __attribute__ ((unused)), ssize_t errlen __attribute__ ((unused))) {
- /* if dst == NULL, we may get here in case the user did unset it,
- * see parse_set() where item is free()'d before coming here; so
- * just silently ignore it */
- if (!dst)
- return (1);
- if (m_strlen((char*) dst->data) == 0)
- dst->data = (unsigned long) m_strdup(val);
- else {
- char* s = (char*) dst->data;
- m_strreplace(&s, val);
- }
- if (m_strlen(dst->init) == 0)
- dst->init = m_strdup((char*) dst->data);
- return (1);
-}
-
static void quad_to_string (char* dst, ssize_t dstlen,
struct option_t* option) {
const char *vals[] = { "no", "yes", "ask-no", "ask-yes" };
return (option);
}
-/* creates new option_t* of type DT_USER for $user_ var */
-static struct option_t* add_user_option (const char* name) {
- return (add_option (name, NULL, DT_USER, 1));
-}
-
-/* free()'s option_t* */
-static void del_option (void* p) {
- struct option_t *ptr = (struct option_t*) p;
- char* s = (char*) ptr->data;
- p_delete(&ptr->option);
- p_delete(&s);
- p_delete(&ptr->init);
- p_delete(&ptr);
-}
-
static int init_expand (char** dst, struct option_t* src) {
BUFFER token, in;
ssize_t len = 0;
option = newopt;
}
- /* see if we need to add $user_ var */
- if (!option && m_strncmp("user_", tmp->data, 5) == 0) {
- /* there's no option named like this yet so only add one
- * if the action isn't any of: reset, unset, query */
- if (!(reset || unset || query || *s->dptr != '=')) {
- option = add_user_option (tmp->data);
- hash_insert (ConfigOptions, option->option, option, 0);
- }
- }
-
if (!option && !(reset && m_strcmp("all", tmp->data) == 0)) {
snprintf (err->data, err->dsize, _("%s: unknown variable"), tmp->data);
return (-1);
DTYPE (option->type) == DT_NUM ||
DTYPE (option->type) == DT_SORT ||
DTYPE (option->type) == DT_RX ||
- DTYPE (option->type) == DT_USER ||
DTYPE (option->type) == DT_SYS) {
/* XXX maybe we need to get unset into handlers? */
if (DTYPE (option->type) == DT_STR ||
DTYPE (option->type) == DT_PATH ||
DTYPE (option->type) == DT_ADDR ||
- DTYPE (option->type) == DT_USER ||
DTYPE (option->type) == DT_SYS) {
if (unset) {
CHECK_PAGER;
break;
} else if (DTYPE (option->type) == DT_ADDR)
address_list_wipe((address_t **) option->data);
- else if (DTYPE (option->type) == DT_USER)
- /* to unset $user_ means remove */
- hash_delete (ConfigOptions, option->option,
- option, del_option);
else
p_delete((void **)(void *)&option->data);
break;
err.data = error;
err.dsize = sizeof(error);
- /* use 3*sizeof(muttvars) instead of 2*sizeof()
- * to have some room for $user_ vars */
- ConfigOptions = hash_create (sizeof(MuttVars) * 3);
+ ConfigOptions = hash_create (sizeof(MuttVars) * 2);
for (i = 0; MuttVars[i].option; i++) {
if (DTYPE (MuttVars[i].type) != DT_SYS)
hash_insert (ConfigOptions, MuttVars[i].option, &MuttVars[i], 0);