Browse Source

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>
tags/n4.1
Steven Liu 6 years ago
parent
commit
bb660800a5
3 changed files with 44 additions and 35 deletions
  1. +2
    -35
      libavformat/hlsenc.c
  2. +8
    -0
      libavformat/internal.h
  3. +34
    -0
      libavformat/utils.c

+ 2
- 35
libavformat/hlsenc.c View File

@@ -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;
}


+ 8
- 0
libavformat/internal.h View File

@@ -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);

/**


+ 34
- 0
libavformat/utils.c View File

@@ -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…
Cancel
Save