diff mbox

[FFmpeg-devel] avformat/utils: move mkdir_p to utils

Message ID 20180924125710.2018-1-lq@chinaffmpeg.org
State Accepted
Commit bb660800a55f5171f77316941afe2e62534ee72c
Headers show

Commit Message

Liu Steven Sept. 24, 2018, 12:57 p.m. UTC
Because it will be used by avformat/segment.c or other module which
need to automatically create sub-directories operation.

Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
---
 libavformat/hlsenc.c   | 37 ++-----------------------------------
 libavformat/internal.h |  8 ++++++++
 libavformat/utils.c    | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 44 insertions(+), 35 deletions(-)

Comments

Liu Steven Sept. 25, 2018, 1:58 p.m. UTC | #1
> On Sep 24, 2018, at 20:57, Steven Liu <lq@chinaffmpeg.org> wrote:
> 
> Because it will be used by avformat/segment.c or other module which
> need to automatically create sub-directories operation.
> 
> Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
> ---
> libavformat/hlsenc.c   | 37 ++-----------------------------------
> libavformat/internal.h |  8 ++++++++
> libavformat/utils.c    | 34 ++++++++++++++++++++++++++++++++++
> 3 files changed, 44 insertions(+), 35 deletions(-)
> 
> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
> index 99a59a231d..28c2dd62fc 100644
> --- a/libavformat/hlsenc.c
> +++ b/libavformat/hlsenc.c
> @@ -230,39 +230,6 @@ typedef struct HLSContext {
>     int64_t timeout;
> } HLSContext;
> 
> -static int mkdir_p(const char *path) {
> -    int ret = 0;
> -    char *temp = av_strdup(path);
> -    char *pos = temp;
> -    char tmp_ch = '\0';
> -
> -    if (!path || !temp) {
> -        return -1;
> -    }
> -
> -    if (!strncmp(temp, "/", 1) || !strncmp(temp, "\\", 1)) {
> -        pos++;
> -    } else if (!strncmp(temp, "./", 2) || !strncmp(temp, ".\\", 2)) {
> -        pos += 2;
> -    }
> -
> -    for ( ; *pos != '\0'; ++pos) {
> -        if (*pos == '/' || *pos == '\\') {
> -            tmp_ch = *pos;
> -            *pos = '\0';
> -            ret = mkdir(temp, 0755);
> -            *pos = tmp_ch;
> -        }
> -    }
> -
> -    if ((*(pos - 1) != '/') || (*(pos - 1) != '\\')) {
> -        ret = mkdir(temp, 0755);
> -    }
> -
> -    av_free(temp);
> -    return ret;
> -}
> -
> static int hlsenc_io_open(AVFormatContext *s, AVIOContext **pb, char *filename,
>                           AVDictionary **options) {
>     HLSContext *hls = s->priv_data;
> @@ -1545,7 +1512,7 @@ static int hls_start(AVFormatContext *s, VariantStream *vs)
>                     return AVERROR(ENOMEM);
>                 }
>                 dir = av_dirname(fn_copy);
> -                if (mkdir_p(dir) == -1 && errno != EEXIST) {
> +                if (ff_mkdir_p(dir) == -1 && errno != EEXIST) {
>                     av_log(oc, AV_LOG_ERROR, "Could not create directory %s with use_localtime_mkdir\n", dir);
>                     av_free(fn_copy);
>                     return AVERROR(errno);
> @@ -1776,7 +1743,7 @@ static int format_name(char *buf, int buf_len, int index)
>         }
> 
>         dir = av_dirname(mod_buf_dup);
> -        if (mkdir_p(dir) == -1 && errno != EEXIST) {
> +        if (ff_mkdir_p(dir) == -1 && errno != EEXIST) {
>             ret = AVERROR(errno);
>             goto fail;
>         }
> diff --git a/libavformat/internal.h b/libavformat/internal.h
> index 0b8120b842..399d0a68be 100644
> --- a/libavformat/internal.h
> +++ b/libavformat/internal.h
> @@ -211,6 +211,14 @@ do {\
> 
> struct tm *ff_brktimegm(time_t secs, struct tm *tm);
> 
> +/**
> + * Automatically create sub-directories
> + *
> + * @param path will create sub-directories by path
> + * @return 0, or < 0 on error
> + */
> +int ff_mkdir_p(const char *path);
> +
> char *ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase);
> 
> /**
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index a72f0a482e..7384f85604 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -4797,6 +4797,40 @@ void av_url_split(char *proto, int proto_size,
>     }
> }
> 
> +int ff_mkdir_p(const char *path)
> +{
> +    int ret = 0;
> +    char *temp = av_strdup(path);
> +    char *pos = temp;
> +    char tmp_ch = '\0';
> +
> +    if (!path || !temp) {
> +        return -1;
> +    }
> +
> +    if (!av_strncasecmp(temp, "/", 1) || !av_strncasecmp(temp, "\\", 1)) {
> +        pos++;
> +    } else if (!av_strncasecmp(temp, "./", 2) || !av_strncasecmp(temp, ".\\", 2)) {
> +        pos += 2;
> +    }
> +
> +    for ( ; *pos != '\0'; ++pos) {
> +        if (*pos == '/' || *pos == '\\') {
> +            tmp_ch = *pos;
> +            *pos = '\0';
> +            ret = mkdir(temp, 0755);
> +            *pos = tmp_ch;
> +        }
> +    }
> +
> +    if ((*(pos - 1) != '/') || (*(pos - 1) != '\\')) {
> +        ret = mkdir(temp, 0755);
> +    }
> +
> +    av_free(temp);
> +    return ret;
> +}
> +
> char *ff_data_to_hex(char *buff, const uint8_t *src, int s, int lowercase)
> {
>     int i;
> -- 
> 2.15.1
> 
> 
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Pushed

Thanks
Steven
diff mbox

Patch

diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 99a59a231d..28c2dd62fc 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -230,39 +230,6 @@  typedef struct HLSContext {
     int64_t timeout;
 } HLSContext;
 
-static int mkdir_p(const char *path) {
-    int ret = 0;
-    char *temp = av_strdup(path);
-    char *pos = temp;
-    char tmp_ch = '\0';
-
-    if (!path || !temp) {
-        return -1;
-    }
-
-    if (!strncmp(temp, "/", 1) || !strncmp(temp, "\\", 1)) {
-        pos++;
-    } else if (!strncmp(temp, "./", 2) || !strncmp(temp, ".\\", 2)) {
-        pos += 2;
-    }
-
-    for ( ; *pos != '\0'; ++pos) {
-        if (*pos == '/' || *pos == '\\') {
-            tmp_ch = *pos;
-            *pos = '\0';
-            ret = mkdir(temp, 0755);
-            *pos = tmp_ch;
-        }
-    }
-
-    if ((*(pos - 1) != '/') || (*(pos - 1) != '\\')) {
-        ret = mkdir(temp, 0755);
-    }
-
-    av_free(temp);
-    return ret;
-}
-
 static int hlsenc_io_open(AVFormatContext *s, AVIOContext **pb, char *filename,
                           AVDictionary **options) {
     HLSContext *hls = s->priv_data;
@@ -1545,7 +1512,7 @@  static int hls_start(AVFormatContext *s, VariantStream *vs)
                     return AVERROR(ENOMEM);
                 }
                 dir = av_dirname(fn_copy);
-                if (mkdir_p(dir) == -1 && errno != EEXIST) {
+                if (ff_mkdir_p(dir) == -1 && errno != EEXIST) {
                     av_log(oc, AV_LOG_ERROR, "Could not create directory %s with use_localtime_mkdir\n", dir);
                     av_free(fn_copy);
                     return AVERROR(errno);
@@ -1776,7 +1743,7 @@  static int format_name(char *buf, int buf_len, int index)
         }
 
         dir = av_dirname(mod_buf_dup);
-        if (mkdir_p(dir) == -1 && errno != EEXIST) {
+        if (ff_mkdir_p(dir) == -1 && errno != EEXIST) {
             ret = AVERROR(errno);
             goto fail;
         }
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 0b8120b842..399d0a68be 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -211,6 +211,14 @@  do {\
 
 struct tm *ff_brktimegm(time_t secs, struct tm *tm);
 
+/**
+ * Automatically create sub-directories
+ *
+ * @param path will create sub-directories by path
+ * @return 0, or < 0 on error
+ */
+int ff_mkdir_p(const char *path);
+
 char *ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase);
 
 /**
diff --git a/libavformat/utils.c b/libavformat/utils.c
index a72f0a482e..7384f85604 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -4797,6 +4797,40 @@  void av_url_split(char *proto, int proto_size,
     }
 }
 
+int ff_mkdir_p(const char *path)
+{
+    int ret = 0;
+    char *temp = av_strdup(path);
+    char *pos = temp;
+    char tmp_ch = '\0';
+
+    if (!path || !temp) {
+        return -1;
+    }
+
+    if (!av_strncasecmp(temp, "/", 1) || !av_strncasecmp(temp, "\\", 1)) {
+        pos++;
+    } else if (!av_strncasecmp(temp, "./", 2) || !av_strncasecmp(temp, ".\\", 2)) {
+        pos += 2;
+    }
+
+    for ( ; *pos != '\0'; ++pos) {
+        if (*pos == '/' || *pos == '\\') {
+            tmp_ch = *pos;
+            *pos = '\0';
+            ret = mkdir(temp, 0755);
+            *pos = tmp_ch;
+        }
+    }
+
+    if ((*(pos - 1) != '/') || (*(pos - 1) != '\\')) {
+        ret = mkdir(temp, 0755);
+    }
+
+    av_free(temp);
+    return ret;
+}
+
 char *ff_data_to_hex(char *buff, const uint8_t *src, int s, int lowercase)
 {
     int i;