Message ID | 20180924125710.2018-1-lq@chinaffmpeg.org |
---|---|
State | Accepted |
Commit | bb660800a55f5171f77316941afe2e62534ee72c |
Headers | show |
> 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 --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;
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(-)