summaryrefslogtreecommitdiff
path: root/main/stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/stream.c')
-rw-r--r--main/stream.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/main/stream.c b/main/stream.c
index 804a0b8ee..fb146931d 100644
--- a/main/stream.c
+++ b/main/stream.c
@@ -95,23 +95,26 @@ struct ast_stream *ast_stream_alloc(const char *name, enum ast_media_type type)
return stream;
}
-struct ast_stream *ast_stream_clone(const struct ast_stream *stream)
+struct ast_stream *ast_stream_clone(const struct ast_stream *stream, const char *name)
{
struct ast_stream *new_stream;
size_t stream_size;
int idx;
+ const char *stream_name;
if (!stream) {
return NULL;
}
- stream_size = sizeof(*stream) + strlen(stream->name) + 1;
+ stream_name = name ?: stream->name;
+ stream_size = sizeof(*stream) + strlen(stream_name) + 1;
new_stream = ast_calloc(1, stream_size);
if (!new_stream) {
return NULL;
}
- memcpy(new_stream, stream, stream_size);
+ memcpy(new_stream, stream, sizeof(*new_stream));
+ strcpy(new_stream->name, stream_name); /* Safe */
if (new_stream->formats) {
ao2_ref(new_stream->formats, +1);
}
@@ -269,7 +272,7 @@ struct ast_stream_topology *ast_stream_topology_clone(
for (i = 0; i < AST_VECTOR_SIZE(&topology->streams); i++) {
struct ast_stream *stream =
- ast_stream_clone(AST_VECTOR_GET(&topology->streams, i));
+ ast_stream_clone(AST_VECTOR_GET(&topology->streams, i), NULL);
if (!stream || AST_VECTOR_APPEND(&new_topology->streams, stream)) {
ast_stream_free(stream);