[FFmpeg-devel] [PATCH v2] avformat/hlsenc: fix the av_dirname path isn't include separator in the end of string
lance.lmwang at gmail.com
lance.lmwang at gmail.com
Wed Oct 9 04:37:07 EEST 2019
From: Limin Wang <lance.lmwang at gmail.com>
Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
---
libavformat/hlsenc.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index cd4320114d..74f5e08729 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -478,6 +478,12 @@ static void reflush_dynbuf(VariantStream *vs, int *range_length)
avio_write(vs->out, vs->temp_buffer, *range_length);;
}
+#if HAVE_DOS_PATHS
+#define SEPARATOR '\\'
+#else
+#define SEPARATOR '/'
+#endif
+
static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls,
VariantStream *vs)
{
@@ -544,7 +550,7 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls,
while (segment) {
av_log(hls, AV_LOG_DEBUG, "deleting old segment %s\n",
segment->filename);
- path_size = (hls->use_localtime_mkdir ? 0 : strlen(dirname)) + strlen(segment->filename) + 1;
+ path_size = (hls->use_localtime_mkdir ? 0 : strlen(dirname)+1) + strlen(segment->filename) + 1;
path = av_malloc(path_size);
if (!path) {
ret = AVERROR(ENOMEM);
@@ -554,8 +560,7 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls,
if (hls->use_localtime_mkdir)
av_strlcpy(path, segment->filename, path_size);
else { // segment->filename contains basename only
- av_strlcpy(path, dirname, path_size);
- av_strlcat(path, segment->filename, path_size);
+ snprintf(path, path_size, "%s%c%s", dirname, SEPARATOR, segment->filename);
}
proto = avio_find_protocol_name(s->url);
@@ -575,15 +580,14 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls,
if ((segment->sub_filename[0] != '\0')) {
char *vtt_dirname_r = av_strdup(vs->vtt_avf->url);
vtt_dirname = (char*)av_dirname(vtt_dirname_r);
- sub_path_size = strlen(segment->sub_filename) + 1 + strlen(vtt_dirname);
+ sub_path_size = strlen(segment->sub_filename) + 1 + strlen(vtt_dirname) + 1;
sub_path = av_malloc(sub_path_size);
if (!sub_path) {
ret = AVERROR(ENOMEM);
goto fail;
}
- av_strlcpy(sub_path, vtt_dirname, sub_path_size);
- av_strlcat(sub_path, segment->sub_filename, sub_path_size);
+ snprintf(sub_path, sub_path_size, "%s%c%s", vtt_dirname, SEPARATOR, segment->sub_filename);
if (hls->method || (proto && !av_strcasecmp(proto, "http"))) {
av_dict_set(&options, "method", "DELETE", 0);
--
2.21.0
More information about the ffmpeg-devel
mailing list