X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=main.c;h=801966b3c6b5bfec63c491ca7047baed4b447fad;hp=beade2d38f82b041b79d0baea63b6bee46ef2242;hb=4f8cd7c03aba20081ae3403ee194ce7e54f224fd;hpb=108f3c7ab59844591f7540347914ea57be5245e2 diff --git a/main.c b/main.c index beade2d..801966b 100644 --- a/main.c +++ b/main.c @@ -15,39 +15,24 @@ #define MAIN_C 1 -#if HAVE_CONFIG_H -# include "config.h" -#endif +#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include - +#include #include - #include - #include +#include #include "mutt.h" -#include "mx.h" +#include "crypt.h" +#include "alias.h" #include "buffy.h" #include "sort.h" -#include #include "keymap.h" #include "mutt_idna.h" -#include "xterm.h" +#include "mutt_sasl.h" #ifdef HAVE_GETOPT_H #include @@ -61,78 +46,27 @@ extern int optind; #endif #ifdef USE_NNTP -#include "nntp/nntp.h" -#endif - -#ifdef USE_LIBESMTP -#include +#include #endif #ifdef USE_HCACHE -#if HAVE_QDBM +#if defined(HAVE_QDBM) #include -#elif HAVE_GDBM +#elif defined(HAVE_GDBM) #include -#elif HAVE_DB4 -#include #endif #endif -#ifdef USE_GNUTLS #include -#endif - -#ifdef CRYPT_BACKEND_GPGME #include -#endif - -#ifdef USE_SSL -#include -#endif static const char *Notice = N_("\ Copyright (C) 1996-2002 Michael R. Elkins and others.\n\ -Madmutt comes with ABSOLUTELY NO WARRANTY; for details type `madmutt -vv'.\n\ -Mutt is free software, and you are welcome to redistribute it\n\ -under certain conditions; type `madmutt -vv' for details.\n"); - -static const char *Copyright_Mutt = N_("\ -Copyright (C) 1996-2004 Michael R. Elkins \n\ -Copyright (C) 1996-2002 Brandon Long \n\ -Copyright (C) 1997-2005 Thomas Roessler \n\ -Copyright (C) 1998-2005 Werner Koch \n\ -Copyright (C) 1999-2005 Brendan Cully \n\ -Copyright (C) 1999-2002 Tommi Komulainen \n\ -Copyright (C) 2000-2002 Edmund Grimley Evans \n"); - -static const char *Copyright_Mutt_NG = N_("\ -Copyright (C) 2005:\n\ - Parts were written/modified by:\n\ - Andreas Krennmair \n\ - Nico Golde \n\ - Rocco Rutte \n\ -\n\ -Lots of others not mentioned here contributed lots of code,\n\ -fixes, and suggestions."); - -static const char* Copyright_GPL_1 = N_("\ -\n\ - This program is free software; you can redistribute it and/or modify\n\ - it under the terms of the GNU General Public License as published by\n\ - the Free Software Foundation; either version 2 of the License, or\n\ - (at your option) any later version.\n"); - -static const char* Copyright_GPL_2 = N_("\ - This program is distributed in the hope that it will be useful,\n\ - but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ - GNU General Public License for more details.\n"); - -static const char* Copyright_GPL_3 = N_("\ - You should have received a copy of the GNU General Public License\n\ - along with this program; if not, write to the Free Software\n\ - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\ -"); +Copyright (C) 2005 The Mutt-ng Team\n\ +Copyright (C) 2006 Pierre Habouzit undation, Inc.\n\ +This is free software. You may redistribute copies of it under the terms of\n\ +the GNU General Public License .\n\ +There is NO WARRANTY, to the extent permitted by law.\n"); void mutt_exit (int code) { @@ -142,7 +76,7 @@ void mutt_exit (int code) static void mutt_usage (void) { - puts (mutt_make_version (1)); + puts (mutt_make_version()); puts _("usage: madmutt [ -nRyzZ ] [ -e ] [ -F ] [ -m ] [ -f ]\n\ @@ -154,16 +88,13 @@ static void mutt_usage (void) madmutt [ -nR ] [ -e ] [ -F ] -T\n\ madmutt [ -nx ] [ -e ] [ -a ] [ -F ] [ -H ] [ -i ] [ -s ] [ -b ] [ -c ] [ ... ]\n\ madmutt [ -n ] [ -e ] [ -F ] -p\n\ - madmutt -v[v]\n\ + madmutt -v\n\ \n\ options:\n\ -A \texpand the given alias\n\ -a \tattach a file to the message\n\ -b
\tspecify a blind carbon-copy (BCC) address\n\ -c
\tspecify a carbon-copy (CC) address"); -#if DEBUG - puts _(" -d \tlog debugging output to ~/.madmuttdebug0"); -#endif puts _("\ -e \tspecify a command to be executed after initialization\n\ -f \tspecify which mailbox to read\n\ @@ -195,11 +126,8 @@ options:\n\ static void show_version (void) { struct utsname uts; -#ifdef USE_LIBESMTP - char buf[STRING]; -#endif - puts (mutt_make_version (1)); + puts (mutt_make_version()); puts (_(Notice)); uname (&uts); @@ -230,58 +158,24 @@ static void show_version (void) stringprep_check_version (NULL), STRINGPREP_VERSION); #endif -#ifdef USE_LIBESMTP - smtp_version (buf, sizeof (buf), 0); - printf (" libESMTP %s\n", buf); -#endif - #ifdef USE_HCACHE -#if HAVE_QDBM +#if defined(HAVE_QDBM) printf (" qdbm %s\n", dpversion); -#elif HAVE_GDBM +#elif defined(HAVE_GDBM) printf (" gdbm %s\n", gdbm_version); -#elif HAVE_DB4 - printf (" DB4 %d.%d.%d\n", DB_VERSION_MAJOR, DB_VERSION_MINOR, - DB_VERSION_PATCH); #endif #endif -#ifdef USE_GNUTLS printf (" gnutls %s\n", LIBGNUTLS_VERSION); -#endif - -#ifdef USE_SSL - printf (" %s\n",OPENSSL_VERSION_TEXT); -#endif - -#ifdef CRYPT_BACKEND_GPGME printf (" gpgme %s\n", GPGME_VERSION); -#endif - puts (_("Compile Options:")); -#ifdef DEBUG - puts (" +DEBUG"); -#else - puts (" -DEBUG"); -#endif - puts ( -#ifdef HOMESPOOL - " +HOMESPOOL " -#else - " -HOMESPOOL " -#endif #ifdef USE_SETGID "+USE_SETGID " #else "-USE_SETGID " #endif -#ifdef USE_DOTLOCK - "+USE_DOTLOCK " -#else - "-USE_DOTLOCK " -#endif #ifdef USE_FCNTL "+USE_FCNTL " #else @@ -304,154 +198,20 @@ static void show_version (void) #else "-USE_NNTP " #endif -#ifdef USE_GSS - "+USE_GSS " -#else - "-USE_GSS " -#endif -#ifdef USE_SSL - "+USE_SSL " -#else - "-USE_SSL " -#endif -#ifdef USE_GNUTLS - "+USE_GNUTLS " -#else - "-USE_GNUTLS " -#endif -#ifdef USE_SASL - "+USE_SASL " -#else - "-USE_SASL " -#endif -#ifdef USE_LIBESMTP - "+USE_LIBESMTP " -#else - "-USE_LIBESMTP " -#endif - "\n " -#ifdef HAVE_REGCOMP - "+HAVE_REGCOMP " -#else - "-HAVE_REGCOMP " -#endif - "\n " -#ifdef HAVE_COLOR - "+HAVE_COLOR " -#else - "-HAVE_COLOR " -#endif -#ifdef HAVE_START_COLOR - "+HAVE_START_COLOR " -#else - "-HAVE_START_COLOR " -#endif -#ifdef HAVE_TYPEAHEAD - "+HAVE_TYPEAHEAD " -#else - "-HAVE_TYPEAHEAD " -#endif -#ifdef HAVE_BKGDSET - "+HAVE_BKGDSET " -#else - "-HAVE_BKGDSET " -#endif - "\n " -#ifdef HAVE_CURS_SET - "+HAVE_CURS_SET " -#else - "-HAVE_CURS_SET " -#endif -#ifdef HAVE_META - "+HAVE_META " -#else - "-HAVE_META " -#endif -#ifdef HAVE_RESIZETERM - "+HAVE_RESIZETERM " -#else - "-HAVE_RESIZETERM " -#endif - ); - - puts ( -#ifdef CRYPT_BACKEND_GPGME - "+CRYPT_BACKEND_GPGME " -#else - "-CRYPT_BACKEND_GPGME " -#endif -#ifdef BUFFY_SIZE - "+BUFFY_SIZE " -#else - "-BUFFY_SIZE " -#endif - "\n " -#ifdef ENABLE_NLS - "+ENABLE_NLS " -#else - "-ENABLE_NLS " -#endif -#ifdef HAVE_WC_FUNCS - "+HAVE_WC_FUNCS " -#else - "-HAVE_WC_FUNCS " -#endif -#ifdef HAVE_LANGINFO_CODESET - "+HAVE_LANGINFO_CODESET " -#else - "-HAVE_LANGINFO_CODESET " -#endif -#ifdef HAVE_LANGINFO_YESEXPR - "+HAVE_LANGINFO_YESEXPR " -#else - "-HAVE_LANGINFO_YESEXPR " -#endif - "\n " -#if HAVE_ICONV - "+HAVE_ICONV " -#else - "-HAVE_ICONV " -#endif -#if ICONV_NONTRANS - "+ICONV_NONTRANS " -#else - "-ICONV_NONTRANS " -#endif -#if HAVE_LIBIDN +#ifdef HAVE_LIBIDN "+HAVE_LIBIDN " #else "-HAVE_LIBIDN " -#endif -#if HAVE_GETSID - "+HAVE_GETSID " -#else - "-HAVE_GETSID " -#endif -#if HAVE_GETADDRINFO - "+HAVE_GETADDRINFO " -#else - "-HAVE_GETADDRINFO " #endif ); puts (_("Built-In Defaults:")); - -#ifdef ISPELL - printf (" +ISPELL=\"%s\"\n", ISPELL); -#else - puts (" -ISPELL"); -#endif - printf (" +SENDMAIL=\"%s\"\n", SENDMAIL); printf (" +MAILPATH=\"%s\"\n", MAILPATH); printf (" +PKGDATADIR=\"%s\"\n", PKGDATADIR); printf (" +PKGDOCDIR=\"%s\"\n", PKGDOCDIR); printf (" +SYSCONFDIR=\"%s\"\n", SYSCONFDIR); -#ifdef MIXMASTER printf (" +MIXMASTER=\"%s\"\n\n", MIXMASTER); -#else - puts (" -MIXMASTER\n"); -#endif puts (_("MadMutt is based on Madmutt wich was based on Mutt before\n")); @@ -481,10 +241,10 @@ static void start_curses (void) keypad (stdscr, TRUE); cbreak (); noecho (); -#if HAVE_TYPEAHEAD +#ifdef HAVE_TYPEAHEAD typeahead (-1); /* simulate smooth scrolling */ #endif -#if HAVE_META +#ifdef HAVE_META meta (stdscr, TRUE); #endif } @@ -498,6 +258,17 @@ static void start_curses (void) #define M_NEWS (1<<5) /* -g and -G */ #endif +__attribute__((format(printf, 1, 0))) +static void mutt_nocurses_error (const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fputc('\n', stderr); +} + int main (int argc, char **argv) { char folder[_POSIX_PATH_MAX] = ""; @@ -518,7 +289,7 @@ int main (int argc, char **argv) int dump_variables = -1; /* initialize random number for tmp file creation */ - srand ((unsigned int) time (NULL)); + srand48((unsigned int) time (NULL)); /* sanity check against stupid administrators */ @@ -527,31 +298,23 @@ int main (int argc, char **argv) exit (1); } -#ifdef ENABLE_NLS - /* FIXME what about init.c:1439 ? */ setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, MUTTLOCALEDIR); textdomain (PACKAGE); -#endif - setlocale (LC_CTYPE, ""); - mutt_error = mutt_nocurses_error; - mutt_message = mutt_nocurses_error; - SRAND (time (NULL)); + mutt_error = mutt_message = mutt_nocurses_error; + srand48 (time (NULL)); umask (077); p_clear(Options, countof(Options)); p_clear(QuadOptions, countof(QuadOptions)); + while ((i = getopt(argc, argv, "A:a:b:F:f:c:e:H:s:i:hm:npQ:RTtvyzZ" #ifdef USE_NNTP - while ((i = - getopt (argc, argv, - "A:a:b:F:f:c:d:e:g:GH:s:i:hm:npQ:RTtvyzZ")) != EOF) -#else - while ((i = - getopt (argc, argv, "A:a:b:F:f:c:d:e:H:s:i:hm:npQ:RTtvyzZ")) != EOF) + "g:G" #endif + )) >= 0) switch (i) { case 'A': alias_queries = mutt_add_list (alias_queries, optarg); @@ -586,17 +349,6 @@ int main (int argc, char **argv) msg->env->cc = rfc822_parse_adrlist (msg->env->cc, optarg); break; - case 'd': - { - char buf[LONG_STRING]; - int level = atoi (optarg); - - snprintf (buf, sizeof (buf), "set debug_level=%d", level); - commands = mutt_add_list (commands, buf); - debug_setlevel (level); - } - break; - case 't': dump_variables = 2; break; @@ -676,20 +428,8 @@ int main (int argc, char **argv) mutt_usage (); } - switch (version) { - case 0: - break; - case 1: + if (version) { show_version (); - break; - default: - puts (mutt_make_version (1)); - puts (_(Copyright_Mutt)); - puts (_(Copyright_Mutt_NG)); - puts (_(Copyright_GPL_1)); - puts (_(Copyright_GPL_2)); - puts (_(Copyright_GPL_3)); - exit (0); } /* Check for a batch send. */ @@ -704,13 +444,9 @@ int main (int argc, char **argv) start_curses (); /* set defaults and read init files */ - mx_init (); mutt_init (flags & M_NOSYSRC, commands); string_list_wipe(&commands); - /* Initialize crypto */ - crypt_init (); - if (queries) return mutt_query_variables (queries); if (dump_variables > 0) @@ -721,12 +457,12 @@ int main (int argc, char **argv) address_t *a; for (; alias_queries; alias_queries = alias_queries->next) { - if ((a = alias_lookup(Aliases, alias_queries->data))) { + if ((a = address_list_dup(alias_lookup(alias_queries->data)))) { /* output in machine-readable form */ mutt_addrlist_to_idna (a, NULL); mutt_write_address_list (a, stdout, 0, 0); - } - else { + address_list_wipe(&a); + } else { rv = 1; printf ("%s\n", alias_queries->data); } @@ -776,6 +512,7 @@ int main (int argc, char **argv) char buf[LONG_STRING]; char *tempfile = NULL, *infile = NULL; char *bodytext = NULL; + FILE *fout; if (!option (OPTNOCURSES)) mutt_flushinp (); @@ -830,22 +567,20 @@ int main (int argc, char **argv) else fin = NULL; - mutt_mktemp (buf); - tempfile = m_strdup(buf); - if (draftFile) msg->env = mutt_read_rfc822_header (fin, NULL, 1, 0); /* is the following if still needed? */ - if (tempfile) { - FILE *fout; + fout = m_tempfile(buf, sizeof(buf), NONULL(mod_core.tmpdir), NULL); + tempfile = m_strdup(buf); - if ((fout = safe_fopen (tempfile, "w")) == NULL) { + if (tempfile) { + if (!fout) { if (!option (OPTNOCURSES)) mutt_endwin (NULL); perror (tempfile); - fclose (fin); + m_fclose(&fin); p_delete(&tempfile); exit (1); } @@ -853,9 +588,9 @@ int main (int argc, char **argv) mutt_copy_stream (fin, fout); else if (bodytext) fputs (bodytext, fout); - fclose (fout); + m_fclose(&fout); if (fin && fin != stdin) - fclose (fin); + m_fclose(&fin); } } @@ -907,16 +642,16 @@ int main (int argc, char **argv) mutt_endwin (Errorbuf); exit (1); } - } - else + } else #endif - if (!Incoming) { + if (!Incoming.len) { mutt_endwin _("No incoming mailboxes defined."); exit (1); } folder[0] = 0; - mutt_select_file (folder, sizeof (folder), M_SEL_FOLDER | M_SEL_BUFFY); + mutt_select_file(folder, sizeof(folder), M_SEL_FOLDER | M_SEL_BUFFY, + NULL, NULL); if (!folder[0]) { mutt_endwin (NULL); exit (0); @@ -931,8 +666,7 @@ int main (int argc, char **argv) unset_option (OPTNEWS); nntp_expand_path (folder, sizeof (folder), &CurrentNewsSrv->conn->account); - } - else + } else #endif mutt_expand_path (folder, sizeof (folder)); @@ -959,12 +693,14 @@ int main (int argc, char **argv) || !explicit_folder) { mutt_index_menu (); if (option (OPTXTERMSETTITLES)) - mutt_xterm_set_title (NONULL (XtermLeave)); + printf("\033]2;%s\007", NONULL(XtermLeave)); if (Context) p_delete(&Context); } mutt_endwin (Errorbuf); } + luaM_shutdown(); + mutt_sasl_shutdown(); exit (0); }