From: Lars Ellenberg <Lars.Ellenberg@linbit.com>
[apps/madmutt.git] / mx.c
diff --git a/mx.c b/mx.c
index fc2a908..28eb914 100644 (file)
--- a/mx.c
+++ b/mx.c
@@ -13,6 +13,7 @@
 #endif
 
 #include "mutt.h"
+#include "buffy.h"
 #include "ascii.h"
 #include "mx.h"
 #include "mbox.h"
 #include "nntp/mx_nntp.h"
 #endif
 
-#ifdef BUFFY_SIZE
-#include "buffy.h"
-#endif
-
 #ifdef USE_DOTLOCK
 #include "dotlock.h"
 #endif
@@ -201,6 +198,7 @@ int mx_lock_file (const char *path, int fd, int excl, int dot, int timeout)
 
   count = 0;
   attempt = 0;
+  prev_sb.st_size = 0;
   while (fcntl (fd, F_SETLK, &lck) == -1) {
     struct stat sb;
 
@@ -489,7 +487,7 @@ static int mx_open_mailbox_append (CONTEXT * ctx, int flags)
       }
       return (-1);
     }
-    fseek (ctx->fp, 0, 2);
+    fseeko (ctx->fp, 0, 2);
     break;
 
   case M_MH:
@@ -1435,3 +1433,45 @@ void mx_init (void) {
 #undef EXITWITHERR
 #endif /* DEBUG */
 }
+
+int mx_rebuild_cache (void) {
+#ifndef USE_HCACHE
+  mutt_error (_("Support for header caching was not build in."));
+  return (1);
+#else
+  int i = 0, magic = 0;
+  CONTEXT* ctx = NULL;
+  char* buf = NULL;
+  BUFFY* b = NULL;
+
+  if (list_empty(Incoming)) {
+    mutt_error (_("No mailboxes defined."));
+    return (1);
+  }
+
+  ReadInc = 0;
+
+  for (i = 0; i < Incoming->length; i++) {
+    b = (BUFFY*) Incoming->data[i];
+    magic = mx_get_magic (b->path);
+    if (magic != M_MAILDIR && magic != M_MH
+#ifdef USE_IMAP
+                   && magic != M_IMAP
+#endif
+               )
+      continue;
+    buf = str_dup (b->path);
+    mutt_pretty_mailbox (buf);
+    mutt_message (_("Rebuilding cache for %s..."), buf);
+    if ((ctx = mx_open_mailbox (b->path,
+                                M_READONLY | M_QUIET | M_NOSORT | M_COUNT,
+                                NULL)) != NULL)
+      mx_close_mailbox (ctx, 0);
+    mem_free (&buf);
+  }
+
+  mutt_clear_error ();
+
+  return (0);
+#endif
+}