mirror of https://git.ffmpeg.org/ffmpeg.git
avformat/utils: move mkdir_p to utils
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>
This commit is contained in:
parent
a7429d853d
commit
bb660800a5
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue