-
-/*
- * m_maildir.c -- get the path for the mail directory
+/* m_maildir.c -- get the path for the mail directory
*
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
*/
#include <h/mh.h>
+#include <h/utils.h>
+#include "m_maildir.h"
#define CWD "./"
-#define NCWD (sizeof(CWD) - 1)
#define DOT "."
#define DOTDOT ".."
#define PWD "../"
-#define NPWD (sizeof(PWD) - 1)
static char mailfold[BUFSIZ];
static char *exmaildir (char *);
+/* Returns static char[], never NULL. */
char *
m_maildir (char *folder)
{
- register char *cp, *ep;
+ char *cp, *ep;
if ((cp = exmaildir (folder))
&& (ep = cp + strlen (cp) - 1) > cp
}
+/* Return value must be free(3)'d. */
char *
m_mailpath (char *folder)
{
- register char *cp;
+ char *cp;
char maildir[BUFSIZ];
if (*folder != '/'
- && strncmp (folder, CWD, NCWD)
+ && !has_prefix(folder, CWD)
&& strcmp (folder, DOT)
&& strcmp (folder, DOTDOT)
- && strncmp (folder, PWD, NPWD)) {
+ && !has_prefix(folder, PWD)) {
strncpy (maildir, mailfold, sizeof(maildir)); /* preserve... */
cp = getcpy (m_maildir (folder));
strncpy (mailfold, maildir, sizeof(mailfold));
}
+/* Returns static char[], never NULL. */
static char *
exmaildir (char *folder)
{
- register char *cp, *pp;
+ char *cp, *pp;
/* use current folder if none is specified */
if (folder == NULL)
folder = getfolder(1);
if (!(*folder != '/'
- && strncmp (folder, CWD, NCWD)
+ && !has_prefix(folder, CWD)
&& strcmp (folder, DOT)
&& strcmp (folder, DOTDOT)
- && strncmp (folder, PWD, NPWD))) {
+ && !has_prefix(folder, PWD))) {
strncpy (mailfold, folder, sizeof(mailfold));
return mailfold;
}
cp = mailfold;
if ((pp = context_find ("path")) && *pp) {
if (*pp != '/') {
- sprintf (cp, "%s/", mypath);
+ snprintf(cp, sizeof mailfold, "%s/", mypath);
cp += strlen (cp);
}
- cp = copy (pp, cp);
+ cp = stpcpy(cp, pp);
} else {
- cp = copy (path ("./", TFOLDER), cp);
+ char *p = path("./", TFOLDER);
+ cp = stpcpy(cp, p);
+ free(p);
}
if (cp[-1] != '/')
*cp++ = '/';