From: Pierre Habouzit Date: Thu, 16 Nov 2006 23:50:51 +0000 (+0100) Subject: sort out some prototypes, put them where they belong. X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=commitdiff_plain;h=230399f9632c37b66c1c117a17e8327eae6b3235 sort out some prototypes, put them where they belong. rework lib-lib, have a public lib-lib/lib-lib.h header that will be our main library we always want to have. Signed-off-by: Pierre Habouzit --- diff --git a/account.c b/account.c index dc12bc6..f13831e 100644 --- a/account.c +++ b/account.c @@ -13,12 +13,7 @@ # include "config.h" #endif -#include -#include -#include -#include -#include - +#include #include #include "mutt.h" diff --git a/account.h b/account.h index a838b67..d9b5a55 100644 --- a/account.h +++ b/account.h @@ -12,7 +12,7 @@ #ifndef _MUTT_ACCOUNT_H_ #define _MUTT_ACCOUNT_H_ 1 -#include +#include /* account types */ enum { diff --git a/alias.c b/alias.c index 4602176..907e743 100644 --- a/alias.c +++ b/alias.c @@ -32,13 +32,7 @@ #include #include -#include -#include -#include -#include -#include -#include -#include +#include #include @@ -381,7 +375,8 @@ address_t *mutt_expand_aliases(address_t *a) t = mutt_expand_aliases_r(a, &expn); string_list_wipe(&expn); - return mutt_remove_duplicates(t); + address_list_uniq(t); + return t; } void mutt_expand_aliases_env(ENVELOPE *env) diff --git a/alias.h b/alias.h index e5d081c..8a4fad8 100644 --- a/alias.h +++ b/alias.h @@ -27,7 +27,7 @@ #ifndef _MUTT_ALIAS_H #define _MUTT_ALIAS_H -#include +#include #include typedef struct alias_t { diff --git a/attach.c b/attach.c index 0b497ef..a66665c 100644 --- a/attach.c +++ b/attach.c @@ -21,11 +21,7 @@ #include #include -#include -#include -#include -#include -#include +#include #include diff --git a/browser.c b/browser.c index 244df97..0db6801 100644 --- a/browser.c +++ b/browser.c @@ -21,11 +21,7 @@ #include #include -#include -#include -#include -#include -#include +#include #include #include diff --git a/buffy.c b/buffy.c index 5befe84..2ada9b4 100644 --- a/buffy.c +++ b/buffy.c @@ -22,9 +22,7 @@ #include #include -#include -#include -#include +#include #include #include diff --git a/cflags.mk b/cflags.mk index 911a0b4..a734def 100644 --- a/cflags.mk +++ b/cflags.mk @@ -45,3 +45,5 @@ CFLAGS += -Wpointer-arith CFLAGS += -Wredundant-decls # warn if the format string is not a string literal #CFLAGS += -Wformat-nonliteral +# missing prototypes +CFLAGS += -Wmissing-prototypes diff --git a/charset.c b/charset.c index 90a7307..8e79d13 100644 --- a/charset.c +++ b/charset.c @@ -43,10 +43,7 @@ # include #endif -#include -#include -#include -#include +#include #include "mutt.h" #include "charset.h" diff --git a/commands.c b/commands.c index 6a05985..280a3fd 100644 --- a/commands.c +++ b/commands.c @@ -21,10 +21,7 @@ #include #include -#include -#include -#include -#include +#include #include diff --git a/compose.c b/compose.c index f6039fb..d93dbfd 100644 --- a/compose.c +++ b/compose.c @@ -22,11 +22,7 @@ #include #include -#include -#include -#include -#include -#include +#include #include diff --git a/compress.c b/compress.c index 72ad440..ed5da3e 100644 --- a/compress.c +++ b/compress.c @@ -12,10 +12,7 @@ #include #include -#include -#include -#include -#include +#include #include #include diff --git a/copy.c b/copy.c index 661b389..94d5d28 100644 --- a/copy.c +++ b/copy.c @@ -16,11 +16,7 @@ #include #include -#include -#include -#include -#include -#include +#include #include diff --git a/dotlock.c b/dotlock.c index e196464..118f531 100644 --- a/dotlock.c +++ b/dotlock.c @@ -59,7 +59,7 @@ extern int snprintf (char *, size_t, const char *, ...); # endif -#include +#include static int DotlockFlags; static int Retry = MAXLOCKATTEMPT; diff --git a/editmsg.c b/editmsg.c index f511749..123ce7e 100644 --- a/editmsg.c +++ b/editmsg.c @@ -13,9 +13,7 @@ # include "config.h" #endif -#include -#include -#include +#include #include "mutt.h" #include "copy.h" diff --git a/flags.c b/flags.c index 1babc0d..232508a 100644 --- a/flags.c +++ b/flags.c @@ -11,7 +11,7 @@ # include "config.h" #endif -#include +#include #include #include diff --git a/from.c b/from.c index 07b9013..f71e8a0 100644 --- a/from.c +++ b/from.c @@ -14,9 +14,7 @@ #include #include -#include -#include -#include +#include #include "mutt.h" diff --git a/globals.h b/globals.h index f404850..aaca563 100644 --- a/globals.h +++ b/globals.h @@ -9,9 +9,7 @@ #ifndef _GLOBALS_H #define _GLOBALS_H -#include -#include -#include +#include #include "lib/list.h" diff --git a/handler.c b/handler.c index 47cbaca..26d1a99 100644 --- a/handler.c +++ b/handler.c @@ -18,11 +18,7 @@ #include #include -#include -#include -#include -#include -#include +#include #include #include diff --git a/hcache.c b/hcache.c index a757415..3902812 100644 --- a/hcache.c +++ b/hcache.c @@ -40,8 +40,7 @@ #include #endif -#include -#include +#include #include #include diff --git a/headers.c b/headers.c index d94019d..058ec94 100644 --- a/headers.c +++ b/headers.c @@ -15,9 +15,8 @@ #include #include -#include -#include -#include +#include +#include #include "mutt.h" #include "alias.h" diff --git a/help.c b/help.c index a0d85c8..4bd1b01 100644 --- a/help.c +++ b/help.c @@ -18,10 +18,7 @@ #include #include -#include -#include -#include -#include +#include #include @@ -101,7 +98,7 @@ static int print_macro (FILE * f, int maxwidth, const char **macro) wc = CharsetReplacement; } /* glibc-2.1.3's wcwidth() returns 1 for unprintable chars! */ - if (IsWPrint (wc) && (w = wcwidth (wc)) >= 0) { + if (iswprint(wc) && (w = wcwidth (wc)) >= 0) { if (w > n) break; n -= w; diff --git a/hook.c b/hook.c index aa0d478..0a1084c 100644 --- a/hook.c +++ b/hook.c @@ -17,12 +17,8 @@ #include #include -#include -#include -#include -#include -#include -#include +#include +#include #include "mutt.h" #include "alias.h" diff --git a/imap/auth.c b/imap/auth.c index d4b4efd..8fae85b 100644 --- a/imap/auth.c +++ b/imap/auth.c @@ -15,10 +15,7 @@ # include "config.h" #endif -#include - -#include -#include +#include #include "mutt.h" #include "imap_private.h" diff --git a/imap/auth_anon.c b/imap/auth_anon.c index 16ef189..7ae029f 100644 --- a/imap/auth_anon.c +++ b/imap/auth_anon.c @@ -17,7 +17,7 @@ #include "imap_private.h" #include "auth.h" -#include +#include /* this is basically a stripped-down version of the cram-md5 method. */ imap_auth_res_t imap_auth_anon (IMAP_DATA * idata, const char *method __attribute__ ((unused))) diff --git a/imap/auth_cram.c b/imap/auth_cram.c index 7728526..9ef4bb8 100644 --- a/imap/auth_cram.c +++ b/imap/auth_cram.c @@ -20,7 +20,7 @@ #define MD5_BLOCK_LEN 64 #define MD5_DIGEST_LEN 16 -#include +#include #include /* forward declarations */ diff --git a/imap/auth_gss.c b/imap/auth_gss.c index a014a02..a2783f9 100644 --- a/imap/auth_gss.c +++ b/imap/auth_gss.c @@ -15,7 +15,7 @@ #ifdef USE_GSS -#include +#include #include diff --git a/imap/auth_login.c b/imap/auth_login.c index f3eaae0..2770331 100644 --- a/imap/auth_login.c +++ b/imap/auth_login.c @@ -13,7 +13,7 @@ # include "config.h" #endif -#include +#include #include "mutt.h" #include "imap_private.h" diff --git a/imap/auth_sasl.c b/imap/auth_sasl.c index 8544352..20a39b9 100644 --- a/imap/auth_sasl.c +++ b/imap/auth_sasl.c @@ -13,16 +13,13 @@ # include "config.h" #endif -#include -#include +#include #include "mutt.h" #include "mutt_sasl.h" #include "imap_private.h" #include "auth.h" -#include - #include #include diff --git a/imap/browse.c b/imap/browse.c index 7cff939..96eb8b9 100644 --- a/imap/browse.c +++ b/imap/browse.c @@ -17,10 +17,7 @@ #include #include -#include -#include -#include -#include +#include #include diff --git a/imap/command.c b/imap/command.c index 53132f7..e53d378 100644 --- a/imap/command.c +++ b/imap/command.c @@ -16,9 +16,7 @@ # include "config.h" #endif -#include -#include -#include +#include #include "mutt.h" #include "message.h" diff --git a/imap/imap.c b/imap/imap.c index 9f356ba..da965d9 100644 --- a/imap/imap.c +++ b/imap/imap.c @@ -15,10 +15,14 @@ # include "config.h" #endif -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include + +#include #include "mutt.h" #include "mx.h" @@ -32,15 +36,6 @@ #endif #include "buffy.h" -#include - -#include -#include -#include -#include -#include -#include - /* imap forward declarations */ static int imap_get_delim (IMAP_DATA * idata); static char *imap_get_flags (string_list_t ** hflags, char *s); diff --git a/imap/message.c b/imap/message.c index 8de66df..466d2dc 100644 --- a/imap/message.c +++ b/imap/message.c @@ -17,10 +17,7 @@ #include #include -#include -#include -#include -#include +#include #include @@ -34,9 +31,6 @@ #include "pgp.h" #endif -#include -#include - #if HAVE_STDINT_H #include #elif HAVE_INTTYPES_H diff --git a/imap/mx_imap.c b/imap/mx_imap.c index 1c4358f..0ee9d63 100644 --- a/imap/mx_imap.c +++ b/imap/mx_imap.c @@ -9,10 +9,7 @@ #include -#include -#include -#include -#include +#include #include "mutt.h" #include "imap_private.h" @@ -20,8 +17,6 @@ #include "mx.h" #include "mx_imap.h" - - int imap_is_magic (const char* path, struct stat* st __attribute__ ((unused))) { url_scheme_t s; if (!path || !*path) diff --git a/imap/utf7.c b/imap/utf7.c index 08bc14b..d1419e3 100644 --- a/imap/utf7.c +++ b/imap/utf7.c @@ -11,7 +11,7 @@ # include "config.h" #endif -#include +#include #include "mutt.h" #include "charset.h" diff --git a/imap/util.c b/imap/util.c index caf1616..cce8594 100644 --- a/imap/util.c +++ b/imap/util.c @@ -13,16 +13,14 @@ #include "config.h" -#include -#include -#include +#include #include "mutt.h" #include "mx.h" /* for M_IMAP */ #include "imap_private.h" #include -#include +#include #include #include diff --git a/init.c b/init.c index a40194d..7e7b455 100644 --- a/init.c +++ b/init.c @@ -22,14 +22,7 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include +#include #include #include @@ -2670,12 +2663,6 @@ void mutt_init (int skip_sys_rc, string_list_t * commands) CurrentMenu = MENU_MAIN; - /* Do we have a locale definition? */ - if (((p = getenv ("LC_ALL")) != NULL && p[0]) || - ((p = getenv ("LANG")) != NULL && p[0]) || - ((p = getenv ("LC_CTYPE")) != NULL && p[0])) - set_option (OPTLOCALES); - #ifdef HAVE_GETSID /* Unset suspend by default if we're the session leader */ if (getsid (0) == getpid ()) @@ -2684,22 +2671,6 @@ void mutt_init (int skip_sys_rc, string_list_t * commands) mutt_init_history (); - - - - /* - * - * BIG FAT WARNING - * - * When changing the code which looks for a configuration file, - * please also change the corresponding code in muttbug.sh.in. - * - * - */ - - - - if (!Muttrc) { #if 0 snprintf (buffer, sizeof(buffer), "%s/.madmuttrc-%s", NONULL (Homedir), diff --git a/keymap.c b/keymap.c index 716308a..e80e5a3 100644 --- a/keymap.c +++ b/keymap.c @@ -11,12 +11,7 @@ # include "config.h" #endif -#include -#include -#include -#include -#include -#include +#include #include #include @@ -478,7 +473,7 @@ const char *km_keyname(int c) } else if (c >= KEY_F0 && c < KEY_F (256)) /* this maximum is just a guess */ sprintf (buf, "", c - KEY_F0); - else if (IsPrint (c)) + else if (isprint((unsigned char)c)) snprintf (buf, sizeof (buf), "%c", (unsigned char) c); else snprintf (buf, sizeof (buf), "\\x%hx", (unsigned short) c); diff --git a/keymap.h b/keymap.h index 4ec7dd3..6ce0b5f 100644 --- a/keymap.h +++ b/keymap.h @@ -10,7 +10,7 @@ #ifndef KEYMAP_H #define KEYMAP_H -#include +#include /* maximal length of a key binding sequence used for buffer in km_bindkey */ #define MAX_SEQ 8 diff --git a/lib-crypt/crypt-gpgme.c b/lib-crypt/crypt-gpgme.c index 8cb8341..e6ad538 100644 --- a/lib-crypt/crypt-gpgme.c +++ b/lib-crypt/crypt-gpgme.c @@ -41,11 +41,7 @@ #include -#include -#include -#include -#include -#include +#include #include @@ -3673,7 +3669,7 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc, if (fqdn) rfc822_qualify (tmp, fqdn); - tmp = mutt_remove_duplicates (tmp); + address_list_uniq(tmp); for (p = tmp; p; p = p->next) { char buf[LONG_STRING]; diff --git a/lib-crypt/crypt-mod.c b/lib-crypt/crypt-mod.c index 9a43556..eb406f4 100644 --- a/lib-crypt/crypt-mod.c +++ b/lib-crypt/crypt-mod.c @@ -11,7 +11,7 @@ # include "config.h" #endif -#include +#include #include "crypt-mod.h" diff --git a/lib-crypt/crypt.c b/lib-crypt/crypt.c index 66e9588..36fbcda 100644 --- a/lib-crypt/crypt.c +++ b/lib-crypt/crypt.c @@ -34,11 +34,7 @@ # include #endif -#include -#include -#include -#include -#include +#include #include diff --git a/lib-crypt/cryptglue.c b/lib-crypt/cryptglue.c index 151cbad..019a339 100644 --- a/lib-crypt/cryptglue.c +++ b/lib-crypt/cryptglue.c @@ -23,7 +23,7 @@ # include "config.h" #endif -#include +#include #include "mutt.h" #include "crypt.h" diff --git a/lib-crypt/gnupgparse.c b/lib-crypt/gnupgparse.c index c0c944b..3db2f90 100644 --- a/lib-crypt/gnupgparse.c +++ b/lib-crypt/gnupgparse.c @@ -33,11 +33,10 @@ #include #include -#include -#include -#include - +#include #include +#include +#include #include "mutt.h" #include "pgp.h" diff --git a/lib-crypt/pgp.c b/lib-crypt/pgp.c index 408bf33..289ffc8 100644 --- a/lib-crypt/pgp.c +++ b/lib-crypt/pgp.c @@ -21,11 +21,7 @@ # include "config.h" #endif -#include -#include -#include -#include -#include +#include #include @@ -1103,7 +1099,7 @@ char *pgp_findKeys (address_t * to, address_t * cc, address_t * bcc) if (fqdn) rfc822_qualify (tmp, fqdn); - tmp = mutt_remove_duplicates (tmp); + address_list_uniq(&tmp); for (p = tmp; p; p = p->next) { char buf[LONG_STRING]; diff --git a/lib-crypt/pgpinvoke.c b/lib-crypt/pgpinvoke.c index 08f5d32..3235fae 100644 --- a/lib-crypt/pgpinvoke.c +++ b/lib-crypt/pgpinvoke.c @@ -25,10 +25,7 @@ #include #include -#include -#include -#include -#include +#include #include diff --git a/lib-crypt/pgpkey.c b/lib-crypt/pgpkey.c index 762842b..76b39b8 100644 --- a/lib-crypt/pgpkey.c +++ b/lib-crypt/pgpkey.c @@ -12,11 +12,7 @@ # include "config.h" #endif -#include -#include -#include -#include -#include +#include #include diff --git a/lib-crypt/pgplib.c b/lib-crypt/pgplib.c index d9e5ff9..2532db5 100644 --- a/lib-crypt/pgplib.c +++ b/lib-crypt/pgplib.c @@ -19,7 +19,7 @@ #include #include -#include +#include #include "mutt.h" #include "lib.h" diff --git a/lib-crypt/pgpmicalg.c b/lib-crypt/pgpmicalg.c index f750e19..a2d89db 100644 --- a/lib-crypt/pgpmicalg.c +++ b/lib-crypt/pgpmicalg.c @@ -26,7 +26,8 @@ #include #include -#include +#include +#include #include diff --git a/lib-crypt/pgppacket.c b/lib-crypt/pgppacket.c index 450f8aa..518c11e 100644 --- a/lib-crypt/pgppacket.c +++ b/lib-crypt/pgppacket.c @@ -17,7 +17,7 @@ #include #include -#include +#include #include #include "lib.h" diff --git a/lib-crypt/smime.c b/lib-crypt/smime.c index f96b31d..7932525 100644 --- a/lib-crypt/smime.c +++ b/lib-crypt/smime.c @@ -31,10 +31,7 @@ # include #endif -#include -#include -#include -#include +#include #include @@ -756,7 +753,7 @@ char *smime_findKeys (address_t * to, address_t * cc, address_t * bcc) if (fqdn) rfc822_qualify (tmp, fqdn); - tmp = mutt_remove_duplicates (tmp); + address_list_uniq(&tmp); for (p = tmp; p; p = p->next) { char buf[LONG_STRING]; diff --git a/lib-lib/Makefile.am b/lib-lib/Makefile.am index c93a18a..d605e34 100644 --- a/lib-lib/Makefile.am +++ b/lib-lib/Makefile.am @@ -1,12 +1,14 @@ noinst_LIBRARIES = liblib.a -liblib_a_SOURCES = mem.h str.h ascii.h buffer.h hash.h list.h file.h mapping.h \ - str.c ascii.c buffer.c hash.c list.c file.c mapping.c \ +liblib_a_SOURCES = lib-lib.h mem.h macros.h \ + str.h ascii.h buffer.h hash.h list.h file.h mapping.h \ + str.c ascii.c buffer.c hash.c list.c file.c mapping.c \ \ date.h rx.h url.h \ date.c rx.c url.c -noinst_HEADERS = mem.h str.h ascii.h buffer.h hash.h list.h file.h mapping.h \ +noinst_HEADERS = lib-lib.h mem.h macros.h \ + str.h ascii.h buffer.h hash.h list.h file.h mapping.h \ date.h rx.h url.h -include ../cflags.mk diff --git a/lib-lib/buffer.c b/lib-lib/buffer.c index 0a506bb..e1327c8 100644 --- a/lib-lib/buffer.c +++ b/lib-lib/buffer.c @@ -36,8 +36,6 @@ #include "buffer.h" #include "file.h" -#include "mutt.h" - /* * Creates and initializes a BUFFER*. If passed an existing BUFFER*, * just initializes. Frees anything already in the buffer. @@ -101,184 +99,3 @@ void mutt_buffer_add(BUFFER *buf, const char *s, ssize_t len) *buf->dptr = '\0'; } -int mutt_extract_token(BUFFER *dest, BUFFER *tok, int flags) -{ - char ch; - char qc = 0; /* quote char */ - char *pc; - - /* reset the destination pointer to the beginning of the buffer */ - dest->dptr = dest->data; - - tok->dptr = vskipspaces(tok->dptr); - while ((ch = *tok->dptr)) { - if (!qc) { - if ((ISSPACE(ch) && !(flags & M_TOKEN_SPACE)) - || (ch == '#' && !(flags & M_TOKEN_COMMENT)) - || (ch == '=' && (flags & M_TOKEN_EQUAL)) - || (ch == ';' && !(flags & M_TOKEN_SEMICOLON)) - || ((flags & M_TOKEN_PATTERN) && strchr("~=!|", ch))) - { - break; - } - } - - tok->dptr++; - - if (ch == qc) { - qc = 0; /* end of quote */ - } else - if (!qc && (ch == '\'' || ch == '"') && !(flags & M_TOKEN_QUOTE)) { - qc = ch; - } else - if (ch == '\\' && qc != '\'') { - if (!*tok->dptr) - return -1; /* premature end of token */ - - switch (ch = *tok->dptr++) { - case 'c': - case 'C': - if (!*tok->dptr) - return -1; /* premature end of token */ - mutt_buffer_addch(dest, - (ascii_toupper(*tok->dptr) - 'A' + 1) & 0x7f); - tok->dptr++; - break; - case 'r': - mutt_buffer_addch(dest, '\r'); - break; - case 'n': - mutt_buffer_addch(dest, '\n'); - break; - case 't': - mutt_buffer_addch(dest, '\t'); - break; - case 'f': - mutt_buffer_addch(dest, '\f'); - break; - case 'e': - mutt_buffer_addch(dest, '\033'); - break; - default: - if (isdigit((unsigned char)ch) - && isdigit((unsigned char)*tok->dptr) - && isdigit((unsigned char)*(tok->dptr + 1))) - { - mutt_buffer_addch(dest, (ch << 6) + (*tok->dptr << 3) + - *(tok->dptr + 1) - 3504); - tok->dptr += 2; - } else { - mutt_buffer_addch(dest, ch); - } - } - } else - if (ch == '^' && (flags & M_TOKEN_CONDENSE)) { - if (!*tok->dptr) - return -1; /* premature end of token */ - ch = *tok->dptr++; - if (ch == '^') { - mutt_buffer_addch(dest, ch); - } else - if (ch == '[') { - mutt_buffer_addch(dest, '\033'); - } else - if (isalpha((unsigned char)ch)) { - mutt_buffer_addch(dest, ascii_toupper(ch) - 'A' + 1); - } else { - mutt_buffer_addch(dest, '^'); - mutt_buffer_addch(dest, ch); - } - } else - if (ch == '`' && (!qc || qc == '"')) { - FILE *fp; - pid_t pid; - char *cmd, *ptr; - ssize_t expnlen; - BUFFER expn; - int line = 0; - - pc = tok->dptr; - do { - if ((pc = strpbrk(pc, "\\`"))) { - /* skip any quoted chars */ - if (*pc == '\\') - pc += 2; - } - } while (pc && *pc != '`'); - if (!pc) { - return (-1); - } - - cmd = p_dupstr(tok->dptr, pc - tok->dptr); - if ((pid = mutt_create_filter(cmd, NULL, &fp, NULL)) < 0) { - p_delete(&cmd); - return -1; - } - p_delete(&cmd); - - tok->dptr = pc + 1; - - /* read line */ - p_clear(&expn, 1); - expn.data = mutt_read_line(NULL, &expn.dsize, fp, &line); - fclose(fp); - mutt_wait_filter(pid); - - /* if we got output, make a new string consiting of the shell ouptput - plus whatever else was left on the original line */ - /* BUT: If this is inside a quoted string, directly add output to - * the token */ - if (expn.data && qc) { - mutt_buffer_addstr(dest, expn.data); - p_delete(&expn.data); - } else - if (expn.data) { - expnlen = m_strlen(expn.data); - tok->dsize = expnlen + m_strlen(tok->dptr) + 1; - ptr = xmalloc(tok->dsize); - memcpy(ptr, expn.data, expnlen); - strcpy(ptr + expnlen, tok->dptr); /* __STRCPY_CHECKED__ */ - if (tok->destroy) - p_delete(&tok->data); - tok->data = ptr; - tok->dptr = ptr; - tok->destroy = 1; /* mark that the caller should destroy this data */ - ptr = NULL; - p_delete(&expn.data); - } - } else - if (ch == '$' && (!qc || qc == '"') - && (*tok->dptr == '{' || isalpha((unsigned char)*tok->dptr))) - { - char *env = NULL, *var = NULL; - - if (*tok->dptr == '{') { - tok->dptr++; - if ((pc = strchr (tok->dptr, '}'))) { - var = p_dupstr(tok->dptr, pc - tok->dptr); - tok->dptr = pc + 1; - } - } else { - for (pc = tok->dptr; isalnum((unsigned char)*pc) || *pc == '_'; - pc++); - var = p_dupstr(tok->dptr, pc - tok->dptr); - tok->dptr = pc; - } - if (var) { - char tmp[STRING]; - if ((env = getenv (var)) - || (mutt_option_value (var, tmp, sizeof (tmp)) && (env = tmp))) - { - mutt_buffer_addstr (dest, env); - } - } - p_delete(&var); - } else { - mutt_buffer_addch(dest, ch); - } - } - mutt_buffer_addch(dest, 0); /* terminate the string */ - tok->dptr = vskipspaces(tok->dptr); - return 0; -} - diff --git a/lib-lib/buffer.h b/lib-lib/buffer.h index 0fc562d..f459618 100644 --- a/lib-lib/buffer.h +++ b/lib-lib/buffer.h @@ -29,17 +29,7 @@ #ifndef MUTT_LIB_LIB_BUFFER_H #define MUTT_LIB_LIB_BUFFER_H -#include - -/* flags for mutt_extract_token() */ -#define M_TOKEN_EQUAL 1 /* treat '=' as a special */ -#define M_TOKEN_CONDENSE (1<<1) /* ^(char) to control chars (macros) */ -#define M_TOKEN_SPACE (1<<2) /* don't treat whitespace as a term */ -#define M_TOKEN_QUOTE (1<<3) /* don't interpret quotes */ -#define M_TOKEN_PATTERN (1<<4) /* !)|~ are terms (for patterns) */ -#define M_TOKEN_COMMENT (1<<5) /* don't reap comments */ -#define M_TOKEN_SEMICOLON (1<<6) /* don't treat ; as special */ - +#include "str.h" typedef struct { char *data; /* pointer to data */ @@ -52,8 +42,6 @@ BUFFER *mutt_buffer_init(BUFFER *); void mutt_buffer_free(BUFFER **); BUFFER *mutt_buffer_from(BUFFER *, const char *); -int mutt_extract_token(BUFFER *, BUFFER *, int); - void mutt_buffer_add(BUFFER *, const char *, ssize_t); static inline void mutt_buffer_addstr(BUFFER *b, const char *s) { mutt_buffer_add(b, s, m_strlen(s)); diff --git a/lib-lib/lib-lib.h b/lib-lib/lib-lib.h new file mode 100644 index 0000000..5f8974d --- /dev/null +++ b/lib-lib/lib-lib.h @@ -0,0 +1,37 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * Copyright © 2006 Pierre Habouzit + */ + +#ifndef MUTT_LIB_LIB_LIB_LIB_H +#define MUTT_LIB_LIB_LIB_LIB_H + +#include "macros.h" +#include "mem.h" + +#include "ascii.h" +#include "buffer.h" +#include "date.h" +#include "file.h" +#include "hash.h" +#include "list.h" +#include "mapping.h" +#include "rx.h" +#include "str.h" +#include "url.h" + +#endif diff --git a/lib-lib/rx.c b/lib-lib/rx.c index 975ed52..f2b6720 100644 --- a/lib-lib/rx.c +++ b/lib-lib/rx.c @@ -26,9 +26,7 @@ #include "config.h" #endif -#include -#include -#include +#include rx_t *rx_compile(const char *s, int flags) { diff --git a/lib-lib/url.c b/lib-lib/url.c index afc444b..a5ee410 100644 --- a/lib-lib/url.c +++ b/lib-lib/url.c @@ -33,16 +33,10 @@ # include "config.h" #endif +#include #include -#include -#include -#include -#include - -#include - -#include "mutt.h" +#include static struct mapping_t UrlMap[] = { {"file", U_FILE}, diff --git a/lib-mime/crypt.c b/lib-mime/crypt.c index d0d3235..919c3bb 100644 --- a/lib-mime/crypt.c +++ b/lib-mime/crypt.c @@ -30,8 +30,7 @@ * please see the file GPL in the top level source directory. */ -#include -#include +#include #include diff --git a/lib-mime/mime-types.h b/lib-mime/mime-types.h index 9a32717..689f81b 100644 --- a/lib-mime/mime-types.h +++ b/lib-mime/mime-types.h @@ -30,9 +30,7 @@ #ifndef MUTT_LIB_MIME_MIME_TYPES_H #define MUTT_LIB_MIME_MIME_TYPES_H -#include -#include -#include +#include /* Content-Type */ enum { diff --git a/lib-mime/mime.c b/lib-mime/mime.c index 4353e4d..dc50d2d 100644 --- a/lib-mime/mime.c +++ b/lib-mime/mime.c @@ -22,8 +22,7 @@ * Copyright (C) 1999-2000 Thomas Roessler */ -#include -#include +#include #include "mime.h" diff --git a/lib-mime/mime.h b/lib-mime/mime.h index 45002f4..74530cf 100644 --- a/lib-mime/mime.h +++ b/lib-mime/mime.h @@ -113,12 +113,15 @@ int mutt_is_multipart_signed(BODY *); int mutt_is_application_pgp(BODY *); int mutt_is_application_smime(BODY *); int mutt_is_text_part(BODY *); +time_t mutt_parse_date(const char *, HEADER *); /*** addresses ***/ address_t *mutt_parse_adrlist(address_t *, const char *); address_t *address_dup(const address_t *addr); address_t *address_list_dup(const address_t *addr); + +void address_list_uniq(address_t *); void rfc822_qualify(address_t *, const char *); address_t *rfc822_parse_adrlist(address_t *, const char *s); diff --git a/lib-mime/rfc1524.c b/lib-mime/rfc1524.c index 6c4f2e5..de7ec11 100644 --- a/lib-mime/rfc1524.c +++ b/lib-mime/rfc1524.c @@ -48,11 +48,7 @@ #include #include -#include -#include -#include -#include -#include +#include #include diff --git a/lib-mime/rfc2047.c b/lib-mime/rfc2047.c index 71bf5c7..5b68921 100644 --- a/lib-mime/rfc2047.c +++ b/lib-mime/rfc2047.c @@ -27,9 +27,7 @@ * please see the file GPL in the top level source directory. */ -#include -#include -#include +#include #include @@ -564,7 +562,7 @@ static int rfc2047_encode(const char *d, ssize_t dlen, int col, } -void _rfc2047_encode_string(char **pd, int encode_specials, int col) +static void _rfc2047_encode_string(char **pd, int encode_specials, int col) { char *e; ssize_t elen; diff --git a/lib-mime/rfc2231.c b/lib-mime/rfc2231.c index 206f505..6bbd39a 100644 --- a/lib-mime/rfc2231.c +++ b/lib-mime/rfc2231.c @@ -40,9 +40,7 @@ #include #include -#include -#include -#include +#include #include diff --git a/lib-mime/rfc3676.c b/lib-mime/rfc3676.c index 1fdcf0d..1868091 100644 --- a/lib-mime/rfc3676.c +++ b/lib-mime/rfc3676.c @@ -20,15 +20,12 @@ #include #include -#include -#include -#include -#include -#include +#include #include #include "state.h" +#include "rfc3676.h" #define FLOWED_MAX 77 diff --git a/lib-mime/rfc822address.c b/lib-mime/rfc822address.c index a76fd25..cf88c95 100644 --- a/lib-mime/rfc822address.c +++ b/lib-mime/rfc822address.c @@ -30,10 +30,7 @@ #include #include -#include -#include -#include -#include +#include #include "mutt_idna.h" @@ -73,6 +70,26 @@ address_t *address_list_dup(const address_t *addr) return res; } +/* given a list of addresses, return a list of unique addresses */ +void address_list_uniq(address_t *a) +{ + for (; a; a = a->next) { + address_t **b = &a->next; + + if (!a->mailbox) + continue; + + while (*b) { + if ((*b)->mailbox && !ascii_strcasecmp((*b)->mailbox, a->mailbox)) + { + address_t *pop = address_list_pop(b); + address_delete(&pop); + } else { + b = &(*b)->next; + } + } + } +} /****************************************************************************/ /* Parsing functions */ @@ -242,7 +259,7 @@ parse_address(const char *s, static_buf *comment, address_t *cur) return s; } -address_t **rfc822_eotoken(address_t **last, static_buf *phrase, static_buf *comment) +static address_t **rfc822_eotoken(address_t **last, static_buf *phrase, static_buf *comment) { if (phrase->len) { const char *s; diff --git a/lib-mime/rfc822parse.c b/lib-mime/rfc822parse.c index 33012fd..e399bb7 100644 --- a/lib-mime/rfc822parse.c +++ b/lib-mime/rfc822parse.c @@ -32,13 +32,7 @@ #include -#include -#include -#include -#include -#include -#include -#include +#include #include "recvattach.h" diff --git a/lib-sys/exit.c b/lib-sys/exit.c index 0b4e499..01a23e5 100644 --- a/lib-sys/exit.c +++ b/lib-sys/exit.c @@ -37,7 +37,7 @@ #define EX_OK 0 #endif -#include +#include #include "exit.h" diff --git a/lib-sys/filter.c b/lib-sys/filter.c index 193b2ad..e324a94 100644 --- a/lib-sys/filter.c +++ b/lib-sys/filter.c @@ -16,6 +16,8 @@ #include #include +#include + #include "mutt_signal.h" #include "unix.h" @@ -152,3 +154,31 @@ int mutt_wait_filter (pid_t pid) return rc; } + +/* This function allows the user to specify a command to read stdout from in + place of a normal file. If the last character in the string is a pipe (|), + then we assume it is a commmand to run instead of a normal file. */ +FILE *mutt_open_read (const char *path, pid_t * thepid) +{ + int len = m_strlen(path); + FILE *f; + + if (path[len - 1] == '|') { + char *s = m_strdup(path); + + /* read from a pipe */ + + s[len - 1] = 0; + mutt_endwin (NULL); + *thepid = mutt_create_filter (s, NULL, &f, NULL); + p_delete(&s); + } else { + f = fopen (path, "r"); + if (!f) + return NULL; + *thepid = -1; + } + + return (f); +} + diff --git a/lib-sys/mutt_signal.c b/lib-sys/mutt_signal.c index 159612b..55b3f02 100644 --- a/lib-sys/mutt_signal.c +++ b/lib-sys/mutt_signal.c @@ -16,7 +16,7 @@ #include #include -#include +#include #include diff --git a/lib-sys/mutt_socket.c b/lib-sys/mutt_socket.c index 0218610..f6319f0 100644 --- a/lib-sys/mutt_socket.c +++ b/lib-sys/mutt_socket.c @@ -23,9 +23,8 @@ #include #include -#include -#include -#include +#include +#include #include "mutt.h" #include "globals.h" diff --git a/lib-sys/mutt_ssl.c b/lib-sys/mutt_ssl.c index bfb09a8..1557a8f 100644 --- a/lib-sys/mutt_ssl.c +++ b/lib-sys/mutt_ssl.c @@ -20,9 +20,7 @@ #include -#include -#include -#include +#include #include #include diff --git a/lib-sys/mutt_ssl_gnutls.c b/lib-sys/mutt_ssl_gnutls.c index 37248b8..7fc5eda 100644 --- a/lib-sys/mutt_ssl_gnutls.c +++ b/lib-sys/mutt_ssl_gnutls.c @@ -20,11 +20,7 @@ #include #endif -#include -#include -#include -#include -#include +#include #include #include diff --git a/lib-sys/mutt_tunnel.c b/lib-sys/mutt_tunnel.c index f180f38..4d58591 100644 --- a/lib-sys/mutt_tunnel.c +++ b/lib-sys/mutt_tunnel.c @@ -19,9 +19,8 @@ #include #include -#include -#include -#include +#include +#include #include "mutt.h" diff --git a/lib-sys/unix.c b/lib-sys/unix.c index a83d4bc..30a75dc 100644 --- a/lib-sys/unix.c +++ b/lib-sys/unix.c @@ -14,10 +14,7 @@ #include #include -#include -#include -#include -#include +#include #include "unix.h" #include "mutt_signal.h" diff --git a/lib-sys/unix.h b/lib-sys/unix.h index e392c4e..5e1b618 100644 --- a/lib-sys/unix.h +++ b/lib-sys/unix.h @@ -23,7 +23,7 @@ #include #include -#include +#include ssize_t mutt_gecos_name(char *dst, ssize_t n, struct passwd *pw, regex_t *rx); int getdnsdomainname(char *, ssize_t); @@ -40,5 +40,6 @@ pid_t mutt_create_filter_fd (const char *, FILE **, FILE **, FILE **, int, int, int); int mutt_wait_filter (pid_t); +FILE *mutt_open_read (const char *, pid_t *); #endif /* MUTT_LIB_SYS_UNIX_H */ diff --git a/lib-ui/color.c b/lib-ui/color.c index ca0ab98..ff90ff1 100644 --- a/lib-ui/color.c +++ b/lib-ui/color.c @@ -15,12 +15,7 @@ #include #include -#include -#include -#include -#include -#include -#include +#include #include "curses.h" diff --git a/lib-ui/complete.c b/lib-ui/complete.c index 2ad60ac..06e70c3 100644 --- a/lib-ui/complete.c +++ b/lib-ui/complete.c @@ -17,8 +17,7 @@ #include #include -#include -#include +#include #include "mutt.h" #include "mx.h" diff --git a/lib-ui/curs_lib.c b/lib-ui/curs_lib.c index 125e5ca..de14e59 100644 --- a/lib-ui/curs_lib.c +++ b/lib-ui/curs_lib.c @@ -30,10 +30,7 @@ #include #endif -#include -#include -#include -#include +#include #include #include @@ -599,7 +596,7 @@ void mutt_format_string (char *dest, ssize_t destlen, if (arboreal && wc < M_TREE_MAX) w = 1; /* hack */ else { - if (!IsWPrint (wc)) + if (!iswprint(wc)) wc = '?'; w = wcwidth (wc); } @@ -691,7 +688,7 @@ void mutt_paddstr (int n, const char *s) k = (k == -1) ? 1 : len; wc = CharsetReplacement; } - if (!IsWPrint (wc)) + if (!iswprint(wc)) wc = '?'; w = wcwidth (wc); if (w >= 0) { @@ -728,7 +725,7 @@ int mutt_strwidth (const char *s) k = (k == -1) ? 1 : n; wc = CharsetReplacement; } - if (!IsWPrint (wc)) + if (!iswprint(wc)) wc = '?'; w += wcwidth (wc); } diff --git a/lib-ui/curs_main.c b/lib-ui/curs_main.c index 3fd1fb3..5edd752 100644 --- a/lib-ui/curs_main.c +++ b/lib-ui/curs_main.c @@ -22,10 +22,7 @@ #include #include -#include -#include -#include -#include +#include #include diff --git a/lib-ui/curses.h b/lib-ui/curses.h index 6a33540..c468446 100644 --- a/lib-ui/curses.h +++ b/lib-ui/curses.h @@ -145,6 +145,46 @@ typedef struct { } progress_t; void mutt_progress_bar (progress_t* progress, long pos); +void mutt_clear_error (void); +void mutt_edit_file (const char *, const char *); +void mutt_curses_error (const char *, ...); +void mutt_curses_message (const char *, ...); +void mutt_format_string (char *, ssize_t, int, int, int, char, const char *, + ssize_t, int); +void mutt_format_s (char *, ssize_t, const char *, const char *); +void mutt_format_s_tree (char *, ssize_t, const char *, const char *); +void mutt_free_color (int fg, int bg); +void mutt_paddstr (int, const char *); +#define mutt_perror(a) _mutt_perror (a, __FILE__, __LINE__) +void _mutt_perror (const char*, const char*,int); +void mutt_query_exit (void); +void mutt_query_menu (char *, ssize_t); +void mutt_show_error (void); + +int mutt_addwch (wchar_t); +int mutt_alloc_color (int fg, int bg); +int mutt_any_key_to_continue (const char *); +int mutt_complete (char *, ssize_t); +#define mutt_enter_fname(A,B,C,D,E) _mutt_enter_fname(A,B,C,D,E,0,NULL,NULL) +int _mutt_enter_fname (const char *, char *, ssize_t, int *, int, int, + char ***, int *); + +#define mutt_get_field(A,B,C,D) _mutt_get_field(A,B,C,D,0,NULL,NULL) +int _mutt_get_field (const char *, char *, ssize_t, int, int, char ***, int *); +int mutt_get_field_unbuffered (char *, char *, ssize_t, int); +int mutt_index_menu (void); +int mutt_is_mail_list (address_t *); +int mutt_is_subscribed_list (address_t *); +int mutt_multi_choice (char *prompt, char *letters); +int mutt_parse_color (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_uncolor (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_mono (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_parse_unmono (BUFFER *, BUFFER *, unsigned long, BUFFER *); +int mutt_query_complete (char *, ssize_t); +int mutt_strwidth (const char *); +int mutt_user_is_recipient (HEADER *); +int mutt_yesorno (const char *, int); +void mutt_set_header_color (CONTEXT *, HEADER *); extern int *ColorQuote; extern int ColorQuoteUsed; @@ -156,6 +196,11 @@ extern COLOR_LINE *ColorIndexList; void ci_init_color (void); void ci_start_color (void); +#define mutt_make_string(A,B,C,D,E) _mutt_make_string(A,B,C,D,E,0) +void _mutt_make_string (char *, ssize_t, const char *, CONTEXT *, + HEADER *, format_flag); + + #define SETCOLOR(X) attrset(ColorDefs[X]) #define ADDCOLOR(X) attron(ColorDefs[X]) diff --git a/lib-ui/enter.c b/lib-ui/enter.c index d6707a6..39e0100 100644 --- a/lib-ui/enter.c +++ b/lib-ui/enter.c @@ -15,7 +15,7 @@ #include #include -#include +#include #include "curses.h" #include "enter.h" @@ -37,7 +37,7 @@ static int my_wcwidth (wchar_t wc) { int n = wcwidth (wc); - if (IsWPrint (wc) && n > 0) + if (iswprint(wc) && n > 0) return n; if (!(wc & ~0x7f)) return 2; @@ -47,7 +47,7 @@ static int my_wcwidth (wchar_t wc) } /* combining mark / non-spacing character */ -#define COMB_CHAR(wc) (IsWPrint (wc) && !wcwidth (wc)) +#define COMB_CHAR(wc) (iswprint(wc) && !wcwidth(wc)) static int my_wcswidth (const wchar_t * s, size_t n) { @@ -62,7 +62,7 @@ static int my_addwch (wchar_t wc) { int n = wcwidth (wc); - if (IsWPrint (wc) && n > 0) + if (iswprint(wc) && n > 0) return mutt_addwch (wc); if (!(wc & ~0x7f)) return printw ("^%c", ((int) wc + 0x40) & 0x7f); @@ -625,7 +625,7 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x, if (first && (flags & M_CLEAR)) { first = 0; - if (IsWPrint (wc)) /* why? */ + if (iswprint(wc)) /* why? */ state->curpos = state->lastchar = 0; } @@ -647,7 +647,7 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x, rv = 0; goto bye; } - else if (wc && (wc < ' ' || IsWPrint (wc))) { /* why? */ + else if (wc && (wc < ' ' || iswprint(wc))) { /* why? */ if (state->lastchar >= state->wbuflen) { state->wbuflen = state->lastchar + 20; p_realloc(&state->wbuf, state->wbuflen); diff --git a/lib-ui/hdrline.c b/lib-ui/hdrline.c index 2bc1bed..5797c22 100644 --- a/lib-ui/hdrline.c +++ b/lib-ui/hdrline.c @@ -16,8 +16,7 @@ #include #include -#include -#include +#include #include diff --git a/lib-ui/history.c b/lib-ui/history.c index 92bdb9f..a50c00c 100644 --- a/lib-ui/history.c +++ b/lib-ui/history.c @@ -11,7 +11,7 @@ # include "config.h" #endif -#include +#include #include "mutt.h" #include "history.h" diff --git a/lib-ui/menu.c b/lib-ui/menu.c index 4e99047..b125d3c 100644 --- a/lib-ui/menu.c +++ b/lib-ui/menu.c @@ -15,9 +15,7 @@ #include #include -#include -#include -#include +#include #include "curses.h" #include "enter.h" diff --git a/lib-ui/menu.h b/lib-ui/menu.h index d90ec4f..7c27264 100644 --- a/lib-ui/menu.h +++ b/lib-ui/menu.h @@ -12,7 +12,7 @@ * This file is named mutt_menu.h so it doesn't collide with ncurses menu.h */ -#include +#include #include "keymap.h" diff --git a/lib-ui/query.c b/lib-ui/query.c index 2a60afa..11fa388 100644 --- a/lib-ui/query.c +++ b/lib-ui/query.c @@ -15,13 +15,11 @@ #include #include -#include -#include -#include -#include -#include +#include +#include #include +#include #include "mutt.h" #include "alias.h" @@ -350,7 +348,7 @@ static void query_menu (char *buf, ssize_t buflen, QUERY * results, int retbuf) QueryTable[i].data = queryp; } else { - int clear = 0; + int doclear = 0; /* append */ p_realloc(&QueryTable, menu->max); @@ -361,10 +359,10 @@ static void query_menu (char *buf, ssize_t buflen, QUERY * results, int retbuf) queryp = queryp->next, i++) { /* once we hit new entries, clear/init the tag */ if (queryp == newresults) - clear = 1; + doclear = 1; QueryTable[i].data = queryp; - if (clear) + if (doclear) QueryTable[i].tagged = 0; } } diff --git a/lib-ui/sidebar.c b/lib-ui/sidebar.c index a216d69..1a45558 100644 --- a/lib-ui/sidebar.c +++ b/lib-ui/sidebar.c @@ -15,9 +15,7 @@ #include #include -#include -#include -#include +#include #include #include diff --git a/lib-ui/status.c b/lib-ui/status.c index 1f756a5..0f918fd 100644 --- a/lib-ui/status.c +++ b/lib-ui/status.c @@ -11,10 +11,7 @@ # include "config.h" #endif -#include -#include -#include -#include +#include #include #include diff --git a/lib/list.c b/lib/list.c index 7ef6e6c..c3c9952 100644 --- a/lib/list.c +++ b/lib/list.c @@ -10,8 +10,7 @@ #include #include -#include -#include +#include #include "list.h" diff --git a/main.c b/main.c index eace540..e097503 100644 --- a/main.c +++ b/main.c @@ -27,11 +27,7 @@ #include #include -#include -#include -#include -#include -#include +#include #include diff --git a/makedoc.c b/makedoc.c index 3844569..0363a46 100644 --- a/makedoc.c +++ b/makedoc.c @@ -31,7 +31,7 @@ #include #include -#include +#include #ifdef HAVE_UNISTD_H # include diff --git a/mbox.c b/mbox.c index 8b5b577..d4125b0 100644 --- a/mbox.c +++ b/mbox.c @@ -22,10 +22,8 @@ #include #include -#include -#include -#include -#include +#include +#include #include diff --git a/mh.c b/mh.c index 3df675b..e03762a 100644 --- a/mh.c +++ b/mh.c @@ -35,10 +35,8 @@ #include #endif -#include -#include -#include -#include +#include +#include #include "mutt.h" #include "mx.h" @@ -263,7 +261,7 @@ static void mhs_write_one_sequence (FILE * fp, struct mh_sequences *mhs, /* XXX - we don't currently remove deleted messages from sequences we don't know. Should we? */ -void mh_update_sequences (CONTEXT * ctx) +static void mh_update_sequences (CONTEXT * ctx) { FILE *ofp, *nfp; @@ -757,7 +755,7 @@ static ssize_t maildir_hcache_keylen (const char *fn) * This function does the second parsing pass for a maildir-style * folder. */ -void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) +static void maildir_delayed_parsing (CONTEXT * ctx, struct maildir *md) { struct maildir *p; char fn[_POSIX_PATH_MAX]; @@ -882,7 +880,7 @@ static int mh_open_new_message (MESSAGE * msg, CONTEXT * dest, HEADER * hdr __at return mh_mkstemp (dest, &msg->fp, &msg->path); } -int ch_compar (const void *a, const void *b) +static int ch_compar (const void *a, const void *b) { return (int) (*((const char *) a) - *((const char *) b)); } @@ -1686,8 +1684,8 @@ static int mh_check_mailbox (CONTEXT * ctx, int *index_hint, int unused __attrib * then again, it's called rarely. */ -FILE *_maildir_open_find_message (const char *folder, const char *unique, - const char *subfolder) +static FILE *_maildir_open_find_message (const char *folder, const char *unique, + const char *subfolder) { char dir[_POSIX_PATH_MAX]; char tunique[_POSIX_PATH_MAX]; @@ -1803,7 +1801,7 @@ static int maildir_check_empty (const char *path) * 0 if there are messages in the mailbox * -1 on error */ -int mh_check_empty (const char *path) +static int mh_check_empty (const char *path) { DIR *dp; struct dirent *de; diff --git a/mh.h b/mh.h index 65f8247..a6b12eb 100644 --- a/mh.h +++ b/mh.h @@ -23,6 +23,7 @@ int mh_buffy (const char *); FILE *maildir_open_find_message (const char *, const char *); +int mh_valid_message (const char *); /* these are the only publicly visible for usage */ diff --git a/mutt.h b/mutt.h index 0e2b285..5931f2f 100644 --- a/mutt.h +++ b/mutt.h @@ -23,10 +23,7 @@ #include #endif -#include -#include -#include -#include +#include #include @@ -431,7 +428,6 @@ enum { OPTAUXSORT, /* (pseudo) using auxillary sort function */ OPTFORCEREFRESH, /* (pseudo) refresh even during macros */ - OPTLOCALES, /* (pseudo) set if user has valid locale definition */ OPTNOCURSES, /* (pseudo) when sending in batch mode */ OPTNEEDREDRAW, /* (pseudo) to notify caller of a submenu */ OPTSEARCHREVERSE, /* (pseudo) used by ci_search_command */ diff --git a/mutt_idna.c b/mutt_idna.c index c5f791e..acfb102 100644 --- a/mutt_idna.c +++ b/mutt_idna.c @@ -15,10 +15,7 @@ #include #endif -#include -#include -#include -#include +#include #include "mutt.h" #include "charset.h" diff --git a/mutt_libesmtp.c b/mutt_libesmtp.c index fe4f24e..fe256f6 100644 --- a/mutt_libesmtp.c +++ b/mutt_libesmtp.c @@ -16,10 +16,7 @@ #include -#include -#include -#include -#include +#include #include diff --git a/mutt_sasl.c b/mutt_sasl.c index 5952752..126504c 100644 --- a/mutt_sasl.c +++ b/mutt_sasl.c @@ -19,12 +19,13 @@ #include #include -#include +#include +#include +#include #include "mutt.h" #include "account.h" #include "mutt_sasl.h" -#include static int getnameinfo_err (int ret) { diff --git a/muttlib.c b/muttlib.c index 6ac6dba..0e396e6 100644 --- a/muttlib.c +++ b/muttlib.c @@ -26,13 +26,7 @@ #include #include -#include -#include -#include -#include -#include -#include -#include +#include #include @@ -600,7 +594,7 @@ void mutt_safe_path(char *s, ssize_t l, address_t *a) mutt_save_path(s, l, a); while (*s) { - if (*s == '/' || ISSPACE(*s) || !IsPrint((unsigned char)*s)) + if (*s == '/' || ISSPACE(*s) || !isprint((unsigned char)*s)) *s = '_'; s++; } @@ -815,39 +809,12 @@ void mutt_FormatString (char *dest, /* output buffer */ /* Make sure that the string is printable by changing all non-printable chars to dots, or spaces for non-printable whitespace */ for (cp = dest; *cp; cp++) - if (!IsPrint (*cp) && !((flags & M_FORMAT_TREE) && (*cp <= M_TREE_MAX))) + if (!isprint(*cp) && !((flags & M_FORMAT_TREE) && (*cp <= M_TREE_MAX))) *cp = isspace ((unsigned char) *cp) ? ' ' : '.'; } #endif } -/* This function allows the user to specify a command to read stdout from in - place of a normal file. If the last character in the string is a pipe (|), - then we assume it is a commmand to run instead of a normal file. */ -FILE *mutt_open_read (const char *path, pid_t * thepid) -{ - int len = m_strlen(path); - FILE *f; - - if (path[len - 1] == '|') { - char *s = m_strdup(path); - - /* read from a pipe */ - - s[len - 1] = 0; - mutt_endwin (NULL); - *thepid = mutt_create_filter (s, NULL, &f, NULL); - p_delete(&s); - } else { - f = fopen (path, "r"); - if (!f) - return NULL; - *thepid = -1; - } - - return (f); -} - /* returns 0 if OK to proceed, -1 to abort, 1 to retry */ int mutt_save_confirm (const char *s, struct stat *st) { @@ -1119,3 +1086,184 @@ int mutt_cmp_body (const BODY * b1, const BODY * b2) return (0); return (1); } + +int mutt_extract_token(BUFFER *dest, BUFFER *tok, int flags) +{ + char ch; + char qc = 0; /* quote char */ + char *pc; + + /* reset the destination pointer to the beginning of the buffer */ + dest->dptr = dest->data; + + tok->dptr = vskipspaces(tok->dptr); + while ((ch = *tok->dptr)) { + if (!qc) { + if ((ISSPACE(ch) && !(flags & M_TOKEN_SPACE)) + || (ch == '#' && !(flags & M_TOKEN_COMMENT)) + || (ch == '=' && (flags & M_TOKEN_EQUAL)) + || (ch == ';' && !(flags & M_TOKEN_SEMICOLON)) + || ((flags & M_TOKEN_PATTERN) && strchr("~=!|", ch))) + { + break; + } + } + + tok->dptr++; + + if (ch == qc) { + qc = 0; /* end of quote */ + } else + if (!qc && (ch == '\'' || ch == '"') && !(flags & M_TOKEN_QUOTE)) { + qc = ch; + } else + if (ch == '\\' && qc != '\'') { + if (!*tok->dptr) + return -1; /* premature end of token */ + + switch (ch = *tok->dptr++) { + case 'c': + case 'C': + if (!*tok->dptr) + return -1; /* premature end of token */ + mutt_buffer_addch(dest, + (ascii_toupper(*tok->dptr) - 'A' + 1) & 0x7f); + tok->dptr++; + break; + case 'r': + mutt_buffer_addch(dest, '\r'); + break; + case 'n': + mutt_buffer_addch(dest, '\n'); + break; + case 't': + mutt_buffer_addch(dest, '\t'); + break; + case 'f': + mutt_buffer_addch(dest, '\f'); + break; + case 'e': + mutt_buffer_addch(dest, '\033'); + break; + default: + if (isdigit((unsigned char)ch) + && isdigit((unsigned char)*tok->dptr) + && isdigit((unsigned char)*(tok->dptr + 1))) + { + mutt_buffer_addch(dest, (ch << 6) + (*tok->dptr << 3) + + *(tok->dptr + 1) - 3504); + tok->dptr += 2; + } else { + mutt_buffer_addch(dest, ch); + } + } + } else + if (ch == '^' && (flags & M_TOKEN_CONDENSE)) { + if (!*tok->dptr) + return -1; /* premature end of token */ + ch = *tok->dptr++; + if (ch == '^') { + mutt_buffer_addch(dest, ch); + } else + if (ch == '[') { + mutt_buffer_addch(dest, '\033'); + } else + if (isalpha((unsigned char)ch)) { + mutt_buffer_addch(dest, ascii_toupper(ch) - 'A' + 1); + } else { + mutt_buffer_addch(dest, '^'); + mutt_buffer_addch(dest, ch); + } + } else + if (ch == '`' && (!qc || qc == '"')) { + FILE *fp; + pid_t pid; + char *cmd, *ptr; + ssize_t expnlen; + BUFFER expn; + int line = 0; + + pc = tok->dptr; + do { + if ((pc = strpbrk(pc, "\\`"))) { + /* skip any quoted chars */ + if (*pc == '\\') + pc += 2; + } + } while (pc && *pc != '`'); + if (!pc) { + return (-1); + } + + cmd = p_dupstr(tok->dptr, pc - tok->dptr); + if ((pid = mutt_create_filter(cmd, NULL, &fp, NULL)) < 0) { + p_delete(&cmd); + return -1; + } + p_delete(&cmd); + + tok->dptr = pc + 1; + + /* read line */ + p_clear(&expn, 1); + expn.data = mutt_read_line(NULL, &expn.dsize, fp, &line); + fclose(fp); + mutt_wait_filter(pid); + + /* if we got output, make a new string consiting of the shell ouptput + plus whatever else was left on the original line */ + /* BUT: If this is inside a quoted string, directly add output to + * the token */ + if (expn.data && qc) { + mutt_buffer_addstr(dest, expn.data); + p_delete(&expn.data); + } else + if (expn.data) { + expnlen = m_strlen(expn.data); + tok->dsize = expnlen + m_strlen(tok->dptr) + 1; + ptr = xmalloc(tok->dsize); + memcpy(ptr, expn.data, expnlen); + strcpy(ptr + expnlen, tok->dptr); /* __STRCPY_CHECKED__ */ + if (tok->destroy) + p_delete(&tok->data); + tok->data = ptr; + tok->dptr = ptr; + tok->destroy = 1; /* mark that the caller should destroy this data */ + ptr = NULL; + p_delete(&expn.data); + } + } else + if (ch == '$' && (!qc || qc == '"') + && (*tok->dptr == '{' || isalpha((unsigned char)*tok->dptr))) + { + char *env = NULL, *var = NULL; + + if (*tok->dptr == '{') { + tok->dptr++; + if ((pc = strchr (tok->dptr, '}'))) { + var = p_dupstr(tok->dptr, pc - tok->dptr); + tok->dptr = pc + 1; + } + } else { + for (pc = tok->dptr; isalnum((unsigned char)*pc) || *pc == '_'; + pc++); + var = p_dupstr(tok->dptr, pc - tok->dptr); + tok->dptr = pc; + } + if (var) { + char tmp[STRING]; + if ((env = getenv (var)) + || (mutt_option_value (var, tmp, sizeof (tmp)) && (env = tmp))) + { + mutt_buffer_addstr (dest, env); + } + } + p_delete(&var); + } else { + mutt_buffer_addch(dest, ch); + } + } + mutt_buffer_addch(dest, 0); /* terminate the string */ + tok->dptr = vskipspaces(tok->dptr); + return 0; +} diff --git a/mx.c b/mx.c index 936fc25..8b9eedd 100644 --- a/mx.c +++ b/mx.c @@ -23,12 +23,7 @@ #include #include -#include -#include -#include -#include -#include -#include +#include #include diff --git a/mx.h b/mx.h index ccbe239..8f0a365 100644 --- a/mx.h +++ b/mx.h @@ -169,5 +169,6 @@ int mx_lock_file (const char *, int, int, int, int); int mx_unlock_file (const char *path, int fd, int dot); int mx_rebuild_cache (void); +void mutt_parse_mime_message (CONTEXT * ctx, HEADER *); #endif /* !_MX_H */ diff --git a/nntp/mx_nntp.c b/nntp/mx_nntp.c index e607885..20d55d8 100644 --- a/nntp/mx_nntp.c +++ b/nntp/mx_nntp.c @@ -9,9 +9,7 @@ #include -#include -#include -#include +#include #include "mutt.h" #include "nntp.h" diff --git a/nntp/newsrc.c b/nntp/newsrc.c index 3b8e1fa..1a868bd 100644 --- a/nntp/newsrc.c +++ b/nntp/newsrc.c @@ -20,10 +20,7 @@ #include #include -#include -#include -#include -#include +#include #include diff --git a/nntp/nntp.c b/nntp/nntp.c index 6311ce9..93ad37b 100644 --- a/nntp/nntp.c +++ b/nntp/nntp.c @@ -18,10 +18,7 @@ #include #include -#include -#include -#include -#include +#include #include diff --git a/pager.c b/pager.c index 805fd43..b486021 100644 --- a/pager.c +++ b/pager.c @@ -24,11 +24,7 @@ #include #include -#include -#include -#include -#include -#include +#include #include #include @@ -1013,7 +1009,7 @@ static int format_line (struct line_t **lineInfo, int n, unsigned char *buf, /* Handle backspace */ special = 0; - if (IsWPrint (wc)) { + if (iswprint(wc)) { wchar_t wc1; mbstate_t mbstate1; int k1, k2; @@ -1024,7 +1020,7 @@ static int format_line (struct line_t **lineInfo, int n, unsigned char *buf, &mbstate1), k1 - k > 0 && wc1 == '\b') && (wc1 = 0, k2 = mbrtowc (&wc1, (char *) buf + ch + k1, cnt - ch - k1, - &mbstate1), k2 > 0 && IsWPrint (wc1))) { + &mbstate1), k2 > 0 && iswprint(wc1))) { if (wc == wc1) { special |= (wc == '_' && special & A_UNDERLINE) ? A_UNDERLINE : A_BOLD; @@ -1050,7 +1046,7 @@ static int format_line (struct line_t **lineInfo, int n, unsigned char *buf, last_special = special; } - if (IsWPrint (wc)) { + if (iswprint(wc)) { if (wc == ' ') space = ch; t = wcwidth (wc); diff --git a/pattern.c b/pattern.c index 32a5094..26b8375 100644 --- a/pattern.c +++ b/pattern.c @@ -18,17 +18,12 @@ #include #include -#include -#include -#include -#include -#include -#include -#include +#include #include #include +#include #include "mutt.h" #include "alias.h" @@ -119,19 +114,6 @@ static char LastSearchExpn[LONG_STRING] = { 0 }; /* expanded version of #define M_PDR_ERROR 0x0100 #define M_PDR_ERRORDONE (M_PDR_ERROR | M_PDR_DONE) - -int mutt_getvaluebychar (char ch, struct mapping_t *table) -{ - int i; - - for (i = 0; table[i].name; i++) { - if (ch == table[i].name[0]) - return table[i].value; - } - - return (-1); -} - /* if no uppercase letters are given, do a case-insensitive search */ int mutt_which_case (const char *s) { diff --git a/pgppubring.c b/pgppubring.c index 7b297ed..2f2433c 100644 --- a/pgppubring.c +++ b/pgppubring.c @@ -26,8 +26,7 @@ # include "config.h" #endif -#include -#include +#include #include #include diff --git a/pop/mx_pop.c b/pop/mx_pop.c index c1f2048..0c11d64 100644 --- a/pop/mx_pop.c +++ b/pop/mx_pop.c @@ -9,9 +9,7 @@ #include -#include -#include -#include +#include #include "mutt.h" #include "pop.h" diff --git a/pop/pop.c b/pop/pop.c index 5fe55e4..8610713 100644 --- a/pop/pop.c +++ b/pop/pop.c @@ -14,10 +14,7 @@ #include #include -#include -#include -#include -#include +#include #include diff --git a/pop/pop_auth.c b/pop/pop_auth.c index 5cb2519..cca0e0c 100644 --- a/pop/pop_auth.c +++ b/pop/pop_auth.c @@ -11,9 +11,7 @@ # include "config.h" #endif -#include -#include -#include +#include #include #include "mutt.h" diff --git a/pop/pop_lib.c b/pop/pop_lib.c index b5aa605..e780215 100644 --- a/pop/pop_lib.c +++ b/pop/pop_lib.c @@ -15,11 +15,7 @@ #include #include -#include -#include -#include -#include -#include +#include #include "mutt.h" #include "mx.h" diff --git a/postpone.c b/postpone.c index 174d8e1..9b4e0a6 100644 --- a/postpone.c +++ b/postpone.c @@ -17,12 +17,7 @@ #include #include -#include -#include -#include -#include -#include -#include +#include #include diff --git a/protos.h b/protos.h index 0b5dc6e..d07d699 100644 --- a/protos.h +++ b/protos.h @@ -19,24 +19,14 @@ #include #endif -#include -#include - #define MoreArgs(p) (*p->dptr && *p->dptr != ';' && *p->dptr != '#') -#define mutt_make_string(A,B,C,D,E) _mutt_make_string(A,B,C,D,E,0) -void _mutt_make_string (char *, ssize_t, const char *, CONTEXT *, - HEADER *, format_flag); - -#define mutt_new_enter_state() p_new(ENTER_STATE, 1) - typedef const char *format_t (char *, ssize_t, char, const char *, const char *, const char *, const char *, unsigned long, format_flag); void mutt_FormatString (char *, ssize_t, const char *, format_t *, unsigned long, format_flag); -FILE *mutt_open_read (const char *, pid_t *); void set_quadoption (int, int); int query_quadoption (int, const char *); @@ -45,7 +35,6 @@ int quadoption (int); int mutt_option_value (const char* val, char* dst, ssize_t dstlen); address_t *mutt_default_from (void); -address_t *mutt_remove_duplicates (address_t *); BODY *mutt_make_file_attach (const char *); BODY *mutt_make_message_attach (CONTEXT *, HEADER *, int); @@ -54,8 +43,6 @@ BODY *mutt_make_multipart (BODY *); CONTENT *mutt_get_content_info (const char *fname, BODY * b); -string_list_t *mutt_make_references (ENVELOPE * e); - int mutt_cmp_header (const HEADER*, const HEADER*); int mutt_cmp_addr (const address_t * a, const address_t * b); int mutt_cmp_list (const string_list_t * a, const string_list_t * b); @@ -64,7 +51,6 @@ int mutt_cmp_body (const BODY * b1, const BODY * b2); time_t mutt_decrease_mtime (const char *, struct stat *); void mutt_set_mtime (const char*, const char*); -time_t mutt_parse_date (const char *, HEADER *); int is_from (const char *, char *, ssize_t, time_t *); const char *mutt_charset_hook (const char *); @@ -88,28 +74,18 @@ void mutt_add_to_reference_headers (ENVELOPE * env, ENVELOPE * curenv, void mutt_adv_mktemp (const char*, char*, ssize_t); int mutt_bounce_message (FILE * fp, HEADER *, address_t *); void mutt_check_rescore (CONTEXT *); -void mutt_clear_error (void); void mutt_default_save (char *, ssize_t, HEADER *); void mutt_display_address (ENVELOPE *); void mutt_edit_content_type (HEADER *, BODY *, FILE *); -void mutt_edit_file (const char *, const char *); void mutt_edit_headers (const char *, const char *, HEADER *, char *, ssize_t); -void mutt_curses_error (const char *, ...); -void mutt_curses_message (const char *, ...); void mutt_enter_command (void); void mutt_expand_file_fmt (char *, ssize_t, const char *, const char *); void mutt_expand_fmt (char *, ssize_t, const char *, const char *); void mutt_expand_link (char *, const char *, const char *); void mutt_fix_reply_recipients (ENVELOPE * env); void mutt_folder_hook (char *); -void mutt_format_string (char *, ssize_t, int, int, int, char, const char *, - ssize_t, int); -void mutt_format_s (char *, ssize_t, const char *, const char *); -void mutt_format_s_tree (char *, ssize_t, const char *, const char *); void mutt_forward_intro (FILE * fp, HEADER * cur); void mutt_forward_trailer (FILE * fp); -void mutt_free_color (int fg, int bg); -void mutt_generate_header (char *, ssize_t, HEADER *, int); void mutt_help (int); void mutt_draw_tree (CONTEXT *); void mutt_make_attribution (CONTEXT * ctx, HEADER * cur, FILE * out); @@ -124,18 +100,12 @@ void mutt_message_to_7bit (BODY *, FILE *); #define mutt_mktemp(a) _mutt_mktemp (a, __FILE__, __LINE__) void _mutt_mktemp (char *, const char *, int); -void mutt_paddstr (int, const char *); -void mutt_parse_mime_message (CONTEXT * ctx, HEADER *); -#define mutt_perror(a) _mutt_perror (a, __FILE__, __LINE__) -void _mutt_perror (const char*, const char*,int); void mutt_prepare_envelope (ENVELOPE *, int); void mutt_unprepare_envelope (ENVELOPE *); void mutt_pretty_mailbox (char *); void mutt_pretty_size (char *, ssize_t, long); void mutt_pipe_message (HEADER *); void mutt_print_message (HEADER *); -void mutt_query_exit (void); -void mutt_query_menu (char *, ssize_t); void mutt_safe_path (char *s, ssize_t l, address_t * a); void mutt_save_path (char *s, ssize_t l, address_t * a); void mutt_score_message (CONTEXT *, HEADER *, int); @@ -149,9 +119,7 @@ void _mutt_set_flag (CONTEXT *, HEADER *, int, int, int); #define mutt_set_flag(a,b,c,d) _mutt_set_flag(a,b,c,d,1) void mutt_set_followup_to (ENVELOPE *); void mutt_shell_escape (void); -void mutt_show_error (void); void mutt_stamp_attachment (BODY * a); -void mutt_tabs_to_spaces (char *); void mutt_tag_set_flag (int, int); void mutt_update_encoding (BODY * a); void mutt_version (void); @@ -159,12 +127,8 @@ void mutt_write_references (string_list_t *, FILE *); void mutt_write_address_list (address_t * adr, FILE * fp, int linelen, int display); -int mutt_addwch (wchar_t); -int mutt_alloc_color (int fg, int bg); -int mutt_any_key_to_continue (const char *); int mutt_can_decode (BODY *); int mutt_change_flag (HEADER *, int); -int mutt_check_key (const char *); int mutt_check_menu (const char *); int mutt_check_month (const char *); int mutt_check_overwrite (const char *, const char *, char *, ssize_t, int *, @@ -172,7 +136,6 @@ int mutt_check_overwrite (const char *, const char *, char *, ssize_t, int *, int mutt_check_traditional_pgp (HEADER *, int *); int mutt_command_complete (char *, ssize_t, int, int); int mutt_var_value_complete (char *, ssize_t, int); -int mutt_complete (char *, ssize_t); int mutt_copy_body (FILE *, BODY **, BODY *); int mutt_display_message (HEADER * h); @@ -182,49 +145,31 @@ int mutt_fetch_recips (ENVELOPE * out, ENVELOPE * in, int flags); int mutt_prepare_template (FILE *, CONTEXT *, HEADER *, HEADER *, short); int mutt_resend_message (FILE *, CONTEXT *, HEADER *); -#define mutt_enter_fname(A,B,C,D,E) _mutt_enter_fname(A,B,C,D,E,0,NULL,NULL) -int _mutt_enter_fname (const char *, char *, ssize_t, int *, int, int, - char ***, int *); -#define mutt_get_field(A,B,C,D) _mutt_get_field(A,B,C,D,0,NULL,NULL) -int _mutt_get_field (const char *, char *, ssize_t, int, int, char ***, int *); -int mutt_get_field_unbuffered (char *, char *, ssize_t, int); int mutt_get_hook_type (const char *); int mutt_get_postponed (CONTEXT *, HEADER *, HEADER **, char *, ssize_t); -int mutt_index_menu (void); int mutt_invoke_mta (address_t *, address_t *, address_t *, address_t *, const char *, int); -int mutt_is_mail_list (address_t *); int mutt_is_list_cc (int, address_t *, address_t *); int mutt_is_list_recipient (int, address_t *, address_t *); -int mutt_is_subscribed_list (address_t *); -int mutt_is_valid_mailbox (const char *); int mutt_lookup_mime_type (BODY *, const char *); int mutt_match_spam_list (const char *, SPAM_LIST *, char *, int); -int mutt_multi_choice (char *prompt, char *letters); int mutt_num_postponed (int); int mutt_parse_bind (BUFFER *, BUFFER *, unsigned long, BUFFER *); int mutt_parse_exec (BUFFER *, BUFFER *, unsigned long, BUFFER *); -int mutt_parse_color (BUFFER *, BUFFER *, unsigned long, BUFFER *); -int mutt_parse_uncolor (BUFFER *, BUFFER *, unsigned long, BUFFER *); int mutt_parse_hook (BUFFER *, BUFFER *, unsigned long, BUFFER *); int mutt_parse_macro (BUFFER *, BUFFER *, unsigned long, BUFFER *); -int mutt_parse_mono (BUFFER *, BUFFER *, unsigned long, BUFFER *); -int mutt_parse_unmono (BUFFER *, BUFFER *, unsigned long, BUFFER *); int mutt_parse_push (BUFFER *, BUFFER *, unsigned long, BUFFER *); int mutt_parse_rc_line ( /* const */ char *, BUFFER *, BUFFER *); int mutt_parse_score (BUFFER *, BUFFER *, unsigned long, BUFFER *); int mutt_parse_unscore (BUFFER *, BUFFER *, unsigned long, BUFFER *); int mutt_parse_unhook (BUFFER *, BUFFER *, unsigned long, BUFFER *); int mutt_pattern_func (int, char *); -int mutt_query_complete (char *, ssize_t); int mutt_query_variables (string_list_t * queries); int _mutt_save_message (HEADER *, CONTEXT *, int, int, int); int mutt_save_message (HEADER *, int, int, int, int *); int mutt_search_command (int, int); -int mutt_strwidth (const char *); int mutt_compose_menu (HEADER *, char *, ssize_t, HEADER *); int mutt_thread_set_flag (HEADER *, int, int, int); -int mutt_user_is_recipient (HEADER *); void mutt_update_num_postponed (void); int mutt_which_case (const char *); int mutt_write_fcc (const char *path, HEADER * hdr, const char *msgid, int, @@ -232,24 +177,15 @@ int mutt_write_fcc (const char *path, HEADER * hdr, const char *msgid, int, int mutt_write_mime_body (BODY *, FILE *); int mutt_write_mime_header (BODY *, FILE *); int mutt_write_rfc822_header (FILE *, ENVELOPE *, BODY *, int, int); -int mutt_yesorno (const char *, int); -void mutt_set_header_color (CONTEXT *, HEADER *); void mutt_sleep (short); int mutt_save_confirm (const char *, struct stat *); -int mh_valid_message (const char *); - /* base64.c */ void mutt_to_base64 (unsigned char *, const unsigned char *, ssize_t, ssize_t); int mutt_from_base64 (char *, const char *); -#define IsPrint(c) (isprint((unsigned char)(c)) || \ - (option (OPTLOCALES) ? 0 : \ - ((unsigned char)(c) >= 0xa0))) -#define IsWPrint(wc) (iswprint(wc) || \ - (option (OPTLOCALES) ? 0 : (wc >= 0xa0))) - #define new_pattern() p_new(pattern_t, 1) +#define mutt_new_enter_state() p_new(ENTER_STATE, 1) int mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT * ctx, HEADER * h); @@ -257,6 +193,17 @@ pattern_t *mutt_pattern_comp ( /* const */ char *s, int flags, BUFFER * err); void mutt_check_simple (char *s, ssize_t len, const char *simple); void mutt_pattern_free (pattern_t ** pat); -/* unsorted */ void ci_bounce_message (HEADER *, int *); int ci_send_message (int, HEADER *, char *, CONTEXT *, HEADER *); + +/* flags for mutt_extract_token() */ +#define M_TOKEN_EQUAL 1 /* treat '=' as a special */ +#define M_TOKEN_CONDENSE (1<<1) /* ^(char) to control chars (macros) */ +#define M_TOKEN_SPACE (1<<2) /* don't treat whitespace as a term */ +#define M_TOKEN_QUOTE (1<<3) /* don't interpret quotes */ +#define M_TOKEN_PATTERN (1<<4) /* !)|~ are terms (for patterns) */ +#define M_TOKEN_COMMENT (1<<5) /* don't reap comments */ +#define M_TOKEN_SEMICOLON (1<<6) /* don't treat ; as special */ + +int mutt_extract_token(BUFFER *, BUFFER *, int); + diff --git a/recvattach.c b/recvattach.c index b456131..c2fec5e 100644 --- a/recvattach.c +++ b/recvattach.c @@ -12,12 +12,7 @@ # include "config.h" #endif -#include -#include -#include -#include -#include -#include +#include #include diff --git a/recvcmd.c b/recvcmd.c index 5b1cfaa..d7234f9 100644 --- a/recvcmd.c +++ b/recvcmd.c @@ -11,11 +11,7 @@ # include "config.h" #endif -#include -#include -#include -#include -#include +#include #include diff --git a/remailer.c b/remailer.c index b22f0b6..fa23865 100644 --- a/remailer.c +++ b/remailer.c @@ -22,13 +22,7 @@ #include #include -#include -#include -#include -#include -#include -#include -#include +#include #include diff --git a/score.c b/score.c index aae4e0a..061d84c 100644 --- a/score.c +++ b/score.c @@ -11,9 +11,7 @@ # include "config.h" #endif -#include -#include -#include +#include #include "mutt.h" #include "sort.h" diff --git a/send.c b/send.c index fd0341b..4039463 100644 --- a/send.c +++ b/send.c @@ -23,12 +23,7 @@ #include #include -#include -#include -#include -#include -#include -#include +#include #include #include @@ -585,25 +580,6 @@ int mutt_fetch_recips (ENVELOPE * out, ENVELOPE * in, int flags) return 0; } -string_list_t *mutt_make_references (ENVELOPE * e) -{ - string_list_t *t = NULL, *l = NULL; - - if (e->references) - l = string_list_dup(e->references); - else - l = string_list_dup(e->in_reply_to); - - if (e->message_id) { - t = string_item_new(); - t->data = m_strdup(e->message_id); - t->next = l; - l = t; - } - - return l; -} - void mutt_fix_reply_recipients (ENVELOPE * env) { mutt_expand_aliases_env (env); @@ -617,8 +593,8 @@ void mutt_fix_reply_recipients (ENVELOPE * env) } /* the CC field can get cluttered, especially with lists */ - env->to = mutt_remove_duplicates (env->to); - env->cc = mutt_remove_duplicates (env->cc); + address_list_uniq(&env->to); + address_list_uniq(&env->cc); env->cc = mutt_remove_xrefs (env->to, env->cc); if (env->cc && !env->to) { @@ -656,6 +632,25 @@ void mutt_make_misc_reply_headers (ENVELOPE * env, CONTEXT * ctx, #endif } +static string_list_t *mutt_make_references (ENVELOPE * e) +{ + string_list_t *t = NULL, *l = NULL; + + if (e->references) + l = string_list_dup(e->references); + else + l = string_list_dup(e->in_reply_to); + + if (e->message_id) { + t = string_item_new(); + t->data = m_strdup(e->message_id); + t->next = l; + l = t; + } + + return l; +} + void mutt_add_to_reference_headers (ENVELOPE * env, ENVELOPE * curenv, string_list_t *** pp, string_list_t *** qq) { @@ -925,7 +920,7 @@ void mutt_set_followup_to (ENVELOPE * e) } } - e->mail_followup_to = mutt_remove_duplicates(e->mail_followup_to); + address_list_uniq(&e->mail_followup_to); } } diff --git a/sendlib.c b/sendlib.c index 2c5611a..3759212 100644 --- a/sendlib.c +++ b/sendlib.c @@ -24,11 +24,7 @@ #include #include -#include -#include -#include -#include -#include +#include #include #include @@ -2163,41 +2159,6 @@ int mutt_bounce_message (FILE * fp, HEADER * h, address_t * to) return ret; } - -/* given a list of addresses, return a list of unique addresses */ -address_t *mutt_remove_duplicates (address_t * addr) -{ - address_t *top = addr; - address_t **last = ⊤ - address_t *tmp; - int dodup = 0; - - while (addr) { - for (tmp = top; tmp && tmp != addr; tmp = tmp->next) { - if (tmp->mailbox && addr->mailbox && - !ascii_strcasecmp (addr->mailbox, tmp->mailbox)) { - dodup = 1; - break; - } - } - - if (dodup) { - *last = addr->next; - - addr->next = NULL; - address_list_wipe(&addr); - - addr = *last; - } - else { - last = &addr->next; - addr = addr->next; - } - } - - return (top); -} - static void set_noconv_flags (BODY * b, short flag) { for (; b; b = b->next) { diff --git a/sort.c b/sort.c index 9798823..2b70001 100644 --- a/sort.c +++ b/sort.c @@ -16,8 +16,7 @@ #include #include -#include -#include +#include #include "mutt.h" #include "alias.h" diff --git a/sort.h b/sort.h index fd9efa0..50c017b 100644 --- a/sort.h +++ b/sort.h @@ -42,5 +42,4 @@ WHERE short SortAlias INITVAL (SORT_ALIAS); /* FIXME: This one does not belong to here */ WHERE short PgpSortKeys INITVAL (SORT_ADDRESS); -#include extern const struct mapping_t SortMethods[]; diff --git a/thread.c b/thread.c index ed690f2..57cfada 100644 --- a/thread.c +++ b/thread.c @@ -11,8 +11,7 @@ # include "config.h" #endif -#include -#include +#include #include "mutt.h" #include "sort.h" diff --git a/xterm.h b/xterm.h index 31b153e..37dac4b 100644 --- a/xterm.h +++ b/xterm.h @@ -6,7 +6,7 @@ #ifndef MUTT_XTERM_H #define MUTT_XTERM_H -#include +#include #include /* sets the current xterm's title */