[vlc-commits] sdp: don't change p_sys all the time
Rémi Denis-Courmont
git at videolan.org
Wed Apr 22 21:29:30 CEST 2020
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Apr 22 22:11:16 2020 +0300| [a488a36862b267fd322a9482f6d00546ce8a0d94] | committer: Rémi Denis-Courmont
sdp: don't change p_sys all the time
It works, but not very kosher...
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a488a36862b267fd322a9482f6d00546ce8a0d94
---
modules/access/sdp.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/modules/access/sdp.c b/modules/access/sdp.c
index c4e0355ecd..c60eb9b29a 100644
--- a/modules/access/sdp.c
+++ b/modules/access/sdp.c
@@ -31,24 +31,26 @@
static ssize_t Read (stream_t *access, void *buf, size_t len)
{
- char *in = access->p_sys, *out = buf;
+ const char **inp = access->p_sys, *in = *inp;
+ unsigned char *out = buf;
size_t i;
for (i = 0; i < len && *in != '\0'; i++)
*(out++) = *(in++);
- access->p_sys = in;
+ *inp = in;
return i;
}
static int Seek (stream_t *access, uint64_t position)
{
+ const char **inp = access->p_sys;
+
#if (UINT64_MAX > SIZE_MAX)
if (unlikely(position > SIZE_MAX))
position = SIZE_MAX;
#endif
- access->p_sys = (char *)access->psz_location
- + strnlen(access->psz_location, position);
+ *inp = access->psz_location + strnlen(access->psz_location, position);
return VLC_SUCCESS;
}
@@ -84,11 +86,17 @@ static int Open (vlc_object_t *obj)
{
stream_t *access = (stream_t *)obj;
+ const char **sys = vlc_obj_malloc(obj, sizeof (*sys));
+ if (unlikely(sys == NULL))
+ return VLC_ENOMEM;
+
+ *sys = access->psz_location;
+
access->pf_read = Read;
access->pf_block = NULL;
access->pf_seek = Seek;
access->pf_control = Control;
- access->p_sys = (char *)access->psz_location;
+ access->p_sys = sys;
return VLC_SUCCESS;
}
More information about the vlc-commits
mailing list