From 26a1babec6628dff14e428def9cff4e92a4ef7c8 Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Thu, 30 Nov 2006 00:27:54 +0100 Subject: [PATCH] add m_dirname that implement a non broken libgen-like function. --- lib-lib/file.c | 20 ++++++++++++++++++++ lib-lib/file.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/lib-lib/file.c b/lib-lib/file.c index 946d867..5e37996 100644 --- a/lib-lib/file.c +++ b/lib-lib/file.c @@ -364,6 +364,26 @@ const char *mutt_basename(const char *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) diff --git a/lib-lib/file.h b/lib-lib/file.h index 1b242c3..f2efefd 100644 --- a/lib-lib/file.h +++ b/lib-lib/file.h @@ -68,6 +68,8 @@ int mutt_copy_bytes(FILE *, FILE *, ssize_t); /****************************************************************************/ 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); -- 2.20.1