/*
* rmf.c -- remove a folder
*
- * $Id$
+ * This code is Copyright (c) 2002, by the authors of nmh. See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
*/
#include <h/mh.h>
-static struct swit switches[] = {
-#define INTRSW 0
- { "interactive", 0 },
-#define NINTRSW 1
- { "nointeractive", 0 },
-#define VERSIONSW 2
- { "version", 0 },
-#define HELPSW 3
- { "help", 4 },
- { NULL, 0 }
-};
+#define RMF_SWITCHES \
+ X("interactive", 0, INTRSW) \
+ X("nointeractive", 0, NINTRSW) \
+ X("version", 0, VERSIONSW) \
+ X("help", 0, HELPSW) \
+
+#define X(sw, minchars, id) id,
+DEFINE_SWITCH_ENUM(RMF);
+#undef X
+
+#define X(sw, minchars, id) { sw, minchars, id },
+DEFINE_SWITCH_ARRAY(RMF, switches);
+#undef X
/*
* static prototypes
char *cp, *folder = NULL, newfolder[BUFSIZ];
char buf[BUFSIZ], **argp, **arguments;
-#ifdef LOCALE
- setlocale(LC_ALL, "");
-#endif
- invo_name = r1bindex (argv[0], '/');
-
- /* read user profile/context */
- context_read();
+ if (nmh_init(argv[0], 1)) { return 1; }
arguments = getarguments (invo_name, argc, argv, 1);
argp = arguments;
snprintf (buf, sizeof(buf), "%s [+folder] [switches]",
invo_name);
print_help (buf, switches, 1);
- done (1);
+ done (0);
case VERSIONSW:
print_version(invo_name);
- done (1);
+ done (0);
case INTRSW:
interactive = 1;
if (folder)
adios (NULL, "only one folder at a time!");
else
- folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
+ folder = pluspath (cp);
} else {
adios (NULL, "usage: %s [+folder] [switches]", invo_name);
}
free (cp);
}
- if (rmf (folder) == OK && strcmp (context_find (pfolder), newfolder)) {
- printf ("[+%s now current]\n", newfolder);
- context_replace (pfolder, newfolder); /* update current folder */
+ if (rmf (folder) == OK) {
+ char *cfolder = context_find(pfolder);
+ if (cfolder && strcmp (cfolder, newfolder)) {
+ printf ("[+%s now current]\n", newfolder);
+ context_replace (pfolder, newfolder); /* update current folder */
+ }
}
context_save (); /* save the context file */
- return done (0);
+ done (0);
+ return 1;
}
static int
adios (NULL, "unable to read folder +%s", folder);
others = 0;
+ /*
+ * Run the external delete hook program.
+ */
+
+ (void)ext_hook("del-hook", maildir, (char *)0);
+
j = strlen(BACKUP_PREFIX);
while ((dp = readdir (dd))) {
switch (dp->d_name[0]) {
continue; /* else fall */
case ',':
-#ifdef MHE
- case '+':
-#endif /* MHE */
-#ifdef UCI
- case '_':
- case '#':
-#endif /* UCI */
break;
default:
others++;
continue;
}
- if (unlink (dp->d_name) == NOTOK) {
+ if (m_unlink (dp->d_name) == NOTOK) {
admonish (dp->d_name, "unable to unlink %s:", folder);
others++;
}
register char *cp;
register struct node *np, *pp;
- /* sanity check - check that context has been read */
- if (defpath == NULL)
- adios (NULL, "oops, context hasn't been read yet");
-
alen = strlen ("atr-");
plen = strlen (cp = m_mailpath (folder)) + 1;