Commit a77fb510 authored by Limin Wang's avatar Limin Wang Committed by Steven Liu

avutil/avstring: support input path as a null pointer or empty string

Linux and OSX systems support basename and dirname via <libgen.h>, I plan to
make the wrapper interface conform to the standard interface first.
If it is feasible, I will continue to modify it to call the system interface
if there is already a system call interface.

You can get more description about the system interface by below command:
 "man 3 basename"
Reviewed-by: 's avatarMarton Balint <cus@passwd.hu>
Reviewed-by: 's avatarTomas Härdin <tjoppen@acc.umu.se>
Reviewed-by: 's avatarSteven Liu <lq@chinaffmpeg.org>
Signed-off-by: 's avatarLimin Wang <lance.lmwang@gmail.com>
parent 985ed651
...@@ -257,8 +257,12 @@ char *av_strireplace(const char *str, const char *from, const char *to) ...@@ -257,8 +257,12 @@ char *av_strireplace(const char *str, const char *from, const char *to)
const char *av_basename(const char *path) const char *av_basename(const char *path)
{ {
char *p = strrchr(path, '/'); char *p;
if (!path || *path == '\0')
return ".";
p = strrchr(path, '/');
#if HAVE_DOS_PATHS #if HAVE_DOS_PATHS
char *q = strrchr(path, '\\'); char *q = strrchr(path, '\\');
char *d = strchr(path, ':'); char *d = strchr(path, ':');
...@@ -274,11 +278,11 @@ const char *av_basename(const char *path) ...@@ -274,11 +278,11 @@ const char *av_basename(const char *path)
const char *av_dirname(char *path) const char *av_dirname(char *path)
{ {
char *p = strrchr(path, '/'); char *p = path ? strrchr(path, '/') : NULL;
#if HAVE_DOS_PATHS #if HAVE_DOS_PATHS
char *q = strrchr(path, '\\'); char *q = path ? strrchr(path, '\\') : NULL;
char *d = strchr(path, ':'); char *d = path ? strchr(path, ':') : NULL;
d = d ? d + 1 : d; d = d ? d + 1 : d;
......
...@@ -274,16 +274,21 @@ char *av_strireplace(const char *str, const char *from, const char *to); ...@@ -274,16 +274,21 @@ char *av_strireplace(const char *str, const char *from, const char *to);
/** /**
* Thread safe basename. * Thread safe basename.
* @param path the path, on DOS both \ and / are considered separators. * @param path the string to parse, on DOS both \ and / are considered separators.
* @return pointer to the basename substring. * @return pointer to the basename substring.
* If path does not contain a slash, the function returns a copy of path.
* If path is a NULL pointer or points to an empty string, a pointer
* to a string "." is returned.
*/ */
const char *av_basename(const char *path); const char *av_basename(const char *path);
/** /**
* Thread safe dirname. * Thread safe dirname.
* @param path the path, on DOS both \ and / are considered separators. * @param path the string to parse, on DOS both \ and / are considered separators.
* @return the path with the separator replaced by the string terminator or ".". * @return A pointer to a string that's the parent directory of path.
* @note the function may change the input string. * If path is a NULL pointer or points to an empty string, a pointer
* to a string "." is returned.
* @note the function may modify the contents of the path, so copies should be passed.
*/ */
const char *av_dirname(char *path); const char *av_dirname(char *path);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment