]> granicus.if.org Git - mutt/commitdiff
Declare many structures const (closes #3552)
authorDan Fandrich <dan@coneharvesters.com>
Sat, 3 Dec 2011 19:13:10 +0000 (11:13 -0800)
committerDan Fandrich <dan@coneharvesters.com>
Sat, 3 Dec 2011 19:13:10 +0000 (11:13 -0800)
Many structs used in mutt are actually constant but are defined
without the 'const' keyword. This can slow initialization (slightly)
in some environments due to extra copying and increases the amount of
writable RAM required at run-time, which can be significant on non-MMU
systems. Using const can also increase the opportunities for compiler
optimization.

The attached patch marks many such structures as const. On my test x86
build, this reduces the size of .data by over 50%.

43 files changed:
addrbook.c
browser.c
charset.c
color.c
compose.c
crypt-gpgme.c
curs_lib.c
curs_main.c
date.c
enter.c
functions.h
globals.h
handler.c
help.c
imap/auth.c
imap/command.c
imap/message.c
imap/utf7.c
imap/util.c
init.c
init.h
keymap.c
keymap.h
lib.c
mapping.h
mime.h
mutt_ssl.c
pager.c
parse.c
pattern.c
pgpkey.c
pgpmicalg.c
pop_auth.c
postpone.c
protos.h
query.c
recvattach.c
remailer.c
rfc2047.c
rfc822.c
rfc822.h
sendlib.c
url.c

index 7d82cf5782836d168527fc95fdc0ee1169dac7ab..8767a00fcc9acce67e48da512f77a0ad534f5ff0 100644 (file)
@@ -33,7 +33,7 @@
 
 #define RSORT(x) (SortAlias & SORT_REVERSE) ? -x : x
 
-static struct mapping_t AliasHelp[] = {
+static const struct mapping_t AliasHelp[] = {
   { N_("Exit"),   OP_EXIT },
   { N_("Del"),    OP_DELETE },
   { N_("Undel"),  OP_UNDELETE },
index 3cc2493922f02f9c99ae72974f1101f0b6ef7aaa..cda4900a32d556c93a481213f92e24a1844216bd 100644 (file)
--- a/browser.c
+++ b/browser.c
@@ -42,7 +42,7 @@
 #include <errno.h>
 #include <locale.h>
 
-static struct mapping_t FolderHelp[] = {
+static const struct mapping_t FolderHelp[] = {
   { N_("Exit"),  OP_EXIT },
   { N_("Chdir"), OP_CHANGE_DIRECTORY },
   { N_("Mask"),  OP_ENTER_MASK },
index fd011a4954a3985335403aaafa4169dcd284e0e8..9dd278ee53957a22746fed55db766cf493616f56 100644 (file)
--- a/charset.c
+++ b/charset.c
  * a preferred MIME name is given.
  */
 
-static struct 
+static const const struct 
 {
-  char *key;
-  char *pref;
+  const char *key;
+  const char *pref;
 }
 PreferredMIMENames[] = 
 {
diff --git a/color.c b/color.c
index b39957f0c593697e995b21ef005df429678a60b9..db8266d0ba51741aeb5e2a5df3469370b0b990d2 100644 (file)
--- a/color.c
+++ b/color.c
@@ -55,7 +55,7 @@ typedef struct color_list
 static COLOR_LIST *ColorList = NULL;
 static int UserColors = 0;
 
-static struct mapping_t Colors[] =
+static const struct mapping_t Colors[] =
 {
   { "black",   COLOR_BLACK },
   { "blue",    COLOR_BLUE },
@@ -73,7 +73,7 @@ static struct mapping_t Colors[] =
 
 #endif /* HAVE_COLOR */
 
-static struct mapping_t Fields[] =
+static const struct mapping_t Fields[] =
 {
   { "hdrdefault",      MT_COLOR_HDEFAULT },
   { "quoted",          MT_COLOR_QUOTED },
@@ -159,7 +159,7 @@ void ci_start_color (void)
 #ifdef USE_SLANG_CURSES
 static char *get_color_name (char *dest, size_t destlen, int val)
 {
-  static char * missing[3] = {"brown", "lightgray", "default"};
+  static const char * const missing[3] = {"brown", "lightgray", "default"};
   int i;
 
   switch (val)
index 3b7cb173067e368cd95209d6a2ad66848784c470..edda021da1a8c0ced1f33f338ce7217226bf2659 100644 (file)
--- a/compose.c
+++ b/compose.c
@@ -74,7 +74,7 @@ enum
 #define TITLE_FMT "%10s" /* Used for Prompts, which are ASCII */
 #define W (COLS - HDR_XOFFSET)
 
-static char *Prompts[] =
+static const char * const Prompts[] =
 {
   "From: ",
   "To: ",
@@ -85,7 +85,7 @@ static char *Prompts[] =
   "Fcc: "
 };
 
-static struct mapping_t ComposeHelp[] = {
+static const struct mapping_t ComposeHelp[] = {
   { N_("Send"),    OP_COMPOSE_SEND_MESSAGE },
   { N_("Abort"),   OP_EXIT },
   { "To",      OP_COMPOSE_EDIT_TO },
index b1da88bfcd15f536edfc1a42da84238bea432d96..3ef629db00fcc0f056279eca78950666afb8ba0b 100644 (file)
@@ -129,7 +129,7 @@ static char *current_sender = NULL;
  * General helper functions.
  */
 
-/* return true when S pints to a didgit or letter. */
+/* return true when s points to a digit or letter. */
 static int
 digit_or_letter (const unsigned char *s)
 {
@@ -2923,7 +2923,7 @@ print_dn_part (FILE *fp, struct dn_array_s *dn, const char *key)
 static void
 print_dn_parts (FILE *fp, struct dn_array_s *dn)
 {
-  const char *stdpart[] = {
+  static const char * const stdpart[] = {
     "CN", "OU", "O", "STREET", "L", "ST", "C", NULL 
   };
   int any=0, any2=0, i;
index 7f88cc93635577e7671957c22e50a0d438c3f36b..291149062b17782114360258a907c90de57752a0 100644 (file)
@@ -129,7 +129,7 @@ event_t mutt_getch (void)
   return (ch == ctrl ('G') ? err : ret);
 }
 
-int _mutt_get_field (/* const */ char *field, char *buf, size_t buflen, int complete, int multiple, char ***files, int *numfiles)
+int _mutt_get_field (const char *field, char *buf, size_t buflen, int complete, int multiple, char ***files, int *numfiles)
 {
   int ret;
   int x, y;
@@ -139,7 +139,7 @@ int _mutt_get_field (/* const */ char *field, char *buf, size_t buflen, int comp
   do
   {
     CLEARLINE (LINES-1);
-    addstr (field);
+    addstr ((char *)field); /* cast to get around bad prototypes */
     mutt_refresh ();
     getyx (stdscr, y, x);
     ret = _mutt_enter_string (buf, buflen, y, x, complete, multiple, files, numfiles, es);
index dd2ac3986a634bd8573026c75d297650fe98b54f..302082b49765a45f1f43bd3908f84c89b4cf6b76 100644 (file)
@@ -401,7 +401,7 @@ static void resort_index (MUTTMENU *menu)
   menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
 }
 
-static struct mapping_t IndexHelp[] = {
+static const struct mapping_t IndexHelp[] = {
   { N_("Quit"),  OP_QUIT },
   { N_("Del"),   OP_DELETE },
   { N_("Undel"), OP_UNDELETE },
diff --git a/date.c b/date.c
index a2f000486df49009ed6d9b8e924d0be599265c80..0cd831228ab61a8d0d444f68b3fba92c13249ed3 100644 (file)
--- a/date.c
+++ b/date.c
@@ -69,7 +69,7 @@ time_t mutt_mktime (struct tm *t, int local)
 {
   time_t g;
 
-  static int AccumDaysPerMonth[12] = {
+  static const int AccumDaysPerMonth[12] = {
     0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
   };
 
@@ -118,7 +118,7 @@ static int isLeapYearFeb (struct tm *tm)
 
 void mutt_normalize_time (struct tm *tm)
 {
-  static char DaysPerMonth[12] = {
+  static const char DaysPerMonth[12] = {
     31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
   };
   int nLeap;
diff --git a/enter.c b/enter.c
index 9f8a45e6018819018510dd9238988972bfb64512..ac083f5c64f14fcd2de71e5efc2aa3928e87481b 100644 (file)
--- a/enter.c
+++ b/enter.c
@@ -191,7 +191,7 @@ static void replace_part (ENTER_STATE *state, size_t from, char *buf)
  */
 static inline int is_shell_char(wchar_t ch)
 {
-  static wchar_t shell_chars[] = L"<>&()$?*;{}| "; /* ! not included because it can be part of a pathname in Mutt */
+  static const wchar_t shell_chars[] = L"<>&()$?*;{}| "; /* ! not included because it can be part of a pathname in Mutt */
   return wcschr(shell_chars, ch) != NULL;
 }
 
index e8beacb4c80b74f812c763d4ebf27e481431b0f8..7a1c5a9f126b7da177fbbee023acacab45af07e3 100644 (file)
@@ -38,7 +38,7 @@
 # include "doc/makedoc-defs.h"
 #endif
 
-struct binding_t OpGeneric[] = { /* map: generic */
+const struct binding_t OpGeneric[] = { /* map: generic */
   /*
   ** <para>
   ** The <emphasis>generic</emphasis> menu is not a real menu, but specifies common functions
@@ -82,7 +82,7 @@ struct binding_t OpGeneric[] = { /* map: generic */
   { NULL,              0,                      NULL }
 };
 
-struct binding_t OpMain[] = { /* map: index */
+const struct binding_t OpMain[] = { /* map: index */
   { "create-alias",            OP_CREATE_ALIAS,                "a" },
   { "bounce-message",          OP_BOUNCE_MESSAGE,              "b" },
   { "break-thread",            OP_MAIN_BREAK_THREAD,           "#" },
@@ -172,7 +172,7 @@ struct binding_t OpMain[] = { /* map: index */
   { NULL,                      0,                              NULL }
 };
 
-struct binding_t OpPager[] = { /* map: pager */
+const struct binding_t OpPager[] = { /* map: pager */
   { "break-thread",    OP_MAIN_BREAK_THREAD,           "#" },
   { "create-alias",    OP_CREATE_ALIAS,                "a" },
   { "bounce-message",  OP_BOUNCE_MESSAGE,              "b" },
@@ -275,7 +275,7 @@ struct binding_t OpPager[] = { /* map: pager */
   { NULL,              0,                              NULL }
 };
 
-struct binding_t OpAttach[] = { /* map: attachment */
+const struct binding_t OpAttach[] = { /* map: attachment */
   { "bounce-message",  OP_BOUNCE_MESSAGE,              "b" },
   { "display-toggle-weed",     OP_DISPLAY_HEADERS,     "h" },
   { "edit-type",       OP_EDIT_TYPE,                   "\005" },
@@ -301,7 +301,7 @@ struct binding_t OpAttach[] = { /* map: attachment */
   { NULL,              0,                              NULL }
 };
 
-struct binding_t OpCompose[] = { /* map: compose */
+const struct binding_t OpCompose[] = { /* map: compose */
   { "attach-file",     OP_COMPOSE_ATTACH_FILE,         "a" },
   { "attach-message",  OP_COMPOSE_ATTACH_MESSAGE,      "A" },
   { "edit-bcc",                OP_COMPOSE_EDIT_BCC,            "b" },
@@ -351,13 +351,13 @@ struct binding_t OpCompose[] = { /* map: compose */
   { NULL,              0,                              NULL }
 };
 
-struct binding_t OpPost[] = { /* map: postpone */
+const struct binding_t OpPost[] = { /* map: postpone */
   { "delete-entry",    OP_DELETE,      "d" },
   { "undelete-entry",  OP_UNDELETE,    "u" },
   { NULL,              0,              NULL }
 };
 
-struct binding_t OpAlias[] = { /* map: alias */
+const struct binding_t OpAlias[] = { /* map: alias */
   { "delete-entry",    OP_DELETE,      "d" },
   { "undelete-entry",  OP_UNDELETE,    "u" },
   { NULL,              0,              NULL }
@@ -365,7 +365,7 @@ struct binding_t OpAlias[] = { /* map: alias */
   
 
 /* The file browser */
-struct binding_t OpBrowser[] = { /* map: browser */
+const struct binding_t OpBrowser[] = { /* map: browser */
   { "change-dir",      OP_CHANGE_DIRECTORY,    "c" },
   { "display-filename",        OP_BROWSER_TELL,        "@" },
   { "enter-mask",      OP_ENTER_MASK,          "m" },
@@ -388,7 +388,7 @@ struct binding_t OpBrowser[] = { /* map: browser */
 };
 
 /* External Query Menu */
-struct binding_t OpQuery[] = { /* map: query */
+const struct binding_t OpQuery[] = { /* map: query */
   { "create-alias",    OP_CREATE_ALIAS,        "a" },
   { "mail",            OP_MAIL,                "m" },
   { "query",           OP_QUERY,               "Q" },
@@ -396,7 +396,7 @@ struct binding_t OpQuery[] = { /* map: query */
   { NULL,              0,                      NULL }
 };
 
-struct binding_t OpEditor[] = { /* map: editor */
+const struct binding_t OpEditor[] = { /* map: editor */
   { "bol",             OP_EDITOR_BOL,                  "\001" },
   { "backward-char",   OP_EDITOR_BACKWARD_CHAR,        "\002" },
   { "backward-word",   OP_EDITOR_BACKWARD_WORD,        "\033b"},
@@ -424,7 +424,7 @@ struct binding_t OpEditor[] = { /* map: editor */
 
 
 
-struct binding_t OpPgp[] = { /* map: pgp */
+const struct binding_t OpPgp[] = { /* map: pgp */
   { "verify-key",      OP_VERIFY_KEY,          "c" },
   { "view-name",       OP_VIEW_ID,             "%" },
   { NULL,              0,                              NULL }
@@ -434,7 +434,7 @@ struct binding_t OpPgp[] = { /* map: pgp */
 
 /* When using the GPGME based backend we have some useful functions
    for the SMIME menu.  */
-struct binding_t OpSmime[] = { /* map: smime */
+const struct binding_t OpSmime[] = { /* map: smime */
 #ifdef CRYPT_BACKEND_GPGME
   { "verify-key",    OP_VERIFY_KEY,             "c" },
   { "view-name",     OP_VIEW_ID,               "%" },
@@ -445,7 +445,7 @@ struct binding_t OpSmime[] = { /* map: smime */
 
 
 #ifdef MIXMASTER
-struct binding_t OpMix[] = { /* map: mixmaster */
+const struct binding_t OpMix[] = { /* map: mixmaster */
   { "accept",          OP_MIX_USE,     M_ENTER_S },
   { "append",          OP_MIX_APPEND,  "a"       },
   { "insert",          OP_MIX_INSERT,  "i"       },
index 5aec53007177209d3d76ef88a9b960ef48daf7f3..6fefe5b030e86bd797e07872626a1f32eee612c7 100644 (file)
--- a/globals.h
+++ b/globals.h
@@ -266,14 +266,14 @@ WHERE char *SmimeGetCertEmailCommand;
 
 
 #ifdef MAIN_C
-const char *Weekdays[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
-const char *Months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "ERR" };
+const char * const Weekdays[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+const char * const Months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "ERR" };
 
-const char *BodyTypes[] = { "x-unknown", "audio", "application", "image", "message", "model", "multipart", "text", "video" };
-const char *BodyEncodings[] = { "x-unknown", "7bit", "8bit", "quoted-printable", "base64", "binary", "x-uuencoded" };
+const char * const BodyTypes[] = { "x-unknown", "audio", "application", "image", "message", "model", "multipart", "text", "video" };
+const char * const BodyEncodings[] = { "x-unknown", "7bit", "8bit", "quoted-printable", "base64", "binary", "x-uuencoded" };
 #else
-extern const char *Weekdays[];
-extern const char *Months[];
+extern const char * const Weekdays[];
+extern const char * const Months[];
 #endif
 
 #ifdef MAIN_C
index 39b7979bc9072c581aacf3e52926dbfe199d0ef3..13c89ecc5194e31abc6e165348360281fdcd8fe7 100644 (file)
--- a/handler.c
+++ b/handler.c
@@ -43,7 +43,7 @@
 
 typedef int (*handler_t) (BODY *, STATE *);
 
-int Index_hex[128] = {
+const int Index_hex[128] = {
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
@@ -54,7 +54,7 @@ int Index_hex[128] = {
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1
 };
 
-int Index_64[128] = {
+const int Index_64[128] = {
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
@@ -434,7 +434,7 @@ enum { RICH_PARAM=0, RICH_BOLD, RICH_UNDERLINE, RICH_ITALIC, RICH_NOFILL,
   RICH_INDENT, RICH_INDENT_RIGHT, RICH_EXCERPT, RICH_CENTER, RICH_FLUSHLEFT,
   RICH_FLUSHRIGHT, RICH_COLOR, RICH_LAST_TAG };
 
-static struct {
+static const struct {
   const wchar_t *tag_name;
   int index;
 } EnrichedTags[] = {
diff --git a/help.c b/help.c
index 6d54059fd69d3631b1cd48da3b306bda728f80f5..c1d2d0c69e50154fc390a547b88b71d1d38c29fe 100644 (file)
--- a/help.c
+++ b/help.c
 #include <ctype.h>
 #include <string.h>
 
-static struct binding_t *help_lookupFunction (int op, int menu)
+static const struct binding_t *help_lookupFunction (int op, int menu)
 {
   int i;
-  struct binding_t *map;
+  const struct binding_t *map;
 
   if (menu != MENU_PAGER)
   {
@@ -66,7 +66,7 @@ void mutt_make_help (char *d, size_t dlen, char *txt, int menu, int op)
 }
 
 char *
-mutt_compile_help (char *buf, size_t buflen, int menu, struct mapping_t *items)
+mutt_compile_help (char *buf, size_t buflen, int menu, const struct mapping_t *items)
 {
   int i;
   size_t len;
@@ -282,7 +282,7 @@ static void format_line (FILE *f, int ismacro,
 static void dump_menu (FILE *f, int menu)
 {
   struct keymap_t *map;
-  struct binding_t *b;
+  const struct binding_t *b;
   char buf[SHORT_STRING];
 
   /* browse through the keymap table */
@@ -318,7 +318,7 @@ static int is_bound (struct keymap_t *map, int op)
 }
 
 static void dump_unbound (FILE *f,
-                         struct binding_t *funcs,
+                         const struct binding_t *funcs,
                          struct keymap_t *map,
                          struct keymap_t *aux)
 {
@@ -336,9 +336,9 @@ void mutt_help (int menu)
 {
   char t[_POSIX_PATH_MAX];
   char buf[SHORT_STRING];
-  char *desc;
+  const char *desc;
   FILE *f;
-  struct binding_t *funcs;
+  const struct binding_t *funcs;
 
   mutt_mktemp (t, sizeof (t));
 
index 6ac2925174dda431b96d990cd0ad92cc170ecd3a..8a7f0789dfa85a506af8af6add0b013c5fc177df 100644 (file)
@@ -28,7 +28,7 @@
 #include "imap_private.h"
 #include "auth.h"
 
-static imap_auth_t imap_authenticators[] = {
+static const imap_auth_t imap_authenticators[] = {
 #ifdef USE_SASL
   { imap_auth_sasl, NULL },
 #else
@@ -50,7 +50,7 @@ static imap_auth_t imap_authenticators[] = {
  *   authentication method if specified, or any. */
 int imap_authenticate (IMAP_DATA* idata)
 {
-  imap_auth_t* authenticator;
+  const imap_auth_t* authenticator;
   char* methods;
   char* method;
   char* delim;
index 18e1a57c3df8617e29581523bddf821f631576e2..70e7d4814bfdf2ae686c648f2bbef99d7affd8ee 100644 (file)
@@ -53,7 +53,7 @@ static void cmd_parse_myrights (IMAP_DATA* idata, const char* s);
 static void cmd_parse_search (IMAP_DATA* idata, const char* s);
 static void cmd_parse_status (IMAP_DATA* idata, char* s);
 
-static char *Capabilities[] = {
+static const char * const Capabilities[] = {
   "IMAP4",
   "IMAP4rev1",
   "STATUS",
index 3c7a38e89ced57f15e887f1b47290641091b6b46..d318b6935592870e38373ccc2fd7792c66d9ba7d 100644 (file)
@@ -71,7 +71,7 @@ int imap_read_headers (IMAP_DATA* idata, int msgbegin, int msgend)
   int rc, mfhrc, oldmsgcount;
   int fetchlast = 0;
   int maxuid = 0;
-  const char *want_headers = "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE CONTENT-DESCRIPTION IN-REPLY-TO REPLY-TO LINES LIST-POST X-LABEL";
+  static const char * const want_headers = "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE CONTENT-DESCRIPTION IN-REPLY-TO REPLY-TO LINES LIST-POST X-LABEL";
   progress_t progress;
   int retval = -1;
 
index cf2ecb4edd573a4f8f8437dad4d5412be7e9ef0e..a433971c42088ca079a0968fb27e01949745aa12 100644 (file)
@@ -24,7 +24,7 @@
 #include "charset.h"
 #include "imap_private.h"
 
-static int Index_64[128] = {
+static const int Index_64[128] = {
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
     -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, 63,-1,-1,-1,
@@ -35,7 +35,7 @@ static int Index_64[128] = {
     41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
 };
 
-static char B64Chars[64] = {
+static const char B64Chars[64] = {
   'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
   'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
   'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
index b38268e22dc543472e906c6f1d00a06eb16f43c7..f7e0ef5aa444932226f524e4c644166c93efdd0d 100644 (file)
@@ -612,7 +612,8 @@ void imap_qualify_path (char *dest, size_t len, IMAP_MBOX *mx, char* path)
  *   surround string with quotes, escape " and \ with \ */
 void imap_quote_string (char *dest, size_t dlen, const char *src)
 {
-  char quote[] = "\"\\", *pt;
+  static const char quote[] = "\"\\";
+  char *pt;
   const char *s;
 
   pt = dest;
diff --git a/init.c b/init.c
index 7773a920a53e2a9539843aff92321afdb24a11dd..efdba2dbb1f907e802963a3354b2c463bf2bdb52 100644 (file)
--- a/init.c
+++ b/init.c
@@ -1691,7 +1691,8 @@ static int parse_set (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err)
 {
   int query, unset, inv, reset, r = 0;
   int idx = -1;
-  char *p, scratch[_POSIX_PATH_MAX];
+  const char *p;
+  char scratch[_POSIX_PATH_MAX];
   char* myvar;
 
   while (MoreArgs (s))
@@ -2113,7 +2114,7 @@ static int parse_set (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err)
     {
       if (query)
       {
-       char *vals[] = { "no", "yes", "ask-no", "ask-yes" };
+       static const char * const vals[] = { "no", "yes", "ask-no", "ask-yes" };
 
        snprintf (err->data, err->dsize, "%s=%s", MuttVars[idx].option,
                  vals [ quadoption (MuttVars[idx].data) ]);
@@ -2481,7 +2482,7 @@ int mutt_command_complete (char *buffer, size_t len, int pos, int numtabs)
           || !mutt_strncmp (buffer, "reset", 5)
           || !mutt_strncmp (buffer, "toggle", 6))
   {            /* complete variables */
-    char *prefixes[] = { "no", "inv", "?", "&", 0 };
+    static const char * const prefixes[] = { "no", "inv", "?", "&", 0 };
     
     pt++;
     /* loop through all the possible prefixes (no, inv, ...) */
@@ -2533,7 +2534,7 @@ int mutt_command_complete (char *buffer, size_t len, int pos, int numtabs)
   }
   else if (!mutt_strncmp (buffer, "exec", 4))
   {
-    struct binding_t *menu = km_get_table (CurrentMenu);
+    const struct binding_t *menu = km_get_table (CurrentMenu);
 
     if (!menu && CurrentMenu != MENU_PAGER)
       menu = OpGeneric;
@@ -2632,7 +2633,7 @@ int mutt_var_value_complete (char *buffer, size_t len, int pos)
 static int var_to_string (int idx, char* val, size_t len)
 {
   char tmp[LONG_STRING];
-  char *vals[] = { "no", "yes", "ask-no", "ask-yes" };
+  static const char * const vals[] = { "no", "yes", "ask-no", "ask-yes" };
 
   tmp[0] = '\0';
 
@@ -2663,7 +2664,7 @@ static int var_to_string (int idx, char* val, size_t len)
   else if (DTYPE (MuttVars[idx].type) == DT_SORT)
   {
     const struct mapping_t *map;
-    char *p;
+    const char *p;
 
     switch (MuttVars[idx].type & DT_SUBTYPE_MASK)
     {
@@ -2789,7 +2790,7 @@ int mutt_dump_variables (void)
   return 0;
 }
 
-char *mutt_getnamebyvalue (int val, const struct mapping_t *map)
+const char *mutt_getnamebyvalue (int val, const struct mapping_t *map)
 {
   int i;
 
@@ -3150,7 +3151,7 @@ void mutt_init (int skip_sys_rc, LIST *commands)
 
 int mutt_get_hook_type (const char *name)
 {
-  struct command_t *c;
+  const struct command_t *c;
 
   for (c = Commands ; c->name ; c++)
     if (c->func == mutt_parse_hook && ascii_strcasecmp (c->name, name) == 0)
diff --git a/init.h b/init.h
index 09dfbf28f51f0c79f0f17ffd7b836f55ef739f83..360886a1e2bc937e5f03f2bb8dcc65063c11a012 100644 (file)
--- a/init.h
+++ b/init.h
@@ -3488,7 +3488,7 @@ struct command_t
   unsigned long data;
 };
 
-struct command_t Commands[] = {
+const struct command_t Commands[] = {
   { "alternates",      parse_alternates,       0 },
   { "unalternates",    parse_unalternates,     0 },
 #ifdef USE_SOCKET
index d82310a7b038cfa0f0caeba1cb0d61ff112bef48..56ec05d3eb0cf88d25b02c8972a8b26b774c100b 100644 (file)
--- a/keymap.c
+++ b/keymap.c
@@ -36,7 +36,7 @@
 
 #include "functions.h"
 
-struct mapping_t Menus[] = {
+const struct mapping_t Menus[] = {
  { "alias",    MENU_ALIAS },
  { "attach",   MENU_ATTACH },
  { "browser",  MENU_FOLDER },
@@ -298,7 +298,7 @@ void km_bindkey (char *s, int menu, int op)
   km_bind (s, menu, op, NULL, NULL);
 }
 
-static int get_op (struct binding_t *bindings, const char *start, size_t len)
+static int get_op (const struct binding_t *bindings, const char *start, size_t len)
 {
   int i;
 
@@ -312,7 +312,7 @@ static int get_op (struct binding_t *bindings, const char *start, size_t len)
   return OP_NULL;
 }
 
-static char *get_func (struct binding_t *bindings, int op)
+static char *get_func (const struct binding_t *bindings, int op)
 {
   int i;
 
@@ -366,7 +366,7 @@ static void push_string (char *s)
         * skip the '<' and the '>' when comparing */
        for (i = 0; Menus[i].name; i++)
        {
-         struct binding_t *binding = km_get_table (Menus[i].value);
+         const struct binding_t *binding = km_get_table (Menus[i].value);
          if (binding)
          {
            op = get_op (binding, pp + 1, l - 2);
@@ -465,7 +465,7 @@ int km_dokey (int menu)
     if (tmp.op)
     {
       char *func = NULL;
-      struct binding_t *bindings;
+      const struct binding_t *bindings;
 
       /* is this a valid op for this menu? */
       if ((bindings = km_get_table (menu)) &&
@@ -540,7 +540,7 @@ int km_dokey (int menu)
   /* not reached */
 }
 
-static void create_bindings (struct binding_t *map, int menu)
+static void create_bindings (const struct binding_t *map, int menu)
 {
   int i;
 
@@ -549,10 +549,10 @@ static void create_bindings (struct binding_t *map, int menu)
       km_bindkey (map[i].seq, menu, map[i].op);
 }
 
-char *km_keyname (int c)
+static const char *km_keyname (int c)
 {
   static char buf[10];
-  char *p;
+  const char *p;
 
   if ((p = mutt_getnamebyvalue (c, KeyNames)))
     return p;
@@ -911,7 +911,7 @@ error:
 }
 
 static int
-try_bind (char *key, int menu, char *func, struct binding_t *bindings)
+try_bind (char *key, int menu, char *func, const struct binding_t *bindings)
 {
   int i;
   
@@ -924,7 +924,7 @@ try_bind (char *key, int menu, char *func, struct binding_t *bindings)
   return (-1);
 }
 
-struct binding_t *km_get_table (int menu)
+const struct binding_t *km_get_table (int menu)
 {
   switch (menu)
   {
@@ -971,7 +971,7 @@ struct binding_t *km_get_table (int menu)
 /* bind menu-name '<key_sequence>' function-name */
 int mutt_parse_bind (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
 {
-  struct binding_t *bindings = NULL;
+  const struct binding_t *bindings = NULL;
   char *key;
   int menu[sizeof(Menus)/sizeof(struct mapping_t)-1], r = 0, nummenus, i;
 
@@ -1072,7 +1072,7 @@ int mutt_parse_exec (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
 {
   int ops[128]; 
   int nops = 0;
-  struct binding_t *bindings = NULL;
+  const struct binding_t *bindings = NULL;
   char *function;
 
   if (!MoreArgs (s))
index 20212fd5b06e560f49cbad40ca4c63539f62218e..e5c85dea929a87a0fe1060ab0f42fa3f78ff4783 100644 (file)
--- a/keymap.h
+++ b/keymap.h
@@ -45,7 +45,6 @@ struct keymap_t
   keycode_t *keys;       /* key sequence */
 };
 
-char *km_keyname (int);
 int km_expand_key (char *, size_t, struct keymap_t *);
 struct keymap_t *km_find_func (int, int);
 void km_init (void);
@@ -89,7 +88,7 @@ extern struct keymap_t *Keymaps[];
 /* dokey() records the last real key pressed  */
 extern int LastKey;
 
-extern struct mapping_t Menus[];
+extern const struct mapping_t Menus[];
 
 struct binding_t
 {
@@ -98,25 +97,25 @@ struct binding_t
   char *seq;   /* default key binding */
 };
 
-struct binding_t *km_get_table (int menu);
+const struct binding_t *km_get_table (int menu);
 
-extern struct binding_t OpGeneric[];
-extern struct binding_t OpPost[];
-extern struct binding_t OpMain[];
-extern struct binding_t OpAttach[];
-extern struct binding_t OpPager[];
-extern struct binding_t OpCompose[];
-extern struct binding_t OpBrowser[];
-extern struct binding_t OpEditor[];
-extern struct binding_t OpQuery[];
-extern struct binding_t OpAlias[];
+extern const struct binding_t OpGeneric[];
+extern const struct binding_t OpPost[];
+extern const struct binding_t OpMain[];
+extern const struct binding_t OpAttach[];
+extern const struct binding_t OpPager[];
+extern const struct binding_t OpCompose[];
+extern const struct binding_t OpBrowser[];
+extern const struct binding_t OpEditor[];
+extern const struct binding_t OpQuery[];
+extern const struct binding_t OpAlias[];
 
-extern struct binding_t OpPgp[];
+extern const struct binding_t OpPgp[];
 
-extern struct binding_t OpSmime[];
+extern const struct binding_t OpSmime[];
 
 #ifdef MIXMASTER
-extern struct binding_t OpMix[];
+extern const struct binding_t OpMix[];
 #endif
 
 #include "keymap_defs.h"
diff --git a/lib.c b/lib.c
index 17cc5160babec5c80099694d430051a985bb82d7..9662760d764cf985b37f689013981c7606d1816c 100644 (file)
--- a/lib.c
+++ b/lib.c
@@ -53,7 +53,7 @@
 #include "lib.h"
 
 
-static struct sysexits
+static const struct sysexits
 {
   int v;
   const char *str;
@@ -696,7 +696,7 @@ FILE *safe_fopen (const char *path, const char *mode)
     return (fopen (path, mode));
 }
 
-static char safe_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+@{}._-:%/";
+static const char safe_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+@{}._-:%/";
 
 void mutt_sanitize_filename (char *f, short slash)
 {
@@ -711,7 +711,7 @@ void mutt_sanitize_filename (char *f, short slash)
 
 /* these characters must be escaped in regular expressions */
 
-static char rx_special_chars[] = "^.[$()|*+?{\\";
+static const char rx_special_chars[] = "^.[$()|*+?{\\";
 
 int mutt_rx_sanitize_string (char *dest, size_t destlen, const char *src)
 {
index 6f400575a6db54012c9bc1765c4e92528da13208..760c33a8fd0a9f4a1032aeca981972cb1da04dae 100644 (file)
--- a/mapping.h
+++ b/mapping.h
 
 struct mapping_t
 {
-  char *name;
+  const char *name;
   int value;
 };
 
-char *mutt_getnamebyvalue (int, const struct mapping_t *);
-char *mutt_compile_help (char *, size_t, int, struct mapping_t *);
+const char *mutt_getnamebyvalue (int, const struct mapping_t *);
+char *mutt_compile_help (char *, size_t, int, const struct mapping_t *);
 
 int mutt_getvaluebyname (const char *, const struct mapping_t *);
 
diff --git a/mime.h b/mime.h
index aec907221429a6a26d620e9e9fa84c2ea613d914..e0239be8691326de380afde46bafe7ef9535d69f 100644 (file)
--- a/mime.h
+++ b/mime.h
@@ -55,9 +55,9 @@ enum
 /* MIME encoding/decoding global vars */
 
 #ifndef _SENDLIB_C
-extern int Index_hex[];
-extern int Index_64[];
-extern char B64Chars[];
+extern const int Index_hex[];
+extern const int Index_64[];
+extern const char B64Chars[];
 #endif
 
 #define hexval(c) Index_hex[(unsigned int)(c)]
index 616a0681b0cffac8135229f3a7f34a9ff4d4a9d4..d727cc6922b804ca8c9d04cbcf0ea4d785211101 100644 (file)
@@ -911,7 +911,7 @@ static int ssl_check_certificate (CONNECTION *conn, sslsockdata *data)
 
 static int interactive_check_cert (X509 *cert, int idx, int len)
 {
-  char *part[] =
+  static const char * const part[] =
     {"/CN=", "/Email=", "/O=", "/OU=", "/L=", "/ST=", "/C="};
   char helpstr[LONG_STRING];
   char buf[STRING];
diff --git a/pager.c b/pager.c
index e19174cd02c558e7ed8b804b681e02537353f2ae..ade00c5f29ede839766ae46e1418382a5a7dd6d0 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -1526,13 +1526,13 @@ upNLines (int nlines, struct line_t *info, int cur, int hiding)
   return cur;
 }
 
-static struct mapping_t PagerHelp[] = {
+static const struct mapping_t PagerHelp[] = {
   { N_("Exit"),        OP_EXIT },
   { N_("PrevPg"), OP_PREV_PAGE },
   { N_("NextPg"), OP_NEXT_PAGE },
   { NULL,      0 }
 };
-static struct mapping_t PagerHelpExtra[] = {
+static const struct mapping_t PagerHelpExtra[] = {
   { N_("View Attachm."), OP_VIEW_ATTACHMENTS },
   { N_("Del"), OP_DELETE },
   { N_("Reply"), OP_REPLY },
diff --git a/parse.c b/parse.c
index cba966229349968794bb4d66de0d96abc9144318..9f227a8c5362e229251ee2dfcc08965468238d70 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -672,7 +672,7 @@ static const char *uncomment_timezone (char *buf, size_t buflen, const char *tz)
   return buf;
 }
 
-static struct tz_t
+static const struct tz_t
 {
   char tzname[5];
   unsigned char zhours;
index dbd73bda22dd1e85184a85d9fa7c21a24f8b0f97..310d2eed8de0402391a0d957572921b943d81de0 100644 (file)
--- a/pattern.c
+++ b/pattern.c
@@ -47,7 +47,7 @@ static int eat_date (pattern_t *pat, BUFFER *, BUFFER *);
 static int eat_range (pattern_t *pat, BUFFER *, BUFFER *);
 static int patmatch (const pattern_t *pat, const char *buf);
 
-static struct pattern_flags
+static const struct pattern_flags
 {
   int tag;     /* character used to represent this op */
   int op;      /* operation to perform */
@@ -712,7 +712,7 @@ static int patmatch (const pattern_t* pat, const char* buf)
     return regexec (pat->p.rx, buf, 0, NULL, 0);
 }
 
-static struct pattern_flags *lookup_tag (char tag)
+static const struct pattern_flags *lookup_tag (char tag)
 {
   int i;
 
@@ -774,7 +774,7 @@ pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err)
   int alladdr = 0;
   int or = 0;
   int implicit = 1;    /* used to detect logical AND operator */
-  struct pattern_flags *entry;
+  const struct pattern_flags *entry;
   char *p;
   char *buf;
   BUFFER ps;
index 04bca9f787405d3c01e415d37825a8749af2f5a7..dad51b0eafdfceff720cf93b643c1587aa387208 100644 (file)
--- a/pgpkey.c
+++ b/pgpkey.c
@@ -52,7 +52,7 @@ struct pgp_cache
 
 static struct pgp_cache *id_defaults = NULL;
 
-static char trust_flags[] = "?- +";
+static const char trust_flags[] = "?- +";
 
 static char *pgp_key_abilities (int flags)
 {
index 37519825f80e9e54ac5960885f0e76365c81ac16..c1ec37f50f313882f7928a011f28198f49ddcfd7 100644 (file)
@@ -35,7 +35,7 @@
 #include <string.h>
 #include <ctype.h>
 
-static struct 
+static const struct 
 {
   short id;
   const char *name;
index b750533ab761d7291f2d9d5c1f4409d805506a1e..62663438cca477c6a251b500f4bf3ceb8fbc473e 100644 (file)
@@ -277,7 +277,7 @@ static pop_auth_res_t pop_auth_user (POP_DATA *pop_data, const char *method)
   return POP_A_FAILURE;
 }
 
-static pop_auth_t pop_authenticators[] = {
+static const pop_auth_t pop_authenticators[] = {
 #ifdef USE_SASL
   { pop_auth_sasl, NULL },
 #endif
@@ -296,7 +296,7 @@ static pop_auth_t pop_authenticators[] = {
 int pop_authenticate (POP_DATA* pop_data)
 {
   ACCOUNT *acct = &pop_data->conn->account;
-  pop_auth_t* authenticator;
+  const pop_auth_t* authenticator;
   char* methods;
   char* comma;
   char* method;
index fa3ec64d3d59abb07e0d181c2354ada41bc3dc6a..4c518200e6a57e1bc95fe19e10af8bf5a89f5af6 100644 (file)
@@ -37,7 +37,7 @@
 #include <string.h>
 #include <sys/stat.h>
 
-static struct mapping_t PostponeHelp[] = {
+static const struct mapping_t PostponeHelp[] = {
   { N_("Exit"),  OP_EXIT },
   { N_("Del"),   OP_DELETE },
   { N_("Undel"), OP_UNDELETE },
index 140dfc3516eb4b7f03f3dba1e7d344d17916accf..95611ed10070f70e88c967d5589747e73962f7c7 100644 (file)
--- a/protos.h
+++ b/protos.h
@@ -300,7 +300,7 @@ int _mutt_enter_fname (const char *, char *, size_t, int *, int, int, char ***,
 int  mutt_enter_string (char *buf, size_t buflen, int y, int x, int flags);
 int _mutt_enter_string (char *, size_t, int, int, int, int, char ***, int *, ENTER_STATE *);
 #define mutt_get_field(A,B,C,D) _mutt_get_field(A,B,C,D,0,NULL,NULL)
-int _mutt_get_field (char *, char *, size_t, int, int, char ***, int *);
+int _mutt_get_field (const char *, char *, size_t, int, int, char ***, int *);
 int mutt_get_hook_type (const char *);
 int mutt_get_field_unbuffered (char *, char *, size_t, int);
 #define mutt_get_password(A,B,C) mutt_get_field_unbuffered(A,B,C,M_PASS)
diff --git a/query.c b/query.c
index f2464b955c234ec22bfba658da1c2a8ffe1201cd..b3b8f08b649aaeca681a9083eb8230f677f7aab2 100644 (file)
--- a/query.c
+++ b/query.c
@@ -44,7 +44,7 @@ typedef struct entry
   QUERY *data;
 } ENTRY;
 
-static struct mapping_t QueryHelp[] = {
+static const struct mapping_t QueryHelp[] = {
   { N_("Exit"),   OP_EXIT },
   { N_("Mail"),   OP_MAIL },
   { N_("New Query"),  OP_QUERY },
index d9d87bccef5042228f5eb06afe2de50c83853906..31dfcadd5c99ff2fcca4c5ba5daa349cf4c639a0 100644 (file)
@@ -49,7 +49,7 @@ static const char *Mailbox_is_read_only = N_("Mailbox is read-only.");
     break; \
 }
 
-static struct mapping_t AttachHelp[] = {
+static const struct mapping_t AttachHelp[] = {
   { N_("Exit"),  OP_EXIT },
   { N_("Save"),  OP_SAVE },
   { N_("Pipe"),  OP_PIPE },
index 3354540fb86d35d290d81d5d044bbb3cef1d3a0f..06eae3e0679080d2f41cc21548df2d78b5cbf7e0 100644 (file)
@@ -480,7 +480,7 @@ static int mix_chain_add (MIXCHAIN *chain, const char *s,
   return 0;
 }
 
-static struct mapping_t RemailerHelp[] = 
+static const struct mapping_t RemailerHelp[] = 
 {
   { N_("Append"), OP_MIX_APPEND },
   { N_("Insert"), OP_MIX_INSERT },
index 2927b6f5d59c6ac69b89027b86fa590bd2017f2f..b5e8704d1f2ad24a6860c3c3cd60b58ae2180696 100644 (file)
--- a/rfc2047.c
+++ b/rfc2047.c
@@ -234,7 +234,7 @@ static size_t b_encoder (char *s, ICONV_CONST char *d, size_t dlen,
 static size_t q_encoder (char *s, ICONV_CONST char *d, size_t dlen,
                         const char *tocode)
 {
-  char hex[] = "0123456789ABCDEF";
+  static const char hex[] = "0123456789ABCDEF";
   char *s0 = s;
 
   memcpy (s, "=?", 2), s += 2;
index 22f9d9bd3c93a82690f28fd5b9a3715bacb5ac28..fd54a71aad56eb90ad796cccd51780c34278d66a 100644 (file)
--- a/rfc822.c
+++ b/rfc822.c
@@ -51,7 +51,7 @@ const char RFC822Specials[] = "@.,:;<>[]\\\"()";
 int RFC822Error = 0;
 
 /* these must defined in the same order as the numerated errors given in rfc822.h */
-const char *RFC822Errors[] = {
+const char * const RFC822Errors[] = {
   "out of memory",
   "mismatched parenthesis",
   "mismatched quotes",
index 0c48f75a9a4c46765e296fb55d9c15336baef1c4..ba11801c4414cbf5be7c2dfbc8d78f302119b029 100644 (file)
--- a/rfc822.h
+++ b/rfc822.h
@@ -61,7 +61,7 @@ int rfc822_valid_msgid (const char *msgid);
 int rfc822_remove_from_adrlist (ADDRESS **a, const char *mailbox);
 
 extern int RFC822Error;
-extern const char *RFC822Errors[];
+extern const char * const RFC822Errors[];
 
 #define rfc822_error(x) RFC822Errors[x]
 #define rfc822_new_address() safe_calloc(1,sizeof(ADDRESS))
index 1ee7fb2b1f676f3253ab9e91d99b2d8bb99ff4ae..249d6a1d18ed5fae49603db16e20fc6297d4b6de 100644 (file)
--- a/sendlib.c
+++ b/sendlib.c
@@ -65,7 +65,7 @@ extern char RFC822Specials[];
 
 const char MimeSpecials[] = "@.,;:<>[]\\\"()?/= \t";
 
-char B64Chars[64] = {
+const char B64Chars[64] = {
   'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
   'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
   'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
diff --git a/url.c b/url.c
index 347047cd98ff1fbeefdb77f461ecd81937689827..1b583b50697b01117874539c4e781b152eebd1c0 100644 (file)
--- a/url.c
+++ b/url.c
@@ -32,7 +32,7 @@
 
 #include <ctype.h>
 
-static struct mapping_t UrlMap[] =
+static const struct mapping_t UrlMap[] =
 {
   { "file",    U_FILE },
   { "imap",    U_IMAP },