summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Barbato <lu_zero@gentoo.org>2012-12-23 21:25:24 +0100
committerLuca Barbato <lu_zero@gentoo.org>2012-12-29 17:26:22 +0100
commitd8fd06c37de94d78eb37af93177de7c3040cf1f2 (patch)
tree6505d5945220cc9541c2302a83ac4641f4238491
parentc73c87b41298ff81b5a86569b0f680a556fc1a21 (diff)
avstring: add av_basename and av_dirname
Thread safe version of the common basename and dirname.
-rw-r--r--Changelog3
-rw-r--r--doc/APIchanges3
-rw-r--r--libavutil/avstring.c41
-rw-r--r--libavutil/avstring.h16
-rw-r--r--libavutil/version.h2
5 files changed, 64 insertions, 1 deletions
diff --git a/Changelog b/Changelog
index 8dfffcfcd6..b5950219a3 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 1c6247ef56..a5a0bea1fc 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 c14832e7b9..2c88bd3d5b 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 ed4e465cbc..acd6610d38 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 f69c73e929..1dbb11ca21 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, \