[FFmpeg-cvslog] avstring: add av_basename and av_dirname

Luca Barbato git at videolan.org
Sun Dec 30 14:01:41 CET 2012


ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Sun Dec 23 21:25:24 2012 +0100| [d8fd06c37de94d78eb37af93177de7c3040cf1f2] | committer: Luca Barbato

avstring: add av_basename and av_dirname

Thread safe version of the common basename and dirname.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d8fd06c37de94d78eb37af93177de7c3040cf1f2
---

 Changelog            |    3 +++
 doc/APIchanges       |    3 +++
 libavutil/avstring.c |   41 +++++++++++++++++++++++++++++++++++++++++
 libavutil/avstring.h |   16 ++++++++++++++++
 libavutil/version.h  |    2 +-
 5 files changed, 64 insertions(+), 1 deletion(-)

diff --git a/Changelog b/Changelog
index 8dfffcf..b595021 100644
--- a/Changelog
+++ b/Changelog
@@ -2,6 +2,9 @@ Entries are sorted chronologically from oldest to youngest within each release,
 releases are sorted from youngest to oldest.
 
 version <next>:
+- av_basename and av_dirname
+
+version 9_beta3:
 - ashowinfo audio filter
 - 24-bit FLAC encoding
 - audio volume filter
diff --git a/doc/APIchanges b/doc/APIchanges
index 1c6247e..a5a0bea 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,9 @@ libavutil:     2012-10-22
 
 API changes, most recent first:
 
+2012-xx-xx - xxxxxxx - lavu 52.2.1 - avstring.h
+  Add av_basename() and av_dirname().
+
 2012-xx-xx - xxxxxxx - lavu 52.2.0 - audioconvert.h
   Rename audioconvert.h to channel_layout.h. audioconvert.h is now deprecated.
 
diff --git a/libavutil/avstring.c b/libavutil/avstring.c
index c14832e..2c88bd3 100644
--- a/libavutil/avstring.c
+++ b/libavutil/avstring.c
@@ -25,6 +25,8 @@
 #include <string.h>
 #include <ctype.h>
 #include "avstring.h"
+#include "config.h"
+#include "common.h"
 #include "mem.h"
 
 int av_strstart(const char *str, const char *pfx, const char **ptr)
@@ -156,6 +158,45 @@ int av_strncasecmp(const char *a, const char *b, size_t n)
     return c1 - c2;
 }
 
+const char *av_basename(const char *path)
+{
+    char *p = strrchr(path, '/');
+
+#if HAVE_DOS_PATHS
+    char *q = strrchr(path, '\\');
+    char *d = strchr(path, ':');
+
+    p = FFMAX3(p, q, d);
+#endif
+
+    if (!p)
+        return path;
+
+    return p + 1;
+}
+
+const char *av_dirname(char *path)
+{
+    char *p = strrchr(path, '/');
+
+#if HAVE_DOS_PATHS
+    char *q = strrchr(path, '\\');
+    char *d = strchr(path, ':');
+
+    d = d ? d + 1 : d;
+
+    p = FFMAX3(p, q, d);
+#endif
+
+    if (!p)
+        return ".";
+
+    *p = '\0';
+
+    return path;
+}
+
+
 #ifdef TEST
 
 #include "common.h"
diff --git a/libavutil/avstring.h b/libavutil/avstring.h
index ed4e465..acd6610 100644
--- a/libavutil/avstring.h
+++ b/libavutil/avstring.h
@@ -168,6 +168,22 @@ int av_strcasecmp(const char *a, const char *b);
  */
 int av_strncasecmp(const char *a, const char *b, size_t n);
 
+
+/**
+ * Thread safe basename.
+ * @param path the path, on DOS both \ and / are considered separators.
+ * @return pointer to the basename substring.
+ */
+const char *av_basename(const char *path);
+
+/**
+ * Thread safe dirname.
+ * @param path the path, on DOS both \ and / are considered separators.
+ * @return the path with the separator replaced by the string terminator or ".".
+ * @note the function may change the input string.
+ */
+const char *av_dirname(char *path);
+
 /**
  * @}
  */
diff --git a/libavutil/version.h b/libavutil/version.h
index f69c73e..1dbb11c 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -37,7 +37,7 @@
  */
 
 #define LIBAVUTIL_VERSION_MAJOR 52
-#define LIBAVUTIL_VERSION_MINOR  2
+#define LIBAVUTIL_VERSION_MINOR  3
 #define LIBAVUTIL_VERSION_MICRO  0
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \



More information about the ffmpeg-cvslog mailing list