]> diplodocus.org Git - nmh/blobdiff - sbr/m_maildir.c
Add basic support for the STLS command in POP
[nmh] / sbr / m_maildir.c
index 441ca5022b3f4264a778a88159408ebb02aea519..5edc936047b8f325e418d3cfa973003f1f8d285c 100644 (file)
@@ -1,22 +1,21 @@
-
-/*
- * m_maildir.c -- get the path for the mail directory
- *
- * $Id$
+/* 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
  * complete copyright information.
  */
 
-#include <h/mh.h>
+#include "h/mh.h"
+#include "getfolder.h"
+#include "context_find.h"
+#include "path.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];
 
@@ -26,10 +25,11 @@ 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
@@ -40,19 +40,20 @@ m_maildir (char *folder)
 }
 
 
+/* 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));
+       cp = mh_xstrdup(m_maildir(folder));
        strncpy (mailfold, maildir, sizeof(mailfold));
     } else {
        cp = path (folder, TFOLDER);
@@ -62,20 +63,21 @@ m_mailpath (char *folder)
 }
 
 
+/* 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;
     }
@@ -83,12 +85,14 @@ exmaildir (char *folder)
     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++ = '/';