Discussion:
[vlc-commits] sdp: simplify
Rémi Denis-Courmont
2017-12-10 14:03:53 UTC
Permalink
vlc | branch: master | Rémi Denis-Courmont <***@remlab.net> | Sun Dec 10 16:03:13 2017 +0200| [13bf37748ea9a60b9ac4ca594612910e0506988b] | committer: Rémi Denis-Courmont

sdp: simplify
http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=13bf37748ea9a60b9ac4ca594612910e0506988b
---

modules/access/sdp.c | 51 ++++++++++++++++++---------------------------------
1 file changed, 18 insertions(+), 33 deletions(-)

diff --git a/modules/access/sdp.c b/modules/access/sdp.c
index d781ad9330..fc7efa3fc4 100644
--- a/modules/access/sdp.c
+++ b/modules/access/sdp.c
@@ -22,6 +22,9 @@
# include "config.h"
#endif

+#include <limits.h>
+#include <string.h>
+
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_access.h>
@@ -43,62 +46,44 @@ static ssize_t Read (stream_t *, void *, size_t);
static int Seek (stream_t *, uint64_t);
static int Control (stream_t *, int, va_list);

-struct access_sys_t
-{
- size_t offset;
- size_t length;
-};
-
static int Open (vlc_object_t *obj)
{
stream_t *access = (stream_t *)obj;
- size_t len = strlen (access->psz_location);
-
- access_sys_t *sys = vlc_obj_malloc(obj, sizeof(*sys));
- if (unlikely(sys == NULL))
- return VLC_ENOMEM;
-
- sys->offset = 0;
- sys->length = len;

access->pf_read = Read;
access->pf_block = NULL;
access->pf_seek = Seek;
access->pf_control = Control;
- access->p_sys = sys;
+ access->p_sys = (char *)access->psz_location;

return VLC_SUCCESS;
}

static ssize_t Read (stream_t *access, void *buf, size_t len)
{
- access_sys_t *sys = access->p_sys;
+ char *in = access->p_sys, *out = buf;
+ size_t i;

- if (sys->offset >= sys->length)
- return 0;
+ for (i = 0; i < len && *in != '\0'; i++)
+ *(out++) = *(in++);

- if (len > sys->length - sys->offset)
- len = sys->length - sys->offset;
- memcpy(buf, access->psz_location + sys->offset, len);
- sys->offset += len;
- return len;
+ access->p_sys = in;
+ return i;
}

static int Seek (stream_t *access, uint64_t position)
{
- access_sys_t *sys = access->p_sys;
-
- if (position > sys->length)
- position = sys->length;
-
- sys->offset = position;
+#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);
return VLC_SUCCESS;
}

static int Control (stream_t *access, int query, va_list args)
{
- access_sys_t *sys = access->p_sys;
-
switch (query)
{
case STREAM_CAN_SEEK:
@@ -106,13 +91,13 @@ static int Control (stream_t *access, int query, va_list args)
case STREAM_CAN_PAUSE:
case STREAM_CAN_CONTROL_PACE:
{
- bool *b = va_arg(args, bool*);
+ bool *b = va_arg(args, bool *);
*b = true;
return VLC_SUCCESS;
}

case STREAM_GET_SIZE:
- *va_arg(args, uint64_t *) = sys->length;
+ *va_arg(args, uint64_t *) = strlen(access->psz_location);
return VLC_SUCCESS;

case STREAM_GET_PTS_DELAY:

Loading...