add m_dirname that implement a non broken libgen-like function.
authorPierre Habouzit <madcoder@debian.org>
Wed, 29 Nov 2006 23:27:54 +0000 (00:27 +0100)
committerPierre Habouzit <madcoder@debian.org>
Wed, 29 Nov 2006 23:27:54 +0000 (00:27 +0100)
lib-lib/file.c
lib-lib/file.h

index 946d867..5e37996 100644 (file)
@@ -364,6 +364,26 @@ const char *mutt_basename(const char *f)
     return p ? p + 1 : f;
 }
 
     return p ? p + 1 : f;
 }
 
+ssize_t m_dirname(char *dst, ssize_t dlen, const char *path)
+{
+    int plen = m_strlen(path);
+
+    while (plen > 0 && path[plen - 1] == '/')
+        plen--;
+
+    while (plen > 0 && path[plen - 1] != '/')
+        plen--;
+
+    while (plen > 0 && path[plen - 1] == '/')
+        plen--;
+
+    if (plen)
+        return m_strncpy(dst, dlen, path, plen);
+
+    if (*path == '/')
+        return m_strcpy(dst, dlen, "/");
+    return m_strcpy(dst, dlen, ".");
+}
 
 char *
 mutt_concat_path(char *d, ssize_t n, const char *dir, const char *fname)
 
 char *
 mutt_concat_path(char *d, ssize_t n, const char *dir, const char *fname)
index 1b242c3..f2efefd 100644 (file)
@@ -68,6 +68,8 @@ int mutt_copy_bytes(FILE *, FILE *, ssize_t);
 /****************************************************************************/
 
 const char *mutt_basename(const char *);
 /****************************************************************************/
 
 const char *mutt_basename(const char *);
+ssize_t m_dirname(char *, ssize_t, const char *);
+
 char *mutt_concat_path(char *, ssize_t, const char *, const char *);
 
 void mutt_sanitize_filename(char *, short);
 char *mutt_concat_path(char *, ssize_t, const char *, const char *);
 
 void mutt_sanitize_filename(char *, short);