#include "charset.h"
#include "thread.h"
#include "mutt_idna.h"
-
-#if defined (USE_LIBESMTP) && (defined (USE_SSL) || defined (USE_GNUTLS))
#include "mutt_libesmtp.h"
-#endif
-
#include "alias.h"
#include "init.h"
{ NULL, NULL }
};
-/* protos for config type handles: convert value to string */
-static void bool_to_string (char* dst, ssize_t dstlen, struct option_t* option);
-static void num_to_string (char* dst, ssize_t dstlen, struct option_t* option);
-static void str_to_string (char* dst, ssize_t dstlen, struct option_t* option);
-static void quad_to_string (char* dst, ssize_t dstlen, struct option_t* option);
-static void sort_to_string (char* dst, ssize_t dstlen, struct option_t* option);
-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);
-
-/* protos for config type handles: convert to value from string */
-static int bool_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
-static int num_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
-static int str_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
-static int path_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
-static int quad_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
-static int sort_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
-static int rx_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
-static int magic_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
-static int addr_from_string (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
-
-static struct {
- unsigned short type;
- void (*opt_tostr) (char* dst, ssize_t dstlen, struct option_t* option);
- int (*opt_fromstr) (struct option_t* dst, const char* val,
- char* errbuf, ssize_t errlen);
-} FuncTable[] = {
- { 0, NULL, NULL }, /* there's no DT_ type with 0 */
- { DT_BOOL, bool_to_string, bool_from_string },
- { DT_NUM, num_to_string, num_from_string },
- { DT_STR, str_to_string, str_from_string },
- { DT_PATH, str_to_string, path_from_string },
- { DT_QUAD, quad_to_string, quad_from_string },
- { DT_SORT, sort_to_string, sort_from_string },
- { DT_RX, rx_to_string, rx_from_string },
- { DT_MAGIC, magic_to_string, magic_from_string },
- /* synonyms should be resolved already so we don't need this
- * but must define it as DT_ is used for indexing */
- { DT_SYN, NULL, NULL },
- { DT_ADDR, addr_to_string, addr_from_string },
-};
-
static void bool_to_string (char* dst, ssize_t dstlen,
struct option_t* option) {
snprintf (dst, dstlen, "%s=%s", option->option,
return (1);
}
+static struct {
+ unsigned short type;
+ void (*opt_tostr) (char* dst, ssize_t dstlen, struct option_t* option);
+ int (*opt_fromstr) (struct option_t* dst, const char* val,
+ char* errbuf, ssize_t errlen);
+} FuncTable[] = {
+ { 0, NULL, NULL }, /* there's no DT_ type with 0 */
+ { DT_BOOL, bool_to_string, bool_from_string },
+ { DT_NUM, num_to_string, num_from_string },
+ { DT_STR, str_to_string, str_from_string },
+ { DT_PATH, str_to_string, path_from_string },
+ { DT_QUAD, quad_to_string, quad_from_string },
+ { DT_SORT, sort_to_string, sort_from_string },
+ { DT_RX, rx_to_string, rx_from_string },
+ { DT_MAGIC, magic_to_string, magic_from_string },
+ { DT_ADDR, addr_to_string, addr_from_string },
+};
+
+
int mutt_option_value (const char* val, char* dst, ssize_t dstlen) {
struct option_t* option = NULL;
char* tmp = NULL, *t = NULL;
/* not reached */
}
-static int parse_unignore (BUFFER * buf, BUFFER * s,
- unsigned long data __attribute__ ((unused)),
- BUFFER * err __attribute__ ((unused)))
-{
- do {
- mutt_extract_token (buf, s, 0);
-
- /* don't add "*" to the unignore list */
- if (m_strcmp(buf->data, "*")) {
- string_list_add(&UnIgnore, buf->data);
- string_list_remove(&Ignore, buf->data);
- } else {
- string_list_wipe(&Ignore);
- }
- } while (MoreArgs (s));
-
- return 0;
-}
-
-static int parse_ignore (BUFFER * buf, BUFFER * s,
- unsigned long data __attribute__ ((unused)),
- BUFFER * err __attribute__ ((unused)))
-{
- do {
- mutt_extract_token (buf, s, 0);
- if (m_strcmp(buf->data, "*")) {
- string_list_remove(&UnIgnore, buf->data);
- } else {
- string_list_wipe(&UnIgnore);
- }
- string_list_add(&Ignore, buf->data);
- } while (MoreArgs(s));
- return 0;
-}
-
-static int parse_list(BUFFER * buf, BUFFER * s, unsigned long data,
- BUFFER * err __attribute__ ((unused)))
-{
- do {
- mutt_extract_token (buf, s, 0);
- string_list_add ((string_list_t **) data, buf->data);
- } while (MoreArgs(s));
- return 0;
-}
-
-static int parse_unlist (BUFFER * buf, BUFFER * s, unsigned long data,
- BUFFER * err __attribute__ ((unused)))
-{
- do {
- mutt_extract_token (buf, s, 0);
- /*
- * Check for deletion of entire list
- */
- if (!m_strcmp(buf->data, "*")) {
- string_list_wipe((string_list_t **) data);
- break;
- }
- string_list_remove((string_list_t **) data, buf->data);
- }
- while (MoreArgs (s));
-
- return 0;
-}
-
/* always wise to do what someone else did before */
static void _attachments_clean (void) {
int i;
char buf[LONG_STRING];
struct option_t *ptr = p;
- if (DTYPE(ptr->type) == DT_SYN) {
- if (!more)
- return;
- ptr = hash_find(ConfigOptions, (const char *)ptr->data);
- }
if (!ptr || *ptr->init || !FuncTable[DTYPE (ptr->type)].opt_fromstr)
return;
p_delete(dst);
- if (DTYPE(src->type) == DT_STR ||
- DTYPE(src->type) == DT_PATH) {
+ if (DTYPE(src->type) == DT_STR || DTYPE(src->type) == DT_PATH) {
/* only expand for string as it's the only place where
* we want to expand vars right now */
if (src->init && *src->init) {
struct option_t* ptr = (struct option_t*) p;
char* init = NULL;
- if (DTYPE (ptr->type) == DT_SYN) {
- if (!more)
- return;
- ptr = hash_find (ConfigOptions, (char*) ptr->data);
- }
if (!ptr)
return;
if (FuncTable[DTYPE (ptr->type)].opt_fromstr) {
/* get the variable name */
mutt_extract_token (tmp, s, M_TOKEN_EQUAL);
-
- /* resolve synonyms */
- if ((option = hash_find (ConfigOptions, tmp->data)) != NULL &&
- DTYPE (option->type == DT_SYN))
- {
- struct option_t* newopt = hash_find (ConfigOptions, (char*) option->data);
- syn_t* syn = syn_new();
- syn->f = m_strdup(CurRCFile);
- syn->l = CurRCLine;
- syn->n = newopt;
- syn->o = option;
- syn_list_push(&Synonyms, syn);
- option = newopt;
- }
-
+ option = hash_find(ConfigOptions, tmp->data);
if (!option && !(reset && m_strcmp("all", tmp->data) == 0)) {
snprintf (err->data, err->dsize, _("%s: unknown variable"), tmp->data);
return (-1);
struct option_t *option = MuttVars + i;
char buf[LONG_STRING];
- if (DTYPE(option->type) == DT_SYN)
- continue;
-
if (!full) {
mutt_option_value(option->option, buf, sizeof(buf));
if (!m_strcmp(buf, option->init))