-/*
- * 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
/* 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 */
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);
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;
/* 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);
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]",
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 {
*/
if (numfolders >= maxfolders) {
maxfolders += MAXFOLDERS;
- foldersToDo = (char **) mh_xrealloc (foldersToDo,
+ foldersToDo = mh_xrealloc (foldersToDo,
(size_t) (maxfolders * sizeof(*foldersToDo)));
}
if (*cp == '+' || *cp == '@') {
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);
}
}
* how to sort folders for output.
*/
-void
+static void
GetFolderOrder(void)
{
char *p, *s;
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
* Scan all the necessary folders
*/
-void
+static void
ScanFolders(void)
{
int i;
* the top of our search tree.
*/
-void
+static void
BuildFolderList(char *dirName, int searchdepth)
{
struct stat st;
* Recursive building of folder list
*/
-void
+static void
BuildFolderListRecurse(char *dirName, struct stat *s, int searchdepth)
{
char *base, name[PATH_MAX];
/* 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);
* 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;
}
/* 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;
}
}
* 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;
}
/* check if this sequence is private in any of the folders */
if (ivector_at (folders[i].private, j))
- has_private = 1;
+ has_private = true;
}
}
* Put them in priority order.
*/
-int
+static int
CompareFolders(struct Folder *f1, struct Folder *f2)
{
if (!alphaOrder && f1->priority != f2->priority)
* 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)));
}
}
* 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;