[libbluray-devel] index_parse: take path to disc root instead of path to index.bdmv

hpi1 git at videolan.org
Thu Mar 27 14:56:18 CET 2014


libbluray | branch: master | hpi1 <hpi1 at anonymous.org> | Thu Mar 27 12:59:19 2014 +0200| [2d5ca72116959c59f2ea229bdfeae5e506385141] | committer: hpi1

index_parse: take path to disc root instead of path to index.bdmv

> http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=2d5ca72116959c59f2ea229bdfeae5e506385141
---

 src/libbluray/bdnav/index_parse.c |   30 +++++++++++++++---------------
 src/libbluray/bdnav/index_parse.h |    2 +-
 src/libbluray/bluray.c            |   19 +------------------
 3 files changed, 17 insertions(+), 34 deletions(-)

diff --git a/src/libbluray/bdnav/index_parse.c b/src/libbluray/bdnav/index_parse.c
index 981024b..f07c261 100644
--- a/src/libbluray/bdnav/index_parse.c
+++ b/src/libbluray/bdnav/index_parse.c
@@ -21,6 +21,7 @@
 #include "util/bits.h"
 #include "util/logging.h"
 #include "util/macro.h"
+#include "util/strutl.h"
 #include "index_parse.h"
 
 #include <stdlib.h>
@@ -193,24 +194,23 @@ static INDX_ROOT *_indx_parse(const char *file_name)
     return NULL;
 }
 
-INDX_ROOT *indx_parse(const char *file_name)
+INDX_ROOT *indx_parse(const char *disc_root)
 {
-    INDX_ROOT *indx = _indx_parse(file_name);
-
-    /* if failed, try backup file */
-    if (!indx) {
-        size_t len   = strlen(file_name);
-        char *backup = malloc(len + 8);
-
-        strcpy(backup, file_name);
-        strcpy(backup + len - 10, "BACKUP/index.bdmv");
-
-        indx = _indx_parse(backup);
-
-        X_FREE(backup);
+    INDX_ROOT *index;
+    char *file;
+
+    file = str_printf("%s/BDMV/index.bdmv", disc_root);
+    index = _indx_parse(file);
+    X_FREE(file);
+    if (index) {
+        return index;
     }
 
-    return indx;
+    /* try backup */
+    file = str_printf("%s/BDMV/BACKUP/index.bdmv", disc_root);
+    index = _indx_parse(file);
+    X_FREE(file);
+    return index;
 }
 
 void indx_free(INDX_ROOT **p)
diff --git a/src/libbluray/bdnav/index_parse.h b/src/libbluray/bdnav/index_parse.h
index e32cf14..c26bb42 100644
--- a/src/libbluray/bdnav/index_parse.h
+++ b/src/libbluray/bdnav/index_parse.h
@@ -115,7 +115,7 @@ typedef struct indx_root_s {
 } INDX_ROOT;
 
 
-BD_PRIVATE INDX_ROOT* indx_parse(const char *path); /* parse index.bdmv */
+BD_PRIVATE INDX_ROOT* indx_parse(const char *disc_root);  /* parse index.bdmv */
 BD_PRIVATE void       indx_free(INDX_ROOT **index);
 
 #endif // _INDX_PARSE_H_
diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c
index 6ff98ed..76a535f 100644
--- a/src/libbluray/bluray.c
+++ b/src/libbluray/bluray.c
@@ -897,23 +897,6 @@ static int _libbdplus_init(BLURAY *bd)
 }
 
 /*
- * index open
- */
-
-static int _index_open(BLURAY *bd)
-{
-    if (!bd->index) {
-        char *file;
-
-        file = str_printf("%s/BDMV/index.bdmv", bd->device_path);
-        bd->index = indx_parse(file);
-        X_FREE(file);
-    }
-
-    return !!bd->index;
-}
-
-/*
  * meta open
  */
 
@@ -1370,7 +1353,7 @@ BLURAY *bd_open(const char* device_path, const char* keyfile_path)
 
     _libbdplus_init(bd);
 
-    _index_open(bd);
+    bd->index = indx_parse(bd->device_path);
 
     _fill_disc_info(bd);
 



More information about the libbluray-devel mailing list