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
3 changed files with 44 additions and 35 deletions
|
@ -230,39 +230,6 @@ typedef struct HLSContext {
|
||||||
int64_t timeout;
|
int64_t timeout;
|
||||||
} HLSContext;
|
} 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,
|
static int hlsenc_io_open(AVFormatContext *s, AVIOContext **pb, char *filename,
|
||||||
AVDictionary **options) {
|
AVDictionary **options) {
|
||||||
HLSContext *hls = s->priv_data;
|
HLSContext *hls = s->priv_data;
|
||||||
|
@ -1545,7 +1512,7 @@ static int hls_start(AVFormatContext *s, VariantStream *vs)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
}
|
}
|
||||||
dir = av_dirname(fn_copy);
|
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_log(oc, AV_LOG_ERROR, "Could not create directory %s with use_localtime_mkdir\n", dir);
|
||||||
av_free(fn_copy);
|
av_free(fn_copy);
|
||||||
return AVERROR(errno);
|
return AVERROR(errno);
|
||||||
|
@ -1776,7 +1743,7 @@ static int format_name(char *buf, int buf_len, int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
dir = av_dirname(mod_buf_dup);
|
dir = av_dirname(mod_buf_dup);
|
||||||
if (mkdir_p(dir) == -1 && errno != EEXIST) {
|
if (ff_mkdir_p(dir) == -1 && errno != EEXIST) {
|
||||||
ret = AVERROR(errno);
|
ret = AVERROR(errno);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,6 +211,14 @@ do {\
|
||||||
|
|
||||||
struct tm *ff_brktimegm(time_t secs, struct tm *tm);
|
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);
|
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)
|
char *ff_data_to_hex(char *buff, const uint8_t *src, int s, int lowercase)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue