diff --git a/src/bufferfd.c b/src/bufferfd.c index 62010a0fe365e600687c3e0c73c58dd97d75a632..9904c65234b394f0861fa152f3544a1e4af17970 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 83bed85933ba4d07862e7fdc8c6bb127168f6a59..36486e0c6aed3629de0b9dfa77c791518e4fd66a 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 8ac5702e8c2996701a14e30a4159eccf8b8e8457..c6ce2ee73e8b0dc92ef778e88b1d8b38a836dec4 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)