From 0e0a0f3268581c104d5f40602dab62639bb8981b Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Tue, 19 May 2020 16:13:28 +0200
Subject: [PATCH] =?UTF-8?q?Seek,=20but=20with=20some=20karas=20(where=20th?=
 =?UTF-8?q?ere=20is=204006=20void=20elements=E2=80=A6),=20the=20gotten=20v?=
 =?UTF-8?q?alue=20is=20not=20really=20what=20we=20expect?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/bufferfd.c | 18 +++++++-----------
 src/common.c   |  3 +--
 src/mkv/mkv.c  |  5 +++--
 3 files changed, 11 insertions(+), 15 deletions(-)

diff --git a/src/bufferfd.c b/src/bufferfd.c
index 62010a0f..9904c652 100644
--- a/src/bufferfd.c
+++ b/src/bufferfd.c
@@ -2,7 +2,6 @@
 
 #include <string.h>
 #include <unistd.h>
-
 #include <common/bufferfd.h>
 
 static inline ssize_t
@@ -40,17 +39,15 @@ bufferfd_byte(struct bufferfd *bf, uint8_t *res)
     return bufferfd_bytes(bf, 1, res);
 }
 
-static inline ssize_t
-__skip(struct bufferfd *bf, const size_t n, const size_t b_size)
-{
-    uint8_t b[b_size];
-    return bufferfd_bytes(bf, n, b);
-}
-
 ssize_t
 bufferfd_skip(struct bufferfd *bf, const size_t n)
 {
-    return __skip(bf, n, n > BUFFER_MAX ? BUFFER_MAX : n);
+    if (lseek(bf->fd, n - bf->len + bf->pos, SEEK_CUR) < 0)
+        return -1;
+    /* The call to lseek invalidated bf->buffer */
+    bf->len = 0;
+    __fill(bf);
+    return 0;
 }
 
 ssize_t
@@ -58,8 +55,7 @@ bufferfd_seek(struct bufferfd *bf, size_t pos)
 {
     if (lseek(bf->fd, pos, SEEK_SET) < 0)
         return -1;
-
-    // The call to lseek invalidated bf->buffer.
+    /* The call to lseek invalidated bf->buffer */
     bf->pos = 0;
     bf->len = 0;
     return 0;
diff --git a/src/common.c b/src/common.c
index 83bed859..36486e0c 100644
--- a/src/common.c
+++ b/src/common.c
@@ -40,9 +40,8 @@ be_double_t(const uint8_t bytes[], size_t n)
         uint8_t _bytes[8];
         double _double;
     } res;
-    for (size_t i = 0; i < n; ++i) {
+    for (size_t i = 0; i < n; ++i)
         res._bytes[i] = bytes[n - i - 1] & 0xff;
-    }
     return res._double;
 }
 
diff --git a/src/mkv/mkv.c b/src/mkv/mkv.c
index 8ac5702e..c6ce2ee7 100644
--- a/src/mkv/mkv.c
+++ b/src/mkv/mkv.c
@@ -553,7 +553,7 @@ kara_read_segment_info(struct bufferfd *bf, double *len)
         }
 
         else if ((n = mkv_skip_element(bf)) < 0)
-                return -1;
+            return -1;
 
         data_len -= n;
     }
@@ -593,7 +593,8 @@ kara_read_length(double *len, const char *filename)
             goto error;
 
         if (eid == EBML_MKV_SEEKHEAD) {
-            if (mkv_seek(&file, (size_t) header_len, (size_t) EBML_MKV_SEGMENT) < 0)
+            if (mkv_seek(&file, (size_t) header_len,
+                         (size_t) EBML_MKV_SEGMENT) < 0)
                 goto error;
         } else if (eid == EBML_MKV_INFO) {
             if (kara_read_segment_info(&file, len) < 0)
-- 
GitLab