diff --git a/inc/lektor/bufferfd.h b/inc/lektor/bufferfd.h index ffc4aacd4cf2fc56693cb4bdf501d2840c82fa92..8e03dc79903a51e1391d250ff284290e1ecda014 100644 --- a/inc/lektor/bufferfd.h +++ b/inc/lektor/bufferfd.h @@ -42,7 +42,7 @@ ssize_t bufferfd_bytes(struct bufferfd *bf, size_t n, uint8_t *res); ssize_t bufferfd_byte(struct bufferfd *bf, uint8_t *res); /* Consume `n` bytes without returning them. */ -ssize_t bufferfd_skip(struct bufferfd *bf, size_t n); +ssize_t bufferfd_skip(struct bufferfd *bf, const size_t n); /* Move the file cursor to the absolute position `pos` (0 is the beginning of * the file). diff --git a/src/mkv/bufferfd.c b/src/mkv/bufferfd.c index f41eefd501c3a9ad9f5b504e003a8359a6032849..3de8ac4eee492bdc2ebc81b5aea142969e4639f1 100644 --- a/src/mkv/bufferfd.c +++ b/src/mkv/bufferfd.c @@ -5,8 +5,8 @@ #include <lektor/bufferfd.h> -static ssize_t -bufferfd_fill(struct bufferfd *bf) +static inline ssize_t +__fill(struct bufferfd *bf) { if (bf->len <= bf->pos) { ssize_t n = read(bf->fd, bf->buffer, BUFFER_MAX); @@ -24,8 +24,7 @@ bufferfd_fill(struct bufferfd *bf) ssize_t bufferfd_bytes(struct bufferfd *bf, size_t n, uint8_t *res) { - // TODO repeat until n is reached - ssize_t r = bufferfd_fill(bf); + ssize_t r = __fill(bf); /* TODO repeat until n is reached */ if (r < (ssize_t) n) return -1; @@ -41,14 +40,19 @@ bufferfd_byte(struct bufferfd *bf, uint8_t *res) return bufferfd_bytes(bf, 1, res); } -ssize_t -bufferfd_skip(struct bufferfd *bf, size_t n) +static inline ssize_t +__skip(struct bufferfd *bf, const size_t n, const size_t b_size) { - // TODO less dirty bomb - uint8_t b[4096]; + 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); +} + ssize_t bufferfd_seek(struct bufferfd *bf, size_t pos) { diff --git a/src/mkv/mkv.c b/src/mkv/mkv.c index fe1b6fff80086c99968c79fb866793a318fc5800..b7ff49c0fb408b2caa574381781bc1559318fa41 100644 --- a/src/mkv/mkv.c +++ b/src/mkv/mkv.c @@ -23,14 +23,14 @@ #define EBML_MKV_TAGS 0x1254c367 #define EBML_MKV_TAG 0x00007373 #define EBML_MKV_TAG_TARGETS 0x000063c0 -#define EBML_MKV_TAG_TTV 0x000068ca // TargetTypeValue -#define EBML_MKV_TAG_SIMPLE 0x000067c8 // SimpleTag +#define EBML_MKV_TAG_TTV 0x000068ca /* TargetTypeValue */ +#define EBML_MKV_TAG_SIMPLE 0x000067c8 /* SimpleTag */ #define EBML_MKV_TAG_NAME 0x000045a3 #define EBML_MKV_TAG_STRING 0x00004487 #define EBML_MKV_TAG_BINARY 0x00004485 -#define EBML_MKV_CRC32 0x0000000bf // CRC-32, they skip it in mpv (demux/ebml.c:463 aprox) -#define EBML_MKV_VOID 0x0000000ec // VOID element +#define EBML_MKV_CRC32 0x0000000bf /* CRC-32, they skip it in mpv (demux/ebml.c:463 aprox) */ +#define EBML_MKV_VOID 0x0000000ec /* VOID element */ /* mkv_read_* functions take data from the bufferfd and parse the next "*" (one * of the following):