libaacs | branch: master | npzacs <npz...@gmail.com> | Wed May 6 10:26:19 2015 +0300| [1f1cb7bba853d2101caa493d4cbbcddf02d348e4] | committer: npzacs
Use _read_file() to read MKB Fix handling of errors when reading MKB. > http://git.videolan.org/gitweb.cgi/libaacs.git/?a=commit;h=1f1cb7bba853d2101caa493d4cbbcddf02d348e4 --- src/libaacs/aacs.c | 19 +++++++++++-------- src/libaacs/mkb.c | 25 +++++++------------------ src/libaacs/mkb.h | 3 +-- 3 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/libaacs/aacs.c b/src/libaacs/aacs.c index d2d8ff4..4d02d04 100644 --- a/src/libaacs/aacs.c +++ b/src/libaacs/aacs.c @@ -431,18 +431,21 @@ static size_t _read_file(AACS *aacs, const char *file, void **data) static MKB *_mkb_open(AACS *aacs) { - AACS_FILE_H *fp; - MKB *mkb; + size_t size; + void *data; + MKB *mkb; - fp = _file_open(aacs, "AACS" DIR_SEP "MKB_RO.inf"); - if (!fp) { - BD_DEBUG(DBG_AACS | DBG_CRIT, "Error opening MKB file (AACS/MKB_RO.inf)\n"); + size = _read_file(aacs, "AACS" DIR_SEP "MKB_RO.inf", &data); + if (size < 4) { + X_FREE(data); + BD_DEBUG(DBG_AACS | DBG_CRIT, "Error reading MKB file (AACS/MKB_RO.inf)\n"); return NULL; } - mkb = mkb_read(fp); - file_close(fp); - + mkb = mkb_init(data, size); + if (!mkb) { + X_FREE(data); + } return mkb; } diff --git a/src/libaacs/mkb.c b/src/libaacs/mkb.c index 0a3cd1d..ffc8265 100644 --- a/src/libaacs/mkb.c +++ b/src/libaacs/mkb.c @@ -18,7 +18,6 @@ */ #include "mkb.h" -#include "file/file.h" #include "util/macro.h" #include "util/logging.h" #include "util/strutl.h" @@ -54,17 +53,17 @@ static const uint8_t *_record(MKB *mkb, uint8_t type, size_t *rec_len) return NULL; } -MKB *mkb_read(AACS_FILE_H *fp) +MKB *mkb_init(uint8_t *data, size_t len) { MKB *mkb = malloc(sizeof(MKB)); - file_seek(fp, 0, SEEK_END); - mkb->size = file_tell(fp); - file_seek(fp, 0, SEEK_SET); - - mkb->buf = malloc(mkb->size); + if (!mkb) { + BD_DEBUG(DBG_MKB | DBG_CRIT, "out of memory\n"); + return NULL; + } - file_read(fp, mkb->buf, mkb->size); + mkb->size = len; + mkb->buf = data; BD_DEBUG(DBG_MKB, "MKB size: %u\n", (unsigned)mkb->size); BD_DEBUG(DBG_MKB, "MKB version: %d\n", mkb_version(mkb)); @@ -72,16 +71,6 @@ MKB *mkb_read(AACS_FILE_H *fp) return mkb; } -MKB *mkb_init(uint8_t *data, int len) -{ - MKB *mkb = malloc(sizeof(MKB)); - - mkb->size = len; - mkb->buf = data; - - return mkb; -} - void mkb_close(MKB *mkb) { if (mkb) { diff --git a/src/libaacs/mkb.h b/src/libaacs/mkb.h index abfe8d2..6691211 100644 --- a/src/libaacs/mkb.h +++ b/src/libaacs/mkb.h @@ -29,8 +29,7 @@ typedef struct mkb MKB; struct aacs_file_s; -BD_PRIVATE MKB *mkb_read(struct aacs_file_s *fp); // init MKB -BD_PRIVATE MKB *mkb_init(uint8_t *data, int len); // init MKB from data +BD_PRIVATE MKB *mkb_init(uint8_t *data, size_t len); // init MKB from data BD_PRIVATE void mkb_close(MKB *mkb); // free MKB BD_PRIVATE const uint8_t *mkb_data(MKB *mkb); _______________________________________________ libaacs-devel mailing list libaacs-devel@videolan.org https://mailman.videolan.org/listinfo/libaacs-devel