]> diplodocus.org Git - nmh/blobdiff - uip/flist.c
Add basic support for the STLS command in POP
[nmh] / uip / flist.c
index 089c76178b835d1541a9157076d8fdbe65ff8578..aedfd8842cca3b8d092fc7cfd55895a11398dd38 100644 (file)
@@ -1,5 +1,4 @@
-/*
- * flist.c -- list nmh folders containing messages
+/* flist.c -- list nmh folders containing messages
  *         -- in a given sequence
  *
  * originally by
  * any specification.
  */
 
-#include <h/mh.h>
-#include <h/utils.h>
+#include "h/mh.h"
+#include "sbr/getarguments.h"
+#include "sbr/smatch.h"
+#include "sbr/ssequal.h"
+#include "sbr/getfolder.h"
+#include "sbr/folder_read.h"
+#include "sbr/folder_free.h"
+#include "sbr/context_save.h"
+#include "sbr/context_replace.h"
+#include "sbr/context_find.h"
+#include "sbr/brkstring.h"
+#include "sbr/ambigsw.h"
+#include "sbr/path.h"
+#include "sbr/print_version.h"
+#include "sbr/print_help.h"
+#include "sbr/seq_getnum.h"
+#include "sbr/error.h"
+#include "h/utils.h"
+#include "h/done.h"
+#include "sbr/m_maildir.h"
 
 /*
  * We allocate space to record the names of folders
@@ -73,11 +90,11 @@ static int maxfolders;
 /* info on sequences to search for */
 static svector_t sequencesToDo;
 
-static int all        = FALSE;  /* scan all folders in top level?           */
-static int alphaOrder = FALSE; /* want alphabetical order only             */
-static int recurse    = FALSE; /* show nested folders?                     */
-static int showzero   = TRUE;  /* show folders even if no messages in seq? */
-static int Total      = TRUE;  /* display info on number of messages in    *
+static bool all;                /* scan all folders in top level? */
+static bool alphaOrder;         /* want alphabetical order only */
+static bool recurse;            /* show nested folders? */
+static bool showzero = true;    /* show folders even if no messages in seq? */
+static bool Total = true;       /* display info on number of messages in
                                 * sequence found, and total num messages   */
 
 static char curfolder[BUFSIZ]; /* name of the current folder */
@@ -90,17 +107,17 @@ static char *nmhdir;               /* base nmh mail directory    */
 typedef int (*qsort_comp) (const void *, const void *);
 
 /*
- * prototypes
+ * static prototypes
  */
-int CompareFolders(struct Folder *, struct Folder *);
-void GetFolderOrder(void);
-void ScanFolders(void);
-int AddFolder(char *, int);
-void BuildFolderList(char *, int);
-void BuildFolderListRecurse(char *, struct stat *, int);
-void PrintFolders(void);
-void AllocFolders(struct Folder **, int *, int);
-int AssignPriority(char *);
+static int CompareFolders(struct Folder *, struct Folder *);
+static void GetFolderOrder(void);
+static void ScanFolders(void);
+static int AddFolder(char *, int);
+static void BuildFolderList(char *, int);
+static void BuildFolderListRecurse(char *, struct stat *, int);
+static void PrintFolders(void);
+static void AllocFolders(struct Folder **, int *, int);
+static int AssignPriority(char *);
 static void do_readonly_folders(void);
 
 
@@ -112,13 +129,13 @@ main(int argc, char **argv)
     char **arguments;
     char buf[BUFSIZ];
 
-    if (nmh_init(argv[0], 1)) { return 1; }
+    if (nmh_init(argv[0], true, true)) { return 1; }
 
     /*
      * If program was invoked with name ending
      * in `s', then add switch `-all'.
      */
-    all = HasSuffixC(argv[0], 's');
+    all = has_suffix_c(argv[0], 's');
 
     arguments = getarguments (invo_name, argc, argv, 1);
     argp = arguments;
@@ -126,7 +143,7 @@ main(int argc, char **argv)
     /* allocate the initial space to record the folder names */
     numfolders = 0;
     maxfolders = MAXFOLDERS;
-    foldersToDo = (char **) mh_xmalloc ((size_t) (maxfolders * sizeof(*foldersToDo)));
+    foldersToDo = mh_xmalloc ((size_t) (maxfolders * sizeof(*foldersToDo)));
 
     /* no sequences yet */
     sequencesToDo = svector_create (0);
@@ -139,7 +156,7 @@ main(int argc, char **argv)
                ambigsw(cp, switches);
                done(1);
            case UNKWNSW:
-               adios(NULL, "-%s unknown", cp);
+               die("-%s unknown", cp);
 
            case HELPSW:
                snprintf(buf, sizeof(buf), "%s [+folder1 [+folder2 ...]][switches]",
@@ -152,47 +169,47 @@ main(int argc, char **argv)
 
            case SEQSW:
                if (!(cp = *argp++) || *cp == '-')
-                   adios (NULL, "missing argument to %s", argp[-2]);
+                   die("missing argument to %s", argp[-2]);
 
                svector_push_back (sequencesToDo, cp);
                break;
 
            case ALLSW:
-               all = TRUE;
+               all = true;
                break;
            case NOALLSW:
-               all = FALSE;
+               all = false;
                break;
 
            case SHOWZERO:
-               showzero = TRUE;
+               showzero = true;
                break;
            case NOSHOWZERO:
-               showzero = FALSE;
+               showzero = false;
                break;
 
            case ALPHASW:
-               alphaOrder = TRUE;
+               alphaOrder = true;
                break;
            case NOALPHASW:
-               alphaOrder = FALSE;
+               alphaOrder = false;
                break;
 
            case NOFASTSW:
            case TOTALSW:
-               Total = TRUE;
+               Total = true;
                break;
 
            case FASTSW:
            case NOTOTALSW:
-               Total = FALSE;
+               Total = false;
                break;
 
            case RECURSE:
-               recurse = TRUE;
+               recurse = true;
                break;
            case NORECURSE:
-               recurse = FALSE;
+               recurse = false;
                break;
            }
        } else {
@@ -202,7 +219,7 @@ main(int argc, char **argv)
             */
            if (numfolders >= maxfolders) {
                maxfolders += MAXFOLDERS;
-               foldersToDo = (char **) mh_xrealloc (foldersToDo,
+               foldersToDo = mh_xrealloc (foldersToDo,
                    (size_t) (maxfolders * sizeof(*foldersToDo)));
            }
            if (*cp == '+' || *cp == '@') {
@@ -236,7 +253,7 @@ main(int argc, char **argv)
            for (; ap && *ap; ap++)
                svector_push_back (sequencesToDo, *ap);
        } else {
-           adios (NULL, "no sequence specified or %s profile entry found", usequence);
+           die("no sequence specified or %s profile entry found", usequence);
        }
     }
 
@@ -254,7 +271,7 @@ main(int argc, char **argv)
  * how to sort folders for output.
  */
 
-void
+static void
 GetFolderOrder(void)
 {
     char *p, *s;
@@ -274,7 +291,7 @@ GetFolderOrder(void)
            AllocFolders(&orders, &nOrdersAlloced, nOrders + 1);
            o = &orders[nOrders++];
            o->priority = priority++;
-           o->name = (char *) mh_xmalloc(p - s + 1);
+           o->name = mh_xmalloc(p - s + 1);
            strncpy(o->name, s, p - s);
            o->name[p - s] = 0;
        } else
@@ -286,7 +303,7 @@ GetFolderOrder(void)
  * Scan all the necessary folders
  */
 
-void
+static void
 ScanFolders(void)
 {
     int i;
@@ -335,7 +352,7 @@ ScanFolders(void)
  * the top of our search tree.
  */
 
-void
+static void
 BuildFolderList(char *dirName, int searchdepth)
 {
     struct stat st;
@@ -366,7 +383,7 @@ BuildFolderList(char *dirName, int searchdepth)
  * Recursive building of folder list
  */
 
-void
+static void
 BuildFolderListRecurse(char *dirName, struct stat *s, int searchdepth)
 {
     char *base, name[PATH_MAX];
@@ -410,7 +427,7 @@ BuildFolderListRecurse(char *dirName, struct stat *s, int searchdepth)
        /* Check to see if the name of the file is a number
         * if it is, we assume it's a mail file and skip it
         */
-       for (n = dp->d_name; *n && isdigit((unsigned char) *n); n++);
+       for (n = dp->d_name; isdigit((unsigned char)*n); n++);
        if (!*n)
            continue;
        strncpy (name, base, sizeof(name) - 2);
@@ -438,11 +455,12 @@ BuildFolderListRecurse(char *dirName, struct stat *s, int searchdepth)
  * messages and the number of messages in each sequence.
  */
 
-int
+static int
 AddFolder(char *name, int force)
 {
     unsigned int i;
-    int msgnum, nonzero;
+    int msgnum;
+    bool nonzero;
     ivector_t seqnum = ivector_create (0), nSeq = ivector_create (0);
     struct Folder *f;
     struct msgs *mp;
@@ -477,10 +495,10 @@ AddFolder(char *name, int force)
     }
 
     /* Check if any of the sequence checks were nonzero */
-    nonzero = 0;
+    nonzero = false;
     for (i = 0; i < svector_size (sequencesToDo); i++) {
        if (ivector_at (nSeq, i) > 0) {
-           nonzero = 1;
+           nonzero = true;
            break;
        }
     }
@@ -516,17 +534,18 @@ AddFolder(char *name, int force)
  * Print the folder/sequence information
  */
 
-void
+static void
 PrintFolders(void)
 {
     char tmpname[BUFSIZ];
-    unsigned int i, j, len, has_private = 0;
+    unsigned int i, j, len;
+    bool has_private = false;
     unsigned int maxfolderlen = 0, maxseqlen = 0;
     int maxnum = 0, maxseq = 0;
 
     if (!Total) {
        for (i = 0; i < nFolders; i++)
-           printf("%s\n", folders[i].name);
+           puts(folders[i].name);
        return;
     }
 
@@ -560,7 +579,7 @@ PrintFolders(void)
 
            /* check if this sequence is private in any of the folders */
            if (ivector_at (folders[i].private, j))
-               has_private = 1;
+               has_private = true;
        }
     }
 
@@ -595,7 +614,7 @@ PrintFolders(void)
  * Put them in priority order.
  */
 
-int
+static int
 CompareFolders(struct Folder *f1, struct Folder *f2)
 {
     if (!alphaOrder && f1->priority != f2->priority)
@@ -607,17 +626,17 @@ CompareFolders(struct Folder *f1, struct Folder *f2)
  * Make sure we have at least n folders allocated.
  */
 
-void
+static void
 AllocFolders(struct Folder **f, int *nfa, int n)
 {
     if (n <= *nfa)
        return;
     if (*f == NULL) {
        *nfa = 10;
-       *f = (struct Folder *) mh_xmalloc (*nfa * (sizeof(struct Folder)));
+       *f = mh_xmalloc (*nfa * (sizeof(struct Folder)));
     } else {
        *nfa *= 2;
-       *f = (struct Folder *) mh_xrealloc (*f, *nfa * (sizeof(struct Folder)));
+       *f = mh_xrealloc (*f, *nfa * (sizeof(struct Folder)));
     }
 }
 
@@ -625,7 +644,7 @@ AllocFolders(struct Folder **f, int *nfa, int n)
  * Return the priority for a name.  The highest comes from an exact match.
  * After that, the longest match (then first) assigns the priority.
  */
-int
+static int
 AssignPriority(char *name)
 {
     int i, ol, nl;