[FFmpeg-devel] [PATCH] avformat/utils: move mkdir_p to utils
Steven Liu
lq at chinaffmpeg.org
Tue Sep 25 16:58:46 EEST 2018
> On Sep 24, 2018, at 20:57, Steven Liu <lq at 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 at 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 at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Pushed
Thanks
Steven
More information about the ffmpeg-devel
mailing list