add some list functions.
[apps/madmutt.git] / buffy.c
diff --git a/buffy.c b/buffy.c
index 28f88ac..96ae2fa 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 "buffer.h"
 #include "mx.h"
 #include "mh.h"
 #include "sidebar.h"
@@ -27,8 +30,6 @@
 #include "imap.h"
 #endif
 
-#include "lib/mem.h"
-#include "lib/intl.h"
 
 #include <string.h>
 #include <sys/stat.h>
@@ -59,7 +60,7 @@ static int fseeko_last_message (FILE * f)
   int bytes_read;
   int i;                        /* Index into `buffer' for scanning.  */
 
-  memset (buffer, 0, sizeof (buffer));
+  p_clear(buffer, 1);
   fseeko (f, 0, SEEK_END);
   pos = ftello (f);
 
@@ -72,13 +73,13 @@ static int fseeko_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) */
+    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 */
+      if (!m_strncmp(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;
       }
@@ -86,7 +87,7 @@ static int fseeko_last_message (FILE * f)
   }
 
   /* here we are at the beginning of the file */
-  if (!str_ncmp ("From ", buffer, 5)) {
+  if (!m_strncmp("From ", buffer, 5)) {
     fseeko (f, 0, 0);
     return (0);
   }
@@ -170,8 +171,8 @@ void buffy_update_mailbox (BUFFY * b)
 
 /* func to free buffy for list_del() */
 static void buffy_free (BUFFY** p) {
-  mem_free(&(*p)->path);
-  mem_free(p);
+  p_delete(&(*p)->path);
+  p_delete(p);
 }
 
 int buffy_lookup (const char* path) {
@@ -197,7 +198,7 @@ int buffy_parse_mailboxes (BUFFER * path, BUFFER * s, unsigned long data,
 
   while (MoreArgs (s)) {
     mutt_extract_token (path, s, 0);
-    strfcpy (buf, path->data, sizeof (buf));
+    m_strcpy(buf, sizeof(buf), path->data);
 
     if (data == M_UNMAILBOXES && str_eq (buf, "*")) {
       list_del (&Incoming, (list_del_t*) buffy_free);
@@ -220,8 +221,8 @@ int buffy_parse_mailboxes (BUFFER * path, BUFFER * s, unsigned long data,
     }
 
     if (i < 0) {
-      tmp = mem_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;
@@ -260,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)
 {
@@ -277,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
 
@@ -294,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;
@@ -337,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++;
@@ -373,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;
@@ -390,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++;
@@ -431,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) {
@@ -461,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 */
@@ -509,7 +511,7 @@ int buffy_list (void)
   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];
@@ -517,22 +519,22 @@ int buffy_list (void)
       if (tmp->new <= 0 || (have_unnotified && tmp->notified))
         continue;
 
-      strfcpy (path, tmp->path, sizeof (path));
+      m_strcpy(path, sizeof(path), tmp->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;
     }
   }
@@ -598,7 +600,7 @@ void buffy_next (char *s, size_t slen)
      * reported new mail */
     buffy_check (0);
   } else {
-    strfcpy (s, ((BUFFY*) Incoming->data[c])->path, slen);
+    m_strcpy(s, slen, ((BUFFY*)Incoming->data[c])->path);
     mutt_pretty_mailbox (s);
   }
 }