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

Reply via email to