mutt stable branch with some hacks
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge

+388 -287
+46
ChangeLog
··· 1 + 2009-03-09 12:04 +0100 Vincent Lefevre <vincent@vinc17.org> (4ce562b7f5d7) 2 + 3 + * mbyte.h: Unbreak compilation on OS X with --with-regex/--without-wc- 4 + funcs. Closes #3149. 5 + 6 + 2009-03-09 11:58 +0100 Rocco Rutte <pdmef@gmx.net> (f3a33b77dc90) 7 + 8 + * ChangeLog, mutt.h, regex.c: Unbreak compilation with --without-wc- 9 + funcs on OS X 10.5.*, see #3149. 10 + 11 + 2009-03-09 11:49 +0100 Rocco Rutte <pdmef@gmx.net> (bcf1e9692caf) 12 + 13 + * init.h: Fix 11cd72da743a 14 + 15 + 2009-03-09 11:30 +0100 Rocco Rutte <pdmef@gmx.net> (11cd72da743a) 16 + 17 + * ChangeLog, init.h: Sort SSL-related variables, see #3191. 18 + 19 + 2009-03-09 11:11 +0100 Rocco Rutte <pdmef@gmx.net> (a96d427b203b) 20 + 21 + * hash.c, hash.h, init.c, mh.c, thread.c: Restore $reverse_alias 22 + feature by using case-insensitive hash keys 23 + 24 + The fix is implemented as callbacks in the hash table so we can 25 + avoid working with copies of the mailbox keys but work on the 26 + originals instead and don't pollute the code with lower-case 27 + conversions all over the place. 28 + 29 + While I'm at it, turn int hashes into unsigned values since the hash 30 + function returns unsigned values now, too. 31 + 32 + Closes #3185. 33 + 34 + 2009-03-07 13:49 +0100 Rocco Rutte <pdmef@gmx.net> (ff1906f70b1b) 35 + 36 + * ChangeLog, init.h: Sort most variables (except crypto), see #3191. 37 + 38 + 2009-03-07 12:26 +0100 Rocco Rutte <pdmef@gmx.net> (49d3d03d41c2) 39 + 40 + * doc/manual.xml.head: Fix typo, see #2430. 41 + 42 + 2009-02-20 22:14 +0100 Rocco Rutte <pdmef@gmx.net> (35fbea209c6e) 43 + 44 + * ChangeLog, doc/manual.xml.head: Manual: verbosely document how the 45 + initial folder is determined, see #3189. 46 + 1 47 2009-02-20 18:27 +0100 Rocco Rutte <pdmef@gmx.net> (3f57a654639d) 2 48 3 49 * doc/manual.xml.head: Document address normalization. Closes #2430.
+1 -1
doc/manual.xml.head
··· 5178 5178 <title>Miscellany</title> 5179 5179 5180 5180 <para> 5181 - This section documents various feature that fit nowhere else. 5181 + This section documents various features that fit nowhere else. 5182 5182 </para> 5183 5183 5184 5184 <variablelist>
+30 -8
hash.c
··· 1 1 /* 2 - * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> 2 + * Copyright (C) 1996-2009 Michael R. Elkins <me@mutt.org> 3 3 * 4 4 * This program is free software; you can redistribute it and/or modify 5 5 * it under the terms of the GNU General Public License as published by ··· 23 23 #include <stdlib.h> 24 24 #include <stdio.h> 25 25 #include <string.h> 26 + #include <ctype.h> 26 27 27 28 #include "mutt.h" 28 29 29 30 #define SOMEPRIME 149711 30 31 31 - unsigned int hash_string (const unsigned char *s, unsigned int n) 32 + static unsigned int hash_string (const unsigned char *s, unsigned int n) 32 33 { 33 34 unsigned int h = 0; 34 35 ··· 39 40 return h; 40 41 } 41 42 42 - HASH *hash_create (int nelem) 43 + static unsigned int hash_case_string (const unsigned char *s, unsigned int n) 44 + { 45 + unsigned int h = 0; 46 + 47 + while (*s) 48 + h += (h << 7) + tolower (*s++); 49 + h = (h * SOMEPRIME) % n; 50 + 51 + return h; 52 + } 53 + 54 + HASH *hash_create (int nelem, int lower) 43 55 { 44 56 HASH *table = safe_malloc (sizeof (HASH)); 45 57 if (nelem == 0) 46 58 nelem = 2; 47 59 table->nelem = nelem; 48 60 table->table = safe_calloc (nelem, sizeof (struct hash_elem *)); 61 + if (lower) 62 + { 63 + table->hash_string = hash_case_string; 64 + table->cmp_string = mutt_strcasecmp; 65 + } 66 + else 67 + { 68 + table->hash_string = hash_string; 69 + table->cmp_string = mutt_strcmp; 70 + } 49 71 return table; 50 72 } 51 73 ··· 57 79 int hash_insert (HASH * table, const char *key, void *data, int allow_dup) 58 80 { 59 81 struct hash_elem *ptr; 60 - int h; 82 + unsigned int h; 61 83 62 84 ptr = (struct hash_elem *) safe_malloc (sizeof (struct hash_elem)); 63 - h = hash_string ((unsigned char *) key, table->nelem); 85 + h = table->hash_string ((unsigned char *) key, table->nelem); 64 86 ptr->key = key; 65 87 ptr->data = data; 66 88 ··· 76 98 77 99 for (tmp = table->table[h], last = NULL; tmp; last = tmp, tmp = tmp->next) 78 100 { 79 - r = mutt_strcmp (tmp->key, key); 101 + r = table->cmp_string (tmp->key, key); 80 102 if (r == 0) 81 103 { 82 104 FREE (&ptr); ··· 99 121 struct hash_elem *ptr = table->table[hash]; 100 122 for (; ptr; ptr = ptr->next) 101 123 { 102 - if (mutt_strcmp (key, ptr->key) == 0) 124 + if (table->cmp_string (key, ptr->key) == 0) 103 125 return (ptr->data); 104 126 } 105 127 return NULL; ··· 114 136 while (ptr) 115 137 { 116 138 if ((data == ptr->data || !data) 117 - && mutt_strcmp (ptr->key, key) == 0) 139 + && table->cmp_string (ptr->key, key) == 0) 118 140 { 119 141 *last = ptr->next; 120 142 if (destroy)
+6 -5
hash.h
··· 1 1 /* 2 - * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org> 2 + * Copyright (C) 1996-2009 Michael R. Elkins <me@mutt.org> 3 3 * 4 4 * This program is free software; you can redistribute it and/or modify 5 5 * it under the terms of the GNU General Public License as published by ··· 30 30 { 31 31 int nelem; 32 32 struct hash_elem **table; 33 + unsigned int (*hash_string)(const unsigned char *, unsigned int); 34 + int (*cmp_string)(const char *, const char *); 33 35 } 34 36 HASH; 35 37 36 - #define hash_find(table, key) hash_find_hash(table, hash_string ((unsigned char *)key, table->nelem), key) 38 + #define hash_find(table, key) hash_find_hash(table, table->hash_string ((unsigned char *)key, table->nelem), key) 37 39 38 - #define hash_delete(table,key,data,destroy) hash_delete_hash(table, hash_string ((unsigned char *)key, table->nelem), key, data, destroy) 40 + #define hash_delete(table,key,data,destroy) hash_delete_hash(table, table->hash_string ((unsigned char *)key, table->nelem), key, data, destroy) 39 41 40 - HASH *hash_create (int nelem); 41 - unsigned int hash_string (const unsigned char *s, unsigned int n); 42 + HASH *hash_create (int nelem, int lower); 42 43 int hash_insert (HASH * table, const char *key, void *data, int allow_dup); 43 44 void *hash_find_hash (const HASH * table, int hash, const char *key); 44 45 void hash_delete_hash (HASH * table, int hash, const char *key, const void *data,
+2 -2
init.c
··· 2885 2885 err.data = error; 2886 2886 err.dsize = sizeof (error); 2887 2887 2888 - Groups = hash_create (1031); 2889 - ReverseAlias = hash_create (1031); 2888 + Groups = hash_create (1031, 0); 2889 + ReverseAlias = hash_create (1031, 1); 2890 2890 2891 2891 mutt_menu_init (); 2892 2892
+268 -257
init.h
··· 260 260 ** in a reply. For a full listing of defined \fCprintf(3)\fP-like sequences see 261 261 ** the section on $$index_format. 262 262 */ 263 + { "auto_tag", DT_BOOL, R_NONE, OPTAUTOTAG, 0 }, 264 + /* 265 + ** .pp 266 + ** When \fIset\fP, functions in the \fIindex\fP menu which affect a message 267 + ** will be applied to all tagged messages (if there are any). When 268 + ** unset, you must first use the \fC<tag-prefix>\fP function (bound to ``;'' 269 + ** by default) to make the next function apply to all tagged messages. 270 + */ 263 271 { "autoedit", DT_BOOL, R_NONE, OPTAUTOEDIT, 0 }, 264 272 /* 265 273 ** .pp ··· 270 278 ** editing the body of your message. 271 279 ** .pp 272 280 ** Also see $$fast_reply. 273 - */ 274 - { "auto_tag", DT_BOOL, R_NONE, OPTAUTOTAG, 0 }, 275 - /* 276 - ** .pp 277 - ** When \fIset\fP, functions in the \fIindex\fP menu which affect a message 278 - ** will be applied to all tagged messages (if there are any). When 279 - ** unset, you must first use the \fC<tag-prefix>\fP function (bound to ``;'' 280 - ** by default) to make the next function apply to all tagged messages. 281 281 */ 282 282 { "beep", DT_BOOL, R_NONE, OPTBEEP, 1 }, 283 283 /* ··· 314 314 ** follow these menus. The option is \fIunset\fP by default because many 315 315 ** visual terminals don't permit making the cursor invisible. 316 316 */ 317 - { "check_mbox_size", DT_BOOL, R_NONE, OPTCHECKMBOXSIZE, 0 }, 317 + #if defined(USE_SSL) 318 + { "certificate_file", DT_PATH, R_NONE, UL &SslCertFile, UL "~/.mutt_certificates" }, 318 319 /* 319 320 ** .pp 320 - ** When this variable is \fIset\fP, mutt will use file size attribute instead of 321 - ** access time when checking for new mail in mbox and mmdf folders. 321 + ** This variable specifies the file where the certificates you trust 322 + ** are saved. When an unknown certificate is encountered, you are asked 323 + ** if you accept it or not. If you accept it, the certificate can also 324 + ** be saved in this file and further connections are automatically 325 + ** accepted. 322 326 ** .pp 323 - ** This variable is \fIunset\fP by default and should only be enabled when 324 - ** new mail detection for these folder types is unreliable or doesn't work. 327 + ** You can also manually add CA certificates in this file. Any server 328 + ** certificate that is signed with one of these CA certificates is 329 + ** also automatically accepted. 325 330 ** .pp 326 - ** Note that enabling this variable should happen before any ``$mailboxes'' 327 - ** directives occur in configuration files regarding mbox or mmdf folders 328 - ** because mutt needs to determine the initial new mail status of such a 329 - ** mailbox by performing a fast mailbox scan when it is defined. 330 - ** Afterwards the new mail status is tracked by file size changes. 331 + ** Example: 332 + ** .ts 333 + ** set certificate_file=~/.mutt/certificates 334 + ** .te 335 + ** 331 336 */ 337 + #endif 332 338 { "charset", DT_STR, R_NONE, UL &Charset, UL 0 }, 333 339 /* 334 340 ** .pp ··· 341 347 ** \fBNote:\fP It should only be set in case Mutt isn't abled to determine the 342 348 ** character set used correctly. 343 349 */ 350 + { "check_mbox_size", DT_BOOL, R_NONE, OPTCHECKMBOXSIZE, 0 }, 351 + /* 352 + ** .pp 353 + ** When this variable is \fIset\fP, mutt will use file size attribute instead of 354 + ** access time when checking for new mail in mbox and mmdf folders. 355 + ** .pp 356 + ** This variable is \fIunset\fP by default and should only be enabled when 357 + ** new mail detection for these folder types is unreliable or doesn't work. 358 + ** .pp 359 + ** Note that enabling this variable should happen before any ``$mailboxes'' 360 + ** directives occur in configuration files regarding mbox or mmdf folders 361 + ** because mutt needs to determine the initial new mail status of such a 362 + ** mailbox by performing a fast mailbox scan when it is defined. 363 + ** Afterwards the new mail status is tracked by file size changes. 364 + */ 344 365 { "check_new", DT_BOOL, R_NONE, OPTCHECKNEW, 1 }, 345 366 /* 346 367 ** .pp ··· 359 380 ** .pp 360 381 ** When \fIunset\fP, Mutt will not collapse a thread if it contains any 361 382 ** unread messages. 362 - */ 363 - { "uncollapse_jump", DT_BOOL, R_NONE, OPTUNCOLLAPSEJUMP, 0 }, 364 - /* 365 - ** .pp 366 - ** When \fIset\fP, Mutt will jump to the next unread message, if any, 367 - ** when the current thread is \fIun\fPcollapsed. 368 383 */ 369 384 { "compose_format", DT_STR, R_BOTH, UL &ComposeFormat, UL "-- Mutt: Compose [Approx. msg size: %l Atts: %a]%>-" }, 370 385 /* ··· 600 615 ** agents tend to do with messages (in order to prevent tools from 601 616 ** misinterpreting the line as a mbox message separator). 602 617 */ 618 + #if defined(USE_SSL_OPENSSL) 619 + { "entropy_file", DT_PATH, R_NONE, UL &SslEntropyFile, 0 }, 620 + /* 621 + ** .pp 622 + ** The file which includes random data that is used to initialize SSL 623 + ** library functions. 624 + */ 625 + #endif 603 626 { "envelope_from_address", DT_ADDR, R_NONE, UL &EnvFrom, 0 }, 604 627 /* 605 628 ** .pp ··· 778 801 ** of the message you are replying to into the edit buffer. 779 802 ** The $$weed setting applies. 780 803 */ 804 + #ifdef USE_HCACHE 805 + { "header_cache", DT_PATH, R_NONE, UL &HeaderCache, 0 }, 806 + /* 807 + ** .pp 808 + ** This variable points to the header cache database. 809 + ** If pointing to a directory Mutt will contain a header cache 810 + ** database file per folder, if pointing to a file that file will 811 + ** be a single global header cache. By default it is \fIunset\fP so no header 812 + ** caching will be used. 813 + ** .pp 814 + ** Header caching can greatly improve speed when opening POP, IMAP 815 + ** MH or Maildir folders, see ``$caching'' for details. 816 + */ 817 + #if defined(HAVE_QDBM) || defined(HAVE_TC) 818 + { "header_cache_compress", DT_BOOL, R_NONE, OPTHCACHECOMPRESS, 1 }, 819 + /* 820 + ** .pp 821 + ** When mutt is compiled with qdbm or tokyocabinet as header cache backend, 822 + ** this option determines whether the database will be compressed. 823 + ** Compression results in database files roughly being one fifth 824 + ** of the usual diskspace, but the uncompression can result in a 825 + ** slower opening of cached folder(s) which in general is still 826 + ** much faster than opening non header cached folders. 827 + */ 828 + #endif /* HAVE_QDBM */ 829 + #if defined(HAVE_GDBM) || defined(HAVE_DB4) 830 + { "header_cache_pagesize", DT_STR, R_NONE, UL &HeaderCachePageSize, UL "16384" }, 831 + /* 832 + ** .pp 833 + ** When mutt is compiled with either gdbm or bdb4 as the header cache backend, 834 + ** this option changes the database page size. Too large or too small 835 + ** values can waste space, memory, or CPU time. The default should be more 836 + ** or less optimal for most use cases. 837 + */ 838 + #endif /* HAVE_GDBM || HAVE_DB4 */ 839 + #endif /* USE_HCACHE */ 781 840 { "help", DT_BOOL, R_BOTH, OPTHELP, 1 }, 782 841 /* 783 842 ** .pp ··· 1186 1245 ** DOING!\fP 1187 1246 */ 1188 1247 #ifdef USE_HCACHE 1189 - { "header_cache", DT_PATH, R_NONE, UL &HeaderCache, 0 }, 1190 - /* 1191 - ** .pp 1192 - ** This variable points to the header cache database. 1193 - ** If pointing to a directory Mutt will contain a header cache 1194 - ** database file per folder, if pointing to a file that file will 1195 - ** be a single global header cache. By default it is \fIunset\fP so no header 1196 - ** caching will be used. 1197 - ** .pp 1198 - ** Header caching can greatly improve speed when opening POP, IMAP 1199 - ** MH or Maildir folders, see ``$caching'' for details. 1200 - */ 1201 1248 { "maildir_header_cache_verify", DT_BOOL, R_NONE, OPTHCACHEVERIFY, 1 }, 1202 1249 /* 1203 1250 ** .pp ··· 1206 1253 ** message every time the folder is opened (which can be very slow for NFS 1207 1254 ** folders). 1208 1255 */ 1209 - #if defined(HAVE_GDBM) || defined(HAVE_DB4) 1210 - { "header_cache_pagesize", DT_STR, R_NONE, UL &HeaderCachePageSize, UL "16384" }, 1211 - /* 1212 - ** .pp 1213 - ** When mutt is compiled with either gdbm or bdb4 as the header cache backend, 1214 - ** this option changes the database page size. Too large or too small 1215 - ** values can waste space, memory, or CPU time. The default should be more 1216 - ** or less optimal for most use cases. 1217 - */ 1218 - #endif /* HAVE_GDBM || HAVE_DB4 */ 1219 - #if defined(HAVE_QDBM) || defined(HAVE_TC) 1220 - { "header_cache_compress", DT_BOOL, R_NONE, OPTHCACHECOMPRESS, 1 }, 1221 - /* 1222 - ** .pp 1223 - ** When mutt is compiled with qdbm or tokyocabinet as header cache backend, 1224 - ** this option determines whether the database will be compressed. 1225 - ** Compression results in database files roughly being one fifth 1226 - ** of the usual diskspace, but the uncompression can result in a 1227 - ** slower opening of cached folder(s) which in general is still 1228 - ** much faster than opening non header cached folders. 1229 - */ 1230 - #endif /* HAVE_QDBM */ 1231 - #endif /* USE_HCACHE */ 1256 + #endif 1232 1257 { "maildir_trash", DT_BOOL, R_NONE, OPTMAILDIRTRASH, 0 }, 1233 1258 /* 1234 1259 ** .pp ··· 1276 1301 ** ``mbox'', ``MMDF'', ``MH'' and ``Maildir''. This is overriden by the 1277 1302 ** \fC-m\fP command-line option. 1278 1303 */ 1279 - { "metoo", DT_BOOL, R_NONE, OPTMETOO, 0 }, 1280 - /* 1281 - ** .pp 1282 - ** If \fIunset\fP, Mutt will remove your address (see the ``$alternates'' 1283 - ** command) from the list of recipients when replying to a message. 1284 - */ 1285 1304 { "menu_context", DT_NUM, R_NONE, UL &MenuContext, 0 }, 1286 1305 /* 1287 1306 ** .pp ··· 1303 1322 ** is cleared and the next or previous page of the menu is displayed 1304 1323 ** (useful for slow links to avoid many redraws). 1305 1324 */ 1325 + #if defined(USE_IMAP) || defined(USE_POP) 1326 + { "message_cache_clean", DT_BOOL, R_NONE, OPTMESSAGECACHECLEAN, 0 }, 1327 + /* 1328 + ** .pp 1329 + ** If \fIset\fP, mutt will clean out obsolete entries from the message cache when 1330 + ** the mailbox is synchronized. You probably only want to set it 1331 + ** every once in a while, since it can be a little slow 1332 + ** (especially for large folders). 1333 + */ 1334 + { "message_cachedir", DT_PATH, R_NONE, UL &MessageCachedir, 0 }, 1335 + /* 1336 + ** .pp 1337 + ** Set this to a directory and mutt will cache copies of messages from 1338 + ** your IMAP and POP servers here. You are free to remove entries at any 1339 + ** time. 1340 + ** .pp 1341 + ** When setting this variable to a directory, mutt needs to fetch every 1342 + ** remote message only once and can perform regular expression searches 1343 + ** as fast as for local folders. 1344 + ** .pp 1345 + ** Also see the $$message_cache_clean variable. 1346 + */ 1347 + #endif 1348 + { "message_format", DT_STR, R_NONE, UL &MsgFmt, UL "%s" }, 1349 + /* 1350 + ** .pp 1351 + ** This is the string displayed in the ``attachment'' menu for 1352 + ** attachments of type \fCmessage/rfc822\fP. For a full listing of defined 1353 + ** \fCprintf(3)\fP-like sequences see the section on $$index_format. 1354 + */ 1355 + { "msg_format", DT_SYN, R_NONE, UL "message_format", 0 }, 1356 + /* 1357 + */ 1306 1358 { "meta_key", DT_BOOL, R_NONE, OPTMETAKEY, 0 }, 1307 1359 /* 1308 1360 ** .pp ··· 1313 1365 ** pressed Esc then ``x''. This is because the result of removing the 1314 1366 ** high bit from \fC0xf8\fP is \fC0x78\fP, which is the ASCII character 1315 1367 ** ``x''. 1368 + */ 1369 + { "metoo", DT_BOOL, R_NONE, OPTMETOO, 0 }, 1370 + /* 1371 + ** .pp 1372 + ** If \fIunset\fP, Mutt will remove your address (see the ``$alternates'' 1373 + ** command) from the list of recipients when replying to a message. 1316 1374 */ 1317 1375 { "mh_purge", DT_BOOL, R_NONE, OPTMHPURGE, 0 }, 1318 1376 /* ··· 1398 1456 ** Controls whether or not Mutt will move read messages 1399 1457 ** from your spool mailbox to your $$mbox mailbox, or as a result of 1400 1458 ** a ``$mbox-hook'' command. 1401 - */ 1402 - #if defined(USE_IMAP) || defined(USE_POP) 1403 - { "message_cachedir", DT_PATH, R_NONE, UL &MessageCachedir, 0 }, 1404 - /* 1405 - ** .pp 1406 - ** Set this to a directory and mutt will cache copies of messages from 1407 - ** your IMAP and POP servers here. You are free to remove entries at any 1408 - ** time. 1409 - ** .pp 1410 - ** When setting this variable to a directory, mutt needs to fetch every 1411 - ** remote message only once and can perform regular expression searches 1412 - ** as fast as for local folders. 1413 - ** .pp 1414 - ** Also see the $$message_cache_clean variable. 1415 - */ 1416 - { "message_cache_clean", DT_BOOL, R_NONE, OPTMESSAGECACHECLEAN, 0 }, 1417 - /* 1418 - ** .pp 1419 - ** If \fIset\fP, mutt will clean out obsolete entries from the message cache when 1420 - ** the mailbox is synchronized. You probably only want to set it 1421 - ** every once in a while, since it can be a little slow 1422 - ** (especially for large folders). 1423 - */ 1424 - #endif 1425 - { "message_format", DT_STR, R_NONE, UL &MsgFmt, UL "%s" }, 1426 - /* 1427 - ** .pp 1428 - ** This is the string displayed in the ``attachment'' menu for 1429 - ** attachments of type \fCmessage/rfc822\fP. For a full listing of defined 1430 - ** \fCprintf(3)\fP-like sequences see the section on $$index_format. 1431 - */ 1432 - { "msg_format", DT_SYN, R_NONE, UL "message_format", 0 }, 1433 - /* 1434 1459 */ 1435 1460 { "narrow_tree", DT_BOOL, R_TREE|R_INDEX, OPTNARROWTREE, 0 }, 1436 1461 /* ··· 2123 2148 ** keyid (the hash-value that OpenSSL generates) to work properly 2124 2149 ** (S/MIME only) 2125 2150 */ 2126 - #if defined(USE_SSL) 2127 - { "ssl_client_cert", DT_PATH, R_NONE, UL &SslClientCert, 0 }, 2128 - /* 2129 - ** .pp 2130 - ** The file containing a client certificate and its associated private 2131 - ** key. 2132 - */ 2133 - { "ssl_force_tls", DT_BOOL, R_NONE, OPTSSLFORCETLS, 0 }, 2134 - /* 2135 - ** .pp 2136 - ** If this variable is \fIset\fP, Mutt will require that all connections 2137 - ** to remote servers be encrypted. Furthermore it will attempt to 2138 - ** negotiate TLS even if the server does not advertise the capability, 2139 - ** since it would otherwise have to abort the connection anyway. This 2140 - ** option supersedes $$ssl_starttls. 2141 - */ 2142 - { "ssl_starttls", DT_QUAD, R_NONE, OPT_SSLSTARTTLS, M_YES }, 2143 - /* 2144 - ** .pp 2145 - ** If \fIset\fP (the default), mutt will attempt to use \fCSTARTTLS\fP on servers 2146 - ** advertising the capability. When \fIunset\fP, mutt will not attempt to 2147 - ** use \fCSTARTTLS\fP regardless of the server's capabilities. 2148 - */ 2149 - { "ssl_verify_dates", DT_BOOL, R_NONE, OPTSSLVERIFYDATES, 1 }, 2151 + { "pipe_decode", DT_BOOL, R_NONE, OPTPIPEDECODE, 0 }, 2150 2152 /* 2151 2153 ** .pp 2152 - ** If \fIset\fP (the default), mutt will not automatically accept a server 2153 - ** certificate that is either not yet valid or already expired. You should 2154 - ** only unset this for particular known hosts, using the 2155 - ** \fC$<account-hook>\fP function. 2154 + ** Used in connection with the \fC<pipe-message>\fP command. When \fIunset\fP, 2155 + ** Mutt will pipe the messages without any preprocessing. When \fIset\fP, Mutt 2156 + ** will weed headers and will attempt to decode the messages 2157 + ** first. 2156 2158 */ 2157 - { "ssl_verify_host", DT_BOOL, R_NONE, OPTSSLVERIFYHOST, 1 }, 2159 + { "pipe_sep", DT_STR, R_NONE, UL &PipeSep, UL "\n" }, 2158 2160 /* 2159 2161 ** .pp 2160 - ** If \fIset\fP (the default), mutt will not automatically accept a server 2161 - ** certificate whose host name does not match the host used in your folder 2162 - ** URL. You should only unset this for particular known hosts, using 2163 - ** the \fC$<account-hook>\fP function. 2162 + ** The separator to add between messages when piping a list of tagged 2163 + ** messages to an external Unix command. 2164 2164 */ 2165 - { "certificate_file", DT_PATH, R_NONE, UL &SslCertFile, UL "~/.mutt_certificates" }, 2166 - /* 2167 - ** .pp 2168 - ** This variable specifies the file where the certificates you trust 2169 - ** are saved. When an unknown certificate is encountered, you are asked 2170 - ** if you accept it or not. If you accept it, the certificate can also 2171 - ** be saved in this file and further connections are automatically 2172 - ** accepted. 2173 - ** .pp 2174 - ** You can also manually add CA certificates in this file. Any server 2175 - ** certificate that is signed with one of these CA certificates is 2176 - ** also automatically accepted. 2177 - ** .pp 2178 - ** Example: 2179 - ** .ts 2180 - ** set certificate_file=~/.mutt/certificates 2181 - ** .te 2182 - */ 2183 - # ifdef USE_SSL_OPENSSL 2184 - { "ssl_usesystemcerts", DT_BOOL, R_NONE, OPTSSLSYSTEMCERTS, 1 }, 2185 - /* 2186 - ** .pp 2187 - ** If set to \fIyes\fP, mutt will use CA certificates in the 2188 - ** system-wide certificate store when checking if a server certificate 2189 - ** is signed by a trusted CA. 2190 - */ 2191 - { "entropy_file", DT_PATH, R_NONE, UL &SslEntropyFile, 0 }, 2192 - /* 2193 - ** .pp 2194 - ** The file which includes random data that is used to initialize SSL 2195 - ** library functions. 2196 - */ 2197 - { "ssl_use_sslv2", DT_BOOL, R_NONE, OPTSSLV2, 1 }, 2198 - /* 2199 - ** .pp 2200 - ** This variable specifies whether to attempt to use SSLv2 in the 2201 - ** SSL authentication process. 2202 - */ 2203 - # endif /* defined USE_SSL_OPENSSL */ 2204 - { "ssl_use_sslv3", DT_BOOL, R_NONE, OPTSSLV3, 1 }, 2205 - /* 2206 - ** .pp 2207 - ** This variable specifies whether to attempt to use SSLv3 in the 2208 - ** SSL authentication process. 2209 - */ 2210 - { "ssl_use_tlsv1", DT_BOOL, R_NONE, OPTTLSV1, 1 }, 2211 - /* 2212 - ** .pp 2213 - ** This variable specifies whether to attempt to use TLSv1 in the 2214 - ** SSL authentication process. 2215 - */ 2216 - # ifdef USE_SSL_GNUTLS 2217 - { "ssl_min_dh_prime_bits", DT_NUM, R_NONE, UL &SslDHPrimeBits, 0 }, 2218 - /* 2219 - ** .pp 2220 - ** This variable specifies the minimum acceptable prime size (in bits) 2221 - ** for use in any Diffie-Hellman key exchange. A value of 0 will use 2222 - ** the default from the GNUTLS library. 2223 - */ 2224 - { "ssl_ca_certificates_file", DT_PATH, R_NONE, UL &SslCACertFile, 0 }, 2225 - /* 2226 - ** .pp 2227 - ** This variable specifies a file containing trusted CA certificates. 2228 - ** Any server certificate that is signed with one of these CA 2229 - ** certificates is also automatically accepted. 2230 - ** .pp 2231 - ** Example: 2232 - ** .ts 2233 - ** set ssl_ca_certificates_file=/etc/ssl/certs/ca-certificates.crt 2234 - ** .te 2235 - */ 2236 - # endif /* USE_SSL_GNUTLS */ 2237 - #endif /* defined(USE_SSL) */ 2238 2165 { "pipe_split", DT_BOOL, R_NONE, OPTPIPESPLIT, 0 }, 2239 2166 /* 2240 2167 ** .pp ··· 2245 2172 ** In both cases the messages are piped in the current sorted order, 2246 2173 ** and the $$pipe_sep separator is added after each message. 2247 2174 */ 2248 - { "pipe_decode", DT_BOOL, R_NONE, OPTPIPEDECODE, 0 }, 2249 - /* 2250 - ** .pp 2251 - ** Used in connection with the \fC<pipe-message>\fP command. When \fIunset\fP, 2252 - ** Mutt will pipe the messages without any preprocessing. When \fIset\fP, Mutt 2253 - ** will weed headers and will attempt to decode the messages 2254 - ** first. 2255 - */ 2256 - { "pipe_sep", DT_STR, R_NONE, UL &PipeSep, UL "\n" }, 2175 + #ifdef USE_POP 2176 + { "pop_auth_try_all", DT_BOOL, R_NONE, OPTPOPAUTHTRYALL, 1 }, 2257 2177 /* 2258 2178 ** .pp 2259 - ** The separator to add between messages when piping a list of tagged 2260 - ** messages to an external Unix command. 2179 + ** If \fIset\fP, Mutt will try all available authentication methods. 2180 + ** When \fIunset\fP, Mutt will only fall back to other authentication 2181 + ** methods if the previous methods are unavailable. If a method is 2182 + ** available but authentication fails, Mutt will not connect to the POP server. 2261 2183 */ 2262 - #ifdef USE_POP 2263 2184 { "pop_authenticators", DT_STR, R_NONE, UL &PopAuthenticators, UL 0 }, 2264 2185 /* 2265 2186 ** .pp ··· 2275 2196 ** .ts 2276 2197 ** set pop_authenticators="digest-md5:apop:user" 2277 2198 ** .te 2278 - */ 2279 - { "pop_auth_try_all", DT_BOOL, R_NONE, OPTPOPAUTHTRYALL, 1 }, 2280 - /* 2281 - ** .pp 2282 - ** If \fIset\fP, Mutt will try all available authentication methods. 2283 - ** When \fIunset\fP, Mutt will only fall back to other authentication 2284 - ** methods if the previous methods are unavailable. If a method is 2285 - ** available but authentication fails, Mutt will not connect to the POP server. 2286 2199 */ 2287 2200 { "pop_checkinterval", DT_NUM, R_NONE, UL &PopCheckTimeout, 60 }, 2288 2201 /* ··· 2315 2228 ** for retrieving only unread messages from the POP server when using 2316 2229 ** the \fC$<fetch-mail>\fP function. 2317 2230 */ 2231 + { "pop_pass", DT_STR, R_NONE, UL &PopPass, UL "" }, 2232 + /* 2233 + ** .pp 2234 + ** Specifies the password for your POP account. If \fIunset\fP, Mutt will 2235 + ** prompt you for your password when you open a POP mailbox. 2236 + ** .pp 2237 + ** \fBWarning\fP: you should only use this option when you are on a 2238 + ** fairly secure machine, because the superuser can read your muttrc 2239 + ** even if you are the only one who can read the file. 2240 + */ 2318 2241 { "pop_reconnect", DT_QUAD, R_NONE, OPT_POPRECONNECT, M_ASKYES }, 2319 2242 /* 2320 2243 ** .pp ··· 2327 2250 ** Your login name on the POP server. 2328 2251 ** .pp 2329 2252 ** This variable defaults to your user name on the local machine. 2330 - */ 2331 - { "pop_pass", DT_STR, R_NONE, UL &PopPass, UL "" }, 2332 - /* 2333 - ** .pp 2334 - ** Specifies the password for your POP account. If \fIunset\fP, Mutt will 2335 - ** prompt you for your password when you open a POP mailbox. 2336 - ** .pp 2337 - ** \fBWarning\fP: you should only use this option when you are on a 2338 - ** fairly secure machine, because the superuser can read your muttrc 2339 - ** even if you are the only one who can read the file. 2340 2253 */ 2341 2254 #endif /* USE_POP */ 2342 2255 { "post_indent_string",DT_STR, R_NONE, UL &PostIndentString, UL "" }, ··· 2780 2693 ** replacing ``%s'' with the supplied string. 2781 2694 ** For the default value, ``joe'' would be expanded to: ``~f joe | ~s joe''. 2782 2695 */ 2696 + { "sleep_time", DT_NUM, R_NONE, UL &SleepTime, 1 }, 2697 + /* 2698 + ** .pp 2699 + ** Specifies time, in seconds, to pause while displaying certain informational 2700 + ** messages, while moving from folder to folder and after expunging 2701 + ** messages from the current folder. The default is to pause one second, so 2702 + ** a value of zero for this option suppresses the pause. 2703 + */ 2783 2704 { "smart_wrap", DT_BOOL, R_PAGER, OPTWRAP, 1 }, 2784 2705 /* 2785 2706 ** .pp ··· 2796 2717 ** a line quoted text if it also matches $$smileys. This mostly 2797 2718 ** happens at the beginning of a line. 2798 2719 */ 2799 - { "sleep_time", DT_NUM, R_NONE, UL &SleepTime, 1 }, 2800 - /* 2801 - ** .pp 2802 - ** Specifies time, in seconds, to pause while displaying certain informational 2803 - ** messages, while moving from folder to folder and after expunging 2804 - ** messages from the current folder. The default is to pause one second, so 2805 - ** a value of zero for this option suppresses the pause. 2806 - */ 2807 2720 #ifdef USE_SMTP 2808 2721 # ifdef USE_SASL 2809 2722 { "smtp_authenticators", DT_STR, R_NONE, UL &SmtpAuthenticators, UL 0 }, ··· 2947 2860 ** initially set this variable to the value of the environment 2948 2861 ** variable \fC$$$MAIL\fP or \fC$$$MAILDIR\fP if either is defined. 2949 2862 */ 2863 + #if defined(USE_SSL) 2864 + #ifdef USE_SSL_GNUTLS 2865 + { "ssl_ca_certificates_file", DT_PATH, R_NONE, UL &SslCACertFile, 0 }, 2866 + /* 2867 + ** .pp 2868 + ** This variable specifies a file containing trusted CA certificates. 2869 + ** Any server certificate that is signed with one of these CA 2870 + ** certificates is also automatically accepted. 2871 + ** .pp 2872 + ** Example: 2873 + ** .ts 2874 + ** set ssl_ca_certificates_file=/etc/ssl/certs/ca-certificates.crt 2875 + ** .te 2876 + */ 2877 + #endif /* USE_SSL_GNUTLS */ 2878 + { "ssl_client_cert", DT_PATH, R_NONE, UL &SslClientCert, 0 }, 2879 + /* 2880 + ** .pp 2881 + ** The file containing a client certificate and its associated private 2882 + ** key. 2883 + */ 2884 + { "ssl_force_tls", DT_BOOL, R_NONE, OPTSSLFORCETLS, 0 }, 2885 + /* 2886 + ** .pp 2887 + ** If this variable is \fIset\fP, Mutt will require that all connections 2888 + ** to remote servers be encrypted. Furthermore it will attempt to 2889 + ** negotiate TLS even if the server does not advertise the capability, 2890 + ** since it would otherwise have to abort the connection anyway. This 2891 + ** option supersedes $$ssl_starttls. 2892 + */ 2893 + # ifdef USE_SSL_GNUTLS 2894 + { "ssl_min_dh_prime_bits", DT_NUM, R_NONE, UL &SslDHPrimeBits, 0 }, 2895 + /* 2896 + ** .pp 2897 + ** This variable specifies the minimum acceptable prime size (in bits) 2898 + ** for use in any Diffie-Hellman key exchange. A value of 0 will use 2899 + ** the default from the GNUTLS library. 2900 + */ 2901 + # endif /* USE_SSL_GNUTLS */ 2902 + { "ssl_starttls", DT_QUAD, R_NONE, OPT_SSLSTARTTLS, M_YES }, 2903 + /* 2904 + ** .pp 2905 + ** If \fIset\fP (the default), mutt will attempt to use \fCSTARTTLS\fP on servers 2906 + ** advertising the capability. When \fIunset\fP, mutt will not attempt to 2907 + ** use \fCSTARTTLS\fP regardless of the server's capabilities. 2908 + */ 2909 + # ifdef USE_SSL_OPENSSL 2910 + { "ssl_use_sslv2", DT_BOOL, R_NONE, OPTSSLV2, 1 }, 2911 + /* 2912 + ** .pp 2913 + ** This variable specifies whether to attempt to use SSLv2 in the 2914 + ** SSL authentication process. 2915 + */ 2916 + # endif /* defined USE_SSL_OPENSSL */ 2917 + { "ssl_use_sslv3", DT_BOOL, R_NONE, OPTSSLV3, 1 }, 2918 + /* 2919 + ** .pp 2920 + ** This variable specifies whether to attempt to use SSLv3 in the 2921 + ** SSL authentication process. 2922 + */ 2923 + { "ssl_use_tlsv1", DT_BOOL, R_NONE, OPTTLSV1, 1 }, 2924 + /* 2925 + ** .pp 2926 + ** This variable specifies whether to attempt to use TLSv1 in the 2927 + ** SSL authentication process. 2928 + */ 2929 + #ifdef USE_SSL_OPENSSL 2930 + { "ssl_usesystemcerts", DT_BOOL, R_NONE, OPTSSLSYSTEMCERTS, 1 }, 2931 + /* 2932 + ** .pp 2933 + ** If set to \fIyes\fP, mutt will use CA certificates in the 2934 + ** system-wide certificate store when checking if a server certificate 2935 + ** is signed by a trusted CA. 2936 + */ 2937 + #endif 2938 + { "ssl_verify_dates", DT_BOOL, R_NONE, OPTSSLVERIFYDATES, 1 }, 2939 + /* 2940 + ** .pp 2941 + ** If \fIset\fP (the default), mutt will not automatically accept a server 2942 + ** certificate that is either not yet valid or already expired. You should 2943 + ** only unset this for particular known hosts, using the 2944 + ** \fC$<account-hook>\fP function. 2945 + */ 2946 + { "ssl_verify_host", DT_BOOL, R_NONE, OPTSSLVERIFYHOST, 1 }, 2947 + /* 2948 + ** .pp 2949 + ** If \fIset\fP (the default), mutt will not automatically accept a server 2950 + ** certificate whose host name does not match the host used in your folder 2951 + ** URL. You should only unset this for particular known hosts, using 2952 + ** the \fC$<account-hook>\fP function. 2953 + */ 2954 + #endif /* defined(USE_SSL) */ 2950 2955 { "status_chars", DT_STR, R_BOTH, UL &StChars, UL "-*%A" }, 2951 2956 /* 2952 2957 ** .pp ··· 3071 3076 ** .pp 3072 3077 ** Note that $$indent_string is ignored when this option is \fIset\fP. 3073 3078 */ 3074 - { "thread_received", DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTTHREADRECEIVED, 0 }, 3075 - /* 3076 - ** .pp 3077 - ** When \fIset\fP, mutt uses the date received rather than the date sent 3078 - ** to thread messages by subject. 3079 - */ 3080 3079 { "thorough_search", DT_BOOL, R_NONE, OPTTHOROUGHSRC, 0 }, 3081 3080 /* 3082 3081 ** .pp ··· 3090 3089 ** character set conversions. Otherwise mutt will attempt to match against the 3091 3090 ** raw message received (for example quoted-printable encoded or with encoded 3092 3091 ** headers) which may lead to incorrect search results. 3092 + */ 3093 + { "thread_received", DT_BOOL, R_RESORT|R_RESORT_INIT|R_INDEX, OPTTHREADRECEIVED, 0 }, 3094 + /* 3095 + ** .pp 3096 + ** When \fIset\fP, mutt uses the date received rather than the date sent 3097 + ** to thread messages by subject. 3093 3098 */ 3094 3099 { "tilde", DT_BOOL, R_PAGER, OPTTILDE, 0 }, 3095 3100 /* ··· 3160 3165 ** machine without having to enter a password. 3161 3166 */ 3162 3167 #endif 3168 + { "uncollapse_jump", DT_BOOL, R_NONE, OPTUNCOLLAPSEJUMP, 0 }, 3169 + /* 3170 + ** .pp 3171 + ** When \fIset\fP, Mutt will jump to the next unread message, if any, 3172 + ** when the current thread is \fIun\fPcollapsed. 3173 + */ 3163 3174 { "use_8bitmime", DT_BOOL, R_NONE, OPTUSE8BITMIME, 0 }, 3164 3175 /* 3165 3176 ** .pp ··· 3273 3284 ** .pp 3274 3285 ** (DEPRECATED) Equivalent to setting $$wrap with a negative value. 3275 3286 */ 3287 + { "write_bcc", DT_BOOL, R_NONE, OPTWRITEBCC, 1}, 3288 + /* 3289 + ** .pp 3290 + ** Controls whether mutt writes out the ``Bcc:'' header when preparing 3291 + ** messages to be sent. Exim users may wish to unset this. If mutt 3292 + ** is set to deliver directly via SMTP (see $$smtp_url), this 3293 + ** option does nothing: mutt will never write out the ``Bcc:'' header 3294 + ** in this case. 3295 + */ 3276 3296 { "write_inc", DT_NUM, R_NONE, UL &WriteInc, 10 }, 3277 3297 /* 3278 3298 ** .pp ··· 3282 3302 ** .pp 3283 3303 ** Also see the $$read_inc, $$net_inc and $$time_inc variables and the 3284 3304 ** ``$tuning'' section of the manual for performance considerations. 3285 - */ 3286 - { "write_bcc", DT_BOOL, R_NONE, OPTWRITEBCC, 1}, 3287 - /* 3288 - ** .pp 3289 - ** Controls whether mutt writes out the ``Bcc:'' header when preparing 3290 - ** messages to be sent. Exim users may wish to unset this. If mutt 3291 - ** is set to deliver directly via SMTP (see $$smtp_url), this 3292 - ** option does nothing: mutt will never write out the ``Bcc:'' header 3293 - ** in this case. 3294 3305 */ 3295 3306 /*--*/ 3296 3307 { NULL }
+6
mbyte.h
··· 11 11 # endif 12 12 13 13 # ifndef HAVE_WC_FUNCS 14 + #ifdef towupper 15 + # undef towupper 16 + #endif 17 + #ifdef towlower 18 + # undef towlower 19 + #endif 14 20 #ifdef iswprint 15 21 # undef iswprint 16 22 #endif
+6 -6
mh.c
··· 1242 1242 omask = umask (mh_umask (dest)); 1243 1243 FOREVER 1244 1244 { 1245 - snprintf (path, _POSIX_PATH_MAX, "%s/tmp/%s.%ld.%u_%d.%s%s", 1246 - dest->path, subdir, time (NULL), (unsigned int)getpid (), 1245 + snprintf (path, _POSIX_PATH_MAX, "%s/tmp/%s.%lld.%u_%d.%s%s", 1246 + dest->path, subdir, (long long)time (NULL), (unsigned int)getpid (), 1247 1247 Counter++, NONULL (Hostname), suffix); 1248 1248 1249 1249 dprint (2, (debugfile, "maildir_open_new_message (): Trying %s.\n", ··· 1328 1328 /* construct a new file name. */ 1329 1329 FOREVER 1330 1330 { 1331 - snprintf (path, _POSIX_PATH_MAX, "%s/%ld.%u_%d.%s%s", subdir, 1332 - time (NULL), (unsigned int)getpid (), Counter++, 1331 + snprintf (path, _POSIX_PATH_MAX, "%s/%lld.%u_%d.%s%s", subdir, 1332 + (long long)time (NULL), (unsigned int)getpid (), Counter++, 1333 1333 NONULL (Hostname), suffix); 1334 1334 snprintf (full, _POSIX_PATH_MAX, "%s/%s", ctx->path, path); 1335 1335 ··· 1870 1870 * of each message we scanned. This is used in the loop over the 1871 1871 * existing messages below to do some correlation. 1872 1872 */ 1873 - fnames = hash_create (1031); 1873 + fnames = hash_create (1031, 0); 1874 1874 1875 1875 for (p = md; p; p = p->next) 1876 1876 { ··· 2019 2019 mhs_free_sequences (&mhs); 2020 2020 2021 2021 /* check for modifications and adjust flags */ 2022 - fnames = hash_create (1031); 2022 + fnames = hash_create (1031, 0); 2023 2023 2024 2024 for (p = md; p; p = p->next) 2025 2025 hash_insert (fnames, p->h->path, p, 0);
+6
mutt.h
··· 35 35 #include <limits.h> 36 36 #include <stdarg.h> 37 37 #include <signal.h> 38 + /* On OS X 10.5.x, wide char functions are inlined by default breaking 39 + * --without-wc-funcs compilation 40 + */ 41 + #ifdef __APPLE_CC__ 42 + #define _DONT_USE_CTYPE_INLINE_ 43 + #endif 38 44 #ifdef HAVE_WCHAR_H 39 45 # include <wchar.h> 40 46 #endif
+11 -2
regex.c
··· 56 56 57 57 #undef DEBUG 58 58 59 + /* On OS X 10.5.x, wide char functions are inlined by default breaking 60 + * --without-wc-funcs compilation 61 + */ 62 + #ifdef __APPLE_CC__ 63 + #define _DONT_USE_CTYPE_INLINE_ 64 + #endif 65 + 59 66 #if (defined(HAVE_ALLOCA_H) && !defined(_AIX)) 60 67 # include <alloca.h> 61 68 #endif ··· 73 80 74 81 /* For platform which support the ISO C amendement 1 functionality we 75 82 support user defined character classes. */ 76 - #if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) 77 - # include <wctype.h> 83 + #ifdef HAVE_WCHAR_H 78 84 # include <wchar.h> 85 + #endif 86 + #if defined(HAVE_WCTYPE_H) && defined(HAVE_WC_FUNCS) 87 + # include <wctype.h> 79 88 #endif 80 89 81 90 /* This is for other GNU distributions with internationalized messages. */
+6 -6
thread.c
··· 416 416 { 417 417 struct hash_elem *ptr; 418 418 THREAD *tmp, *last = NULL; 419 - int hash; 419 + unsigned int hash; 420 420 LIST *subjects = NULL, *oldlist; 421 421 time_t date = 0; 422 422 ··· 424 424 425 425 while (subjects) 426 426 { 427 - hash = hash_string ((unsigned char *) subjects->data, 428 - ctx->subj_hash->nelem); 427 + hash = ctx->subj_hash->hash_string ((unsigned char *) subjects->data, 428 + ctx->subj_hash->nelem); 429 429 for (ptr = ctx->subj_hash->table[hash]; ptr; ptr = ptr->next) 430 430 { 431 431 tmp = ((HEADER *) ptr->data)->thread; ··· 766 766 init = 1; 767 767 768 768 if (init) 769 - ctx->thread_hash = hash_create (ctx->msgcount * 2); 769 + ctx->thread_hash = hash_create (ctx->msgcount * 2, 0); 770 770 771 771 /* we want a quick way to see if things are actually attached to the top of the 772 772 * thread tree or if they're just dangling, so we attach everything to a top ··· 1319 1319 HEADER *hdr; 1320 1320 HASH *hash; 1321 1321 1322 - hash = hash_create (ctx->msgcount * 2); 1322 + hash = hash_create (ctx->msgcount * 2, 0); 1323 1323 1324 1324 for (i = 0; i < ctx->msgcount; i++) 1325 1325 { ··· 1337 1337 HEADER *hdr; 1338 1338 HASH *hash; 1339 1339 1340 - hash = hash_create (ctx->msgcount * 2); 1340 + hash = hash_create (ctx->msgcount * 2, 0); 1341 1341 1342 1342 for (i = 0; i < ctx->msgcount; i++) 1343 1343 {