Browse Source

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: Marton Balint <cus@passwd.hu>
Reviewed-by: Tomas Härdin <tjoppen@acc.umu.se>
Reviewed-by: Steven Liu <lq@chinaffmpeg.org>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
tags/n4.3
Limin Wang Steven Liu 5 years ago
parent
commit
a77fb510c2
2 changed files with 17 additions and 8 deletions
  1. +8
    -4
      libavutil/avstring.c
  2. +9
    -4
      libavutil/avstring.h

+ 8
- 4
libavutil/avstring.c View File

@@ -257,8 +257,12 @@ char *av_strireplace(const char *str, const char *from, const char *to)

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
char *q = strrchr(path, '\\');
char *d = strchr(path, ':');
@@ -274,11 +278,11 @@ const char *av_basename(const char *path)

const char *av_dirname(char *path)
{
char *p = strrchr(path, '/');
char *p = path ? strrchr(path, '/') : NULL;

#if HAVE_DOS_PATHS
char *q = strrchr(path, '\\');
char *d = strchr(path, ':');
char *q = path ? strrchr(path, '\\') : NULL;
char *d = path ? strchr(path, ':') : NULL;

d = d ? d + 1 : d;



+ 9
- 4
libavutil/avstring.h View File

@@ -274,16 +274,21 @@ char *av_strireplace(const char *str, const char *from, const char *to);

/**
* 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.
* 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);

/**
* 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.
* @param path the string to parse, on DOS both \ and / are considered separators.
* @return A pointer to a string that's the parent directory of path.
* 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);



Loading…
Cancel
Save