X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Ffolder.c;h=3e3cd760804afa8c0bf37974787eb08fa03f39c0;hp=e46519b5aa723a43b9ebec0df5fdbc015113b018;hb=dc08e69006fdf9edb458dc23885dd669f3b4a176;hpb=b284ee1b3c718e41bdcab6600532025b8743d477 diff --git a/uip/folder.c b/uip/folder.c index e46519b..3e3cd76 100644 --- a/uip/folder.c +++ b/uip/folder.c @@ -12,6 +12,9 @@ #include #include #include +#include +#include +#include static struct swit switches[] = { #define ALLSW 0 @@ -136,18 +139,17 @@ main(int argc, char **argv) switch (smatch(++cp, switches)) { case AMBIGSW: ambigsw(cp, switches); - /*sysexits.h EX_USAGE*/ - exit(1); + exit(EX_USAGE); case UNKWNSW: - adios(NULL, "-%s unknown", cp); + adios(EX_USAGE, NULL, "-%s unknown", cp); case HELPSW: snprintf(buf, sizeof(buf), "%s [+folder] [msg] [switches]", invo_name); print_help(buf, switches, 1); - exit(0); + exit(argc == 2 ? EX_OK : EX_USAGE); case VERSIONSW: print_version(invo_name); - exit(0); + exit(argc == 2 ? EX_OK : EX_USAGE); case ALLSW: all = 1; @@ -227,12 +229,12 @@ main(int argc, char **argv) } if (*cp == '+' || *cp == '@') { if (argfolder) - adios(NULL, "only one folder at a time!"); + adios(EX_USAGE, NULL, "only one folder at a time!"); else - argfolder = getcpy(expandfol(cp)); + argfolder = mh_xstrdup(expandfol(cp)); } else { if (msg) - adios(NULL, "only one (current) message at a time!"); + adios(EX_USAGE, NULL, "only one (current) message at a time!"); else msg = cp; } @@ -253,38 +255,38 @@ main(int argc, char **argv) /* If no folder is given, the current folder and */ /* the top of the folder stack are swapped. */ if ((cp = context_find(stack))) { - dp = getcpy(cp); + dp = mh_xstrdup(cp); ap = brkstring(dp, " ", "\n"); - argfolder = getcpy(*ap++); + argfolder = mh_xstrdup(*ap++); } else { - adios(NULL, "no other folder"); + adios(EX_USAGE, NULL, "no other folder"); } - for (cp = getcpy(getcurfol()); *ap; ap++) + for (cp = mh_xstrdup(getcurfol()); *ap; ap++) cp = add(*ap, add(" ", cp)); - free(dp); + mh_free0(&dp); context_replace(stack, cp); /* update folder stack */ } else { /* update folder stack */ context_replace(stack, (cp = context_find (stack)) ? concat(getcurfol(), " ", cp, NULL) : - getcpy(getcurfol())); + mh_xstrdup(getcurfol())); } } /* Popping a folder off of the folder stack */ if (popsw) { if (argfolder) - adios(NULL, "sorry, no folders allowed with -pop"); + adios(EX_USAGE, NULL, "sorry, no folders allowed with -pop"); if ((cp = context_find(stack))) { - dp = getcpy(cp); + dp = mh_xstrdup(cp); ap = brkstring(dp, " ", "\n"); - argfolder = getcpy(*ap++); + argfolder = mh_xstrdup(*ap++); } else { - adios(NULL, "folder stack empty"); + adios(EX_DATAERR, NULL, "folder stack empty"); } if (*ap) { /* if there's anything left in the stack */ - cp = getcpy(*ap++); + cp = mh_xstrdup(*ap++); for (; *ap; ap++) cp = add(*ap, add(" ", cp)); context_replace(stack, cp); /* update folder stack */ @@ -292,12 +294,12 @@ main(int argc, char **argv) /* delete folder stack entry from context */ context_del(stack); } - free(dp); + mh_free0(&dp); } if (pushsw || popsw) { cp = toabsdir(argfolder); if (access(cp, F_OK) == NOTOK) - adios(cp, "unable to find folder"); + adios(EX_DATAERR, cp, "unable to find folder"); /* update current folder */ context_replace(curfolder, argfolder); context_save(); /* save the context file */ @@ -308,35 +310,36 @@ main(int argc, char **argv) if (listsw) { printf("%s", argfolder ? argfolder : getcurfol()); if ((cp = context_find(stack))) { - dp = getcpy(cp); + dp = mh_xstrdup(cp); for (ap = brkstring(dp, " ", "\n"); *ap; ap++) printf(" %s", *ap); - free(dp); + mh_free0(&dp); } printf("\n"); if (!printsw) { - exit(0); + exit(EX_OK); } } /* Allocate initial space to record folder information */ maxFolderInfo = CRAWL_NUMFOLDERS; - fi = mh_xmalloc(maxFolderInfo * sizeof(*fi)); + fi = mh_xcalloc(maxFolderInfo, sizeof(*fi)); /* ** Scan the folders */ + /* + ** change directory to base of nmh directory for + ** crawl_folders + */ + if (chdir(nmhdir) == NOTOK) { + adios(EX_OSERR, nmhdir, "unable to change directory to"); + } if (all || ftotal > 0) { /* ** If no folder is given, do them all */ - /* - ** change directory to base of nmh directory for - ** crawl_folders - */ - if (chdir(nmhdir) == NOTOK) - adios(nmhdir, "unable to change directory to"); if (!argfolder) { if (msg) admonish(NULL, "no folder given for message %s", msg); @@ -381,7 +384,7 @@ main(int argc, char **argv) print_folders(); context_save(); - return 0; + return EX_OK; } static int @@ -424,7 +427,7 @@ get_folder_info_body(char *fold, char *msg, boolean *crawl_children) if (fpack) { if (folder_pack(&mp, fverb) == -1) { - exit(0); + exit(EX_OK); } seq_save(mp); /* synchronize the sequences */ context_save(); /* save the context file */ @@ -628,7 +631,7 @@ readonly_folders(void) { int atrlen; char atrcur[BUFSIZ]; - register struct node *np; + struct node *np; snprintf(atrcur, sizeof(atrcur), "atr-%s-", seq_cur); atrlen = strlen(atrcur);