#include <lib-lib/lib-lib.h>
#include <sys/utsname.h>
+#include <lib-lua/lib-lua.h>
#include <lib-sys/unix.h>
#include <lib-sys/mutt_ssl.h>
-
#include <lib-ui/curses.h>
#include <lib-ui/history.h>
#include <lib-mx/mx.h>
+#include <lib-crypt/crypt.h>
#include "mutt.h"
#include "keymap.h"
#include "charset.h"
#include "thread.h"
-#include <lib-crypt/crypt.h>
#include "mutt_idna.h"
#if defined (USE_LIBESMTP) && (defined (USE_SSL) || defined (USE_GNUTLS))
return 0;
}
-static int parse_list (BUFFER * buf, BUFFER * s,
- unsigned long data __attribute__ ((unused)),
- BUFFER * err __attribute__ ((unused)))
+static int parse_list(BUFFER * buf, BUFFER * s, unsigned long data,
+ BUFFER * err __attribute__ ((unused)))
{
do {
mutt_extract_token (buf, s, 0);
unsigned long data __attribute__ ((unused)),
BUFFER * err __attribute__ ((unused)))
{
- alias_t *tmp, *last = NULL;
-
- do {
- mutt_extract_token (buf, s, 0);
-
- if (m_strcmp("*", buf->data) == 0) {
- if (CurrentMenu == MENU_ALIAS) {
- for (tmp = Aliases; tmp; tmp = tmp->next)
- tmp->del = 1;
- set_option (OPTFORCEREDRAWINDEX);
- }
- else
- alias_list_wipe(&Aliases);
- break;
- }
- else
- for (tmp = Aliases; tmp; tmp = tmp->next) {
- if (m_strcasecmp(buf->data, tmp->name) == 0) {
- if (CurrentMenu == MENU_ALIAS) {
- tmp->del = 1;
- set_option (OPTFORCEREDRAWINDEX);
+ alias_t *tmp, **last;
+
+ do {
+ mutt_extract_token (buf, s, 0);
+
+ if (!m_strcmp("*", buf->data) == 0) {
+ if (CurrentMenu == MENU_ALIAS) {
+ for (tmp = Aliases; tmp; tmp = tmp->next)
+ tmp->del = 1;
+ set_option(OPTFORCEREDRAWINDEX);
+ } else {
+ alias_list_wipe(&Aliases);
+ }
break;
- }
+ }
- if (last)
- last->next = tmp->next;
- else
- Aliases = tmp->next;
- tmp->next = NULL;
- alias_list_wipe(&tmp);
- break;
+ last = &Aliases;
+ for (last = &Aliases; *last; last = &(*last)->next) {
+ if (!m_strcasecmp(buf->data, (*last)->name)) {
+ if (CurrentMenu == MENU_ALIAS) {
+ (*last)->del = 1;
+ set_option (OPTFORCEREDRAWINDEX);
+ } else {
+ tmp = alias_list_pop(last);
+ alias_delete(&tmp);
+ }
+ break;
+ }
}
- last = tmp;
- }
- }
- while (MoreArgs (s));
- return 0;
+ } while (MoreArgs(s));
+
+ return 0;
}
static int parse_alias (BUFFER * buf, BUFFER * s,
unsigned long data __attribute__ ((unused)),
BUFFER * err)
{
- alias_t *tmp = Aliases;
- alias_t *last = NULL;
- char *estr = NULL;
+ alias_t **last;
+ char *estr = NULL;
- if (!MoreArgs (s)) {
- m_strcpy(err->data, err->dsize, _("alias: no address"));
- return (-1);
- }
+ if (!MoreArgs (s)) {
+ m_strcpy(err->data, err->dsize, _("alias: no address"));
+ return (-1);
+ }
- mutt_extract_token (buf, s, 0);
+ mutt_extract_token (buf, s, 0);
- /* check to see if an alias with this name already exists */
- for (; tmp; tmp = tmp->next) {
- if (!m_strcasecmp(tmp->name, buf->data))
- break;
- last = tmp;
- }
+ /* check to see if an alias with this name already exists */
+ for (last = &Aliases; *last; last = &(*last)->next) {
+ if (!m_strcasecmp((*last)->name, buf->data))
+ break;
+ }
- if (!tmp) {
- /* create a new alias */
- tmp = alias_new();
- tmp->name = m_strdup(buf->data);
- /* give the main addressbook code a chance */
- if (CurrentMenu == MENU_ALIAS)
- set_option (OPTMENUCALLER);
- }
- else {
- /* override the previous value */
- address_list_wipe(&tmp->addr);
- if (CurrentMenu == MENU_ALIAS)
- set_option (OPTFORCEREDRAWINDEX);
- }
+ if (!*last) {
+ /* create a new alias */
+ *last = alias_new();
+ (*last)->name = m_strdup(buf->data);
+ /* give the main addressbook code a chance */
+ if (CurrentMenu == MENU_ALIAS)
+ set_option (OPTMENUCALLER);
+ } else {
+ /* override the previous value */
+ address_list_wipe(&(*last)->addr);
+ if (CurrentMenu == MENU_ALIAS)
+ set_option (OPTFORCEREDRAWINDEX);
+ }
- mutt_extract_token (buf, s,
- M_TOKEN_QUOTE | M_TOKEN_SPACE | M_TOKEN_SEMICOLON);
- tmp->addr = mutt_parse_adrlist (tmp->addr, buf->data);
- if (last)
- last->next = tmp;
- else
- Aliases = tmp;
- if (mutt_addrlist_to_idna (tmp->addr, &estr)) {
- snprintf (err->data, err->dsize,
- _("Warning: Bad IDN '%s' in alias '%s'.\n"), estr, tmp->name);
- p_delete(&estr);
- return -1;
- }
+ mutt_extract_token(buf, s, M_TOKEN_QUOTE | M_TOKEN_SPACE);
+ (*last)->addr = mutt_parse_adrlist((*last)->addr, buf->data);
+ if (mutt_addrlist_to_idna((*last)->addr, &estr)) {
+ snprintf (err->data, err->dsize,
+ _("Warning: Bad IDN '%s' in alias '%s'.\n"), estr, (*last)->name);
+ p_delete(&estr);
+ return -1;
+ }
- return 0;
+ return 0;
}
static int
-parse_unmy_hdr (BUFFER * buf, BUFFER * s,
- unsigned long data __attribute__ ((unused)),
- BUFFER * err __attribute__ ((unused)))
+parse_unmy_hdr(BUFFER * buf, BUFFER * s,
+ unsigned long data __attribute__ ((unused)),
+ BUFFER * err __attribute__ ((unused)))
{
- string_list_t *last = NULL;
- string_list_t *tmp = UserHeader;
- string_list_t *ptr;
- ssize_t l;
+ do {
+ mutt_extract_token (buf, s, 0);
- do {
- mutt_extract_token (buf, s, 0);
- if (m_strcmp("*", buf->data) == 0)
- string_list_wipe(&UserHeader);
- else {
- tmp = UserHeader;
- last = NULL;
-
- l = m_strlen(buf->data);
- if (buf->data[l - 1] == ':')
- l--;
-
- while (tmp) {
- if (ascii_strncasecmp (buf->data, tmp->data, l) == 0
- && tmp->data[l] == ':') {
- ptr = tmp;
- if (last)
- last->next = tmp->next;
- else
- UserHeader = tmp->next;
- tmp = tmp->next;
- ptr->next = NULL;
- string_list_wipe(&ptr);
- }
- else {
- last = tmp;
- tmp = tmp->next;
+ if (!m_strcmp("*", buf->data)) {
+ string_list_wipe(&UserHeader);
+ } else {
+ string_list_t **last = &UserHeader;
+ ssize_t l = m_strlen(buf->data);
+
+ if (buf->data[l - 1] == ':')
+ l--;
+
+ while (*last) {
+ if (!ascii_strncasecmp(buf->data, (*last)->data, l)
+ && (*last)->data[l] == ':')
+ {
+ string_list_t *tmp = string_list_pop(last);
+ string_item_delete(&tmp);
+ } else {
+ last = &(*last)->next;
+ }
+ }
}
- }
- }
- }
- while (MoreArgs (s));
- return 0;
+ } while (MoreArgs(s));
+
+ return 0;
}
static int parse_my_hdr (BUFFER * buf, BUFFER * s, unsigned long data __attribute__ ((unused)),
every call to this function.
err where to write error messages */
-int mutt_parse_rc_line ( /* const */ char *line, BUFFER * token, BUFFER * err)
+int mutt_parse_rc_line (const char *line, BUFFER * token, BUFFER * err)
{
int i, r = -1;
BUFFER expn;
From = rfc822_parse_adrlist (NULL, p);
charset_initialize();
+ mlua_initialize();
/* Set standard defaults */
hash_map (ConfigOptions, mutt_set_default, 0);
exit (1);
}
+ /* LUA {{{ */
+ snprintf(buffer, sizeof(buffer), "%s/.madmutt.lua", NONULL(Homedir));
+ if (access(buffer, F_OK) < 0)
+ snprintf(buffer, sizeof(buffer), "%s/.madmutt/cfg.lua", NONULL(Homedir));
+ if (!access(buffer, F_OK)) {
+ need_pause = mlua_wrap(mutt_error, mlua_dofile(buffer));
+ }
+ /* }}} */
+
if (mutt_execute_commands (commands) != 0)
need_pause = 1;