]> git.sesse.net Git - vlc/blobdiff - modules/stream_filter/decomp.c
stream_filter: dash: ensure chunks have hostname and fully chain build url
[vlc] / modules / stream_filter / decomp.c
index df821d5b14906c7b168a57a9424b93b9a72be59c..2b83310b391868c0a020ed20e888e23bf92b08f2 100644 (file)
@@ -155,7 +155,8 @@ static void *Thread (void *data)
             {
                 if (j == 0)
                     errno = EPIPE;
-                msg_Err (stream, "cannot write data (%m)");
+                msg_Err (stream, "cannot write data: %s",
+                         vlc_strerror_c(errno));
                 error = true;
                 break;
             }
@@ -182,16 +183,19 @@ static int Peek (stream_t *, const uint8_t **, unsigned int);
  */
 static int Read (stream_t *stream, void *buf, unsigned int buflen)
 {
-    stream_sys_t *p_sys = stream->p_sys;
-    block_t *peeked;
-    ssize_t length;
+    stream_sys_t *sys = stream->p_sys;
+    unsigned ret = 0;
 
     if (buf == NULL) /* caller skips data, get big enough peek buffer */
         buflen = Peek (stream, &(const uint8_t *){ NULL }, buflen);
 
-    if ((peeked = p_sys->peeked) != NULL)
+    block_t *peeked = sys->peeked;
+    if (peeked != NULL)
     {   /* dequeue peeked data */
-        length = (buflen > peeked->i_buffer) ? peeked->i_buffer : buflen;
+        size_t length = peeked->i_buffer;
+        if (length > buflen)
+            length = buflen;
+
         if (buf != NULL)
         {
             memcpy (buf, peeked->p_buffer, length);
@@ -200,24 +204,25 @@ static int Read (stream_t *stream, void *buf, unsigned int buflen)
         buflen -= length;
         peeked->p_buffer += length;
         peeked->i_buffer -= length;
+
         if (peeked->i_buffer == 0)
         {
             block_Release (peeked);
-            p_sys->peeked = NULL;
+            sys->peeked = NULL;
         }
-        p_sys->offset += length;
 
-        if (buflen > 0)
-            length += Read (stream, ((char *)buf) + length, buflen - length);
-        return length;
+        sys->offset += length;
+        ret += length;
     }
     assert ((buf != NULL) || (buflen == 0));
 
-    length = net_Read (stream, p_sys->read_fd, NULL, buf, buflen, false);
-    if (length < 0)
-        return 0;
-    p_sys->offset += length;
-    return length;
+    ssize_t val = net_Read (stream, sys->read_fd, NULL, buf, buflen, false);
+    if (val > 0)
+    {
+        sys->offset += val;
+        ret += val;
+    }
+    return ret;
 }
 
 /**
@@ -225,23 +230,32 @@ static int Read (stream_t *stream, void *buf, unsigned int buflen)
  */
 static int Peek (stream_t *stream, const uint8_t **pbuf, unsigned int len)
 {
-    stream_sys_t *p_sys = stream->p_sys;
-    block_t *peeked = p_sys->peeked;
-    size_t curlen = 0;
-    int fd = p_sys->read_fd;
+    stream_sys_t *sys = stream->p_sys;
+    block_t *peeked = sys->peeked;
+    size_t curlen;
 
-    if (peeked == NULL)
+    if (peeked != NULL)
+    {
+        curlen = peeked->i_buffer;
+        if (curlen < len)
+           peeked = block_Realloc (peeked, 0, len);
+    }
+    else
+    {
+        curlen = 0;
         peeked = block_Alloc (len);
-    else if ((curlen = peeked->i_buffer) < len)
-        peeked = block_Realloc (peeked, 0, len);
+    }
 
-    if ((p_sys->peeked = peeked) == NULL)
+    sys->peeked = peeked;
+    if (unlikely(peeked == NULL))
         return 0;
 
     while (curlen < len)
     {
-        ssize_t val = net_Read (stream, fd, NULL, peeked->p_buffer + curlen,
-                                len - curlen, false);
+        ssize_t val;
+
+        val = net_Read (stream, sys->read_fd, NULL,
+                        peeked->p_buffer + curlen, len - curlen, false);
         if (val <= 0)
             break;
         curlen += val;
@@ -355,7 +369,7 @@ static int Open (stream_t *stream, const char *path)
                 }
                 else
                 {
-                    msg_Err (stream, "Cannot execute %s", path);
+                    msg_Err (stream, "cannot execute %s", path);
                     p_sys->pid = -1;
                 }
                 posix_spawn_file_actions_destroy (&actions);
@@ -364,7 +378,7 @@ static int Open (stream_t *stream, const char *path)
             switch (p_sys->pid = fork ())
             {
                 case -1:
-                    msg_Err (stream, "Cannot fork (%m)");
+                    msg_Err (stream, "cannot fork: %s", vlc_strerror_c(errno));
                     break;
                 case 0:
                     dup2 (comp[0], 0);