move buffer.[hc] into lib-lib/
[apps/madmutt.git] / buffy.c
diff --git a/buffy.c b/buffy.c
index ac8ef46..99a746d 100644 (file)
--- a/buffy.c
+++ b/buffy.c
 # include "config.h"
 #endif
 
+#include <lib-lib/mem.h>
+#include <lib-lib/buffer.h>
+#include <lib-lib/macros.h>
+
 #include "mutt.h"
 #include "buffy.h"
 #include "mx.h"
@@ -26,8 +30,6 @@
 #include "imap.h"
 #endif
 
-#include "lib/mem.h"
-#include "lib/intl.h"
 
 #include <string.h>
 #include <sys/stat.h>
@@ -51,16 +53,16 @@ static short BuffyNotify = 0;   /* # of unnotified new boxes */
 /* Find the last message in the file. 
  * upon success return 0. If no message found - return -1 */
 
-static int fseek_last_message (FILE * f)
+static int fseeko_last_message (FILE * f)
 {
-  long int pos;
+  LOFF_T pos;
   char buffer[BUFSIZ + 9];      /* 7 for "\n\nFrom " */
   int bytes_read;
   int i;                        /* Index into `buffer' for scanning.  */
 
-  memset (buffer, 0, sizeof (buffer));
-  fseek (f, 0, SEEK_END);
-  pos = ftell (f);
+  p_clear(buffer, 1);
+  fseeko (f, 0, SEEK_END);
+  pos = ftello (f);
 
   /* Set `bytes_read' to the size of the last, probably partial, buffer; 0 <
    * `bytes_read' <= `BUFSIZ'.  */
@@ -71,14 +73,14 @@ static int fseek_last_message (FILE * f)
    * reads will be on block boundaries, which might increase efficiency.  */
   while ((pos -= bytes_read) >= 0) {
     /* we save in the buffer at the end the first 7 chars from the last read */
-    strncpy (buffer + BUFSIZ, buffer, 5 + 2);   /* 2 == 2 * str_len(CRLF) */
-    fseek (f, pos, SEEK_SET);
+    strncpy (buffer + BUFSIZ, buffer, 5 + 2);   /* 2 == 2 * m_strlen(CRLF) */
+    fseeko (f, pos, SEEK_SET);
     bytes_read = fread (buffer, sizeof (char), bytes_read, f);
     if (bytes_read == -1)
       return -1;
     for (i = bytes_read; --i >= 0;)
-      if (!str_ncmp (buffer + i, "\n\nFrom ", str_len ("\n\nFrom "))) { /* found it - go to the beginning of the From */
-        fseek (f, pos + i + 2, SEEK_SET);
+      if (!str_ncmp (buffer + i, "\n\nFrom ", m_strlen("\n\nFrom "))) { /* found it - go to the beginning of the From */
+        fseeko (f, pos + i + 2, SEEK_SET);
         return 0;
       }
     bytes_read = BUFSIZ;
@@ -86,7 +88,7 @@ static int fseek_last_message (FILE * f)
 
   /* here we are at the beginning of the file */
   if (!str_ncmp ("From ", buffer, 5)) {
-    fseek (f, 0, 0);
+    fseeko (f, 0, 0);
     return (0);
   }
 
@@ -100,7 +102,7 @@ static int test_last_status_new (FILE * f)
   ENVELOPE *tmp_envelope;
   int result = 0;
 
-  if (fseek_last_message (f) == -1)
+  if (fseeko_last_message (f) == -1)
     return (0);
 
   hdr = mutt_new_header ();
@@ -169,8 +171,8 @@ void buffy_update_mailbox (BUFFY * b)
 
 /* func to free buffy for list_del() */
 static void buffy_free (BUFFY** p) {
-  FREE(&(*p)->path);
-  FREE(p);
+  p_delete(&(*p)->path);
+  p_delete(p);
 }
 
 int buffy_lookup (const char* path) {
@@ -198,7 +200,7 @@ int buffy_parse_mailboxes (BUFFER * path, BUFFER * s, unsigned long data,
     mutt_extract_token (path, s, 0);
     strfcpy (buf, path->data, sizeof (buf));
 
-    if (data == M_UNMAILBOXES && str_eq (buf, "*") == 0) {
+    if (data == M_UNMAILBOXES && str_eq (buf, "*")) {
       list_del (&Incoming, (list_del_t*) buffy_free);
       return 0;
     }
@@ -219,8 +221,8 @@ int buffy_parse_mailboxes (BUFFER * path, BUFFER * s, unsigned long data,
     }
 
     if (i < 0) {
-      tmp = safe_calloc (1, sizeof (BUFFY));
-      tmp->path = str_dup (buf);
+      tmp = p_new(BUFFY, 1);
+      tmp->path = m_strdup(buf);
       tmp->magic = 0;
       list_push_back (&Incoming, tmp);
       i = Incoming->length-1;
@@ -259,7 +261,7 @@ int buffy_parse_mailboxes (BUFFER * path, BUFFER * s, unsigned long data,
 /* values for force:
  * 0    don't force any checks + update sidebar
  * 1    force all checks + update sidebar
- * 2    force all checks + _don't_ update sidebar
+ * 2    don't force any checks + _don't_ update sidebar
  */
 int buffy_check (int force)
 {
@@ -276,7 +278,7 @@ int buffy_check (int force)
   time_t last2;
 
   /* update postponed count as well, on force */
-  if (force != 0)
+  if (force == 1)
     mutt_update_num_postponed ();
 #endif
 
@@ -293,11 +295,11 @@ int buffy_check (int force)
     return BuffyCount;
 
   last1 = BuffyTime;
-  if (force != 0 || now - BuffyTime >= BuffyTimeout)
+  if (force == 1 || now - BuffyTime >= BuffyTimeout)
     BuffyTime = now;
 #ifdef USE_IMAP
   last2 = ImapBuffyTime;
-  if (force != 0 || now - ImapBuffyTime >= ImapBuffyTimeout)
+  if (force == 1 || now - ImapBuffyTime >= ImapBuffyTimeout)
     ImapBuffyTime = now;
 #endif
   BuffyCount = 0;
@@ -336,7 +338,7 @@ int buffy_check (int force)
       case M_MBOX:
       case M_MMDF:
         /* only check on force or $mail_check reached */
-        if (force != 0 || (now - last1 >= BuffyTimeout)) {
+        if (force == 1 || (now - last1 >= BuffyTimeout)) {
           if (!count) {
             if (STAT_CHECK) {
               BuffyCount++;
@@ -372,7 +374,7 @@ int buffy_check (int force)
 
       case M_MAILDIR:
         /* only check on force or $mail_check reached */
-        if (force != 0 || (now - last1 >= BuffyTimeout)) {
+        if (force == 1 || (now - last1 >= BuffyTimeout)) {
           snprintf (path, sizeof (path), "%s/new", tmp->path);
           if ((dirp = opendir (path)) == NULL) {
             tmp->magic = 0;
@@ -389,10 +391,11 @@ int buffy_check (int force)
               /* one new and undeleted message is enough */
               if (tmp->new == 0) {
                 BuffyCount++;
-                tmp->new = 1;
-                if (!count)
+                if (!count) {
                   /* if sidebar invisible -> done */
+                  tmp->new = 1;
                   break;
+                }
               }
               tmp->msgcount++;
               tmp->msg_unread++;
@@ -430,7 +433,7 @@ int buffy_check (int force)
 
       case M_MH:
         /* only check on force or $mail_check reached */
-        if (force != 0 || (now - last1 >= BuffyTimeout)) {
+        if (force == 1 || (now - last1 >= BuffyTimeout)) {
           if ((tmp->new = mh_buffy (tmp->path)) > 0)
             BuffyCount++;
           if (count) {
@@ -460,16 +463,16 @@ int buffy_check (int force)
 #ifdef USE_IMAP
       case M_IMAP:
         /* only check on force or $imap_mail_check reached */
-        if (force != 0 || (now - last2 >= ImapBuffyTimeout)) {
+        if (force == 1 || (now - last2 >= ImapBuffyTimeout)) {
           tmp->msgcount = imap_mailbox_check (tmp->path, 0);
-          if ((tmp->new = imap_mailbox_check (tmp->path, 1)) > 0) {
+          tmp->new = imap_mailbox_check (tmp->path, 1);
+          tmp->msg_unread = imap_mailbox_check (tmp->path, 2);
+          if (tmp->new > 0)
             BuffyCount++;
-            tmp->msg_unread = tmp->new; /* for sidebar; wtf? */
-          }
-          else {
+          else
             tmp->new = 0;
+          if (tmp->msg_unread < 0)
             tmp->msg_unread = 0;
-          }
         }
         else if (tmp->new > 0)
           /* keep current stats if !force and !$imap_mail_check reached */
@@ -505,13 +508,10 @@ int buffy_list (void)
   int have_unnotified = BuffyNotify;
   int i = 0;
 
-  if (option (OPTFORCEBUFFYCHECK))
-    buffy_check (1);
-
   pos = 0;
   first = 1;
   buffylist[0] = 0;
-  pos += str_len (strncat (buffylist, _("New mail in "), sizeof (buffylist) - 1 - pos)); /* __STRNCAT_CHECKED__ */
+  pos += m_strlen(strncat (buffylist, _("New mail in "), sizeof (buffylist) - 1 - pos)); /* __STRNCAT_CHECKED__ */
   if (Incoming) {
     for (i = 0; i < Incoming->length; i++) {
       tmp = (BUFFY*) Incoming->data[i];
@@ -522,19 +522,19 @@ int buffy_list (void)
       strfcpy (path, tmp->path, sizeof (path));
       mutt_pretty_mailbox (path);
 
-      if (!first && pos + str_len (path) >= COLS - 7)
+      if (!first && pos + m_strlen(path) >= COLS - 7)
         break;
 
       if (!first)
-        pos += str_len (strncat (buffylist + pos, ", ", sizeof (buffylist) - 1 - pos));    /* __STRNCAT_CHECKED__ */
+        pos += m_strlen(strncat (buffylist + pos, ", ", sizeof (buffylist) - 1 - pos));    /* __STRNCAT_CHECKED__ */
 
       /* Prepend an asterisk to mailboxes not already notified */
       if (!tmp->notified) {
-        /* pos += str_len (strncat(buffylist + pos, "*", sizeof(buffylist)-1-pos));  __STRNCAT_CHECKED__ */
+        /* pos += m_strlen(strncat(buffylist + pos, "*", sizeof(buffylist)-1-pos));  __STRNCAT_CHECKED__ */
         tmp->notified = 1;
         BuffyNotify--;
       }
-      pos += str_len (strncat (buffylist + pos, path, sizeof (buffylist) - 1 - pos));      /* __STRNCAT_CHECKED__ */
+      pos += m_strlen(strncat (buffylist + pos, path, sizeof (buffylist) - 1 - pos));      /* __STRNCAT_CHECKED__ */
       first = 0;
     }
   }