Fix uip/whom.c for C89 compatibility
[mmh] / uip / rmf.c
index 096a9bf..273477e 100644 (file)
--- a/uip/rmf.c
+++ b/uip/rmf.c
@@ -7,12 +7,17 @@
 */
 
 #include <h/mh.h>
+#include <h/utils.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <locale.h>
+#include <sysexits.h>
 
 static struct swit switches[] = {
 #define INTRSW  0
        { "interactive", 0 },
 #define NINTRSW  1
-       { "nointeractive", 0 },
+       { "nointeractive", 2 },
 #define VERSIONSW  2
        { "Version", 0 },
 #define HELPSW  3
@@ -20,6 +25,8 @@ static struct swit switches[] = {
        { NULL, 0 }
 };
 
+char *version=VERSION;
+
 /*
 ** static prototypes
 */
@@ -34,9 +41,7 @@ main(int argc, char **argv)
        char *cp, *folder = NULL, newfolder[BUFSIZ];
        char buf[BUFSIZ], **argp, **arguments;
 
-#ifdef LOCALE
        setlocale(LC_ALL, "");
-#endif
        invo_name = mhbasename(argv[0]);
 
        /* read user profile/context */
@@ -50,17 +55,17 @@ main(int argc, char **argv)
                        switch (smatch(++cp, switches)) {
                        case AMBIGSW:
                                ambigsw(cp, switches);
-                               done(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] [switches]", invo_name);
                                print_help(buf, switches, 1);
-                               done(1);
+                               exit(argc == 2 ? EX_OK : EX_USAGE);
                        case VERSIONSW:
                                print_version(invo_name);
-                               done(1);
+                               exit(argc == 2 ? EX_OK : EX_USAGE);
 
                        case INTRSW:
                                interactive = 1;
@@ -72,11 +77,11 @@ main(int argc, char **argv)
                }
                if (*cp == '+' || *cp == '@') {
                        if (folder)
-                               adios(NULL, "only one folder at a time!");
+                               adios(EX_USAGE, NULL, "only one folder at a time!");
                        else
-                               folder = getcpy(expandfol(cp));
+                               folder = mh_xstrdup(expandfol(cp));
                } else {
-                       adios(NULL, "usage: %s [+folder] [switches]",
+                       adios(EX_USAGE, NULL, "usage: %s [+folder] [switches]",
                                        invo_name);
                }
        }
@@ -86,7 +91,7 @@ main(int argc, char **argv)
                defolder++;
        }
        if (strcmp(toabsdir(folder), pwd()) == 0)
-               adios(NULL, "You can't remove the current working directory");
+               adios(EX_USAGE, NULL, "You can't remove the current working directory");
 
        if (interactive == -1)
                interactive = defolder;
@@ -107,8 +112,8 @@ main(int argc, char **argv)
        if (interactive) {
                cp = concat("Remove folder \"", folder, "\"? ", NULL);
                if (!getanswer(cp))
-                       done(0);
-               free(cp);
+                       exit(EX_OK);
+               mh_free0(&cp);
        }
 
        if (rmf(folder) == OK) {
@@ -120,18 +125,17 @@ main(int argc, char **argv)
                }
        }
        context_save();  /* save the context file */
-       done(0);
-       return 1;
+       return 0;
 }
 
 static int
 rmf(char *folder)
 {
-       int i, j, others;
-       register char *maildir;
+       int i, others;
+       char *maildir;
        char cur[BUFSIZ];
-       register struct dirent *dp;
-       register DIR *dd;
+       struct dirent *dp;
+       DIR *dd;
 
        switch (i = chdir(maildir = toabsdir(folder))) {
        case OK:
@@ -152,7 +156,7 @@ rmf(char *folder)
        }
 
        if ((dd = opendir(".")) == NULL)
-               adios(NULL, "unable to read folder +%s", folder);
+               adios(EX_IOERR, NULL, "unable to read folder +%s", folder);
        others = 0;
 
        /*
@@ -161,7 +165,6 @@ rmf(char *folder)
 
        ext_hook("del-hook", maildir, NULL);
 
-       j = strlen(backup_prefix);
        while ((dp = readdir(dd))) {
                switch (dp->d_name[0]) {
                case '.':
@@ -175,8 +178,6 @@ rmf(char *folder)
                default:
                        if (m_atoi(dp->d_name))
                                break;
-                       if (strncmp(dp->d_name, backup_prefix, j) == 0)
-                               break;
 
                        admonish(NULL, "file \"%s/%s\" not deleted",
                                        folder, dp->d_name);
@@ -220,12 +221,12 @@ rmf(char *folder)
 static void
 rma(char *folder)
 {
-       register int alen, j, plen;
-       register char *cp;
-       register struct node *np, *pp;
+       int alen, j, plen;
+       char *cp;
+       struct node *np, *pp;
 
        alen = strlen("atr-");
-       plen = strlen(cp = getcpy(toabsdir(folder))) + 1;
+       plen = strlen(cp = mh_xstrdup(toabsdir(folder))) + 1;
 
        /*
        ** Search context list for keys that look like
@@ -250,5 +251,5 @@ rma(char *folder)
                        pp = np;
                }
        }
-       free(cp);
+       mh_free0(&cp);
 }