Hello.

I've noticed that some BluRay discs have the "backup" directory name
stored in lower-case. The attached patch lets libbluray find it.

I'm pretty sure there are much better ways of getting the same
behaviour, but my C is quite rusty and this was the simplest way I
could come up with. Feel free to ignore my code and write something
better :)

-- 
        Dakkar - <Mobilis in mobile>
        GPG public key fingerprint = A071 E618 DD2C 5901 9574
                                     6FE2 40EA 9883 7519 3F88
                            key id = 0x75193F88

A commune is where people join together to share their lack of wealth.
                -- R. Stallman
From 10148ae04f67f6b4f5a249bd464d210e76d57c49 Mon Sep 17 00:00:00 2001
From: dakkar <[email protected]>
Date: Fri, 19 Oct 2012 15:58:44 +0100
Subject: [PATCH] try 'backup' in addition to 'BACKUP'

---
 src/libbluray/bdnav/bdid_parse.c  |   12 ++++++++++++
 src/libbluray/bdnav/clpi_parse.c  |   13 +++++++++++++
 src/libbluray/bdnav/index_parse.c |   13 +++++++++++++
 src/libbluray/bdnav/mpls_parse.c  |   13 +++++++++++++
 src/libbluray/hdmv/mobj_parse.c   |   12 ++++++++++++
 5 files changed, 63 insertions(+), 0 deletions(-)

diff --git a/src/libbluray/bdnav/bdid_parse.c b/src/libbluray/bdnav/bdid_parse.c
index e2a79b3..573b275 100644
--- a/src/libbluray/bdnav/bdid_parse.c
+++ b/src/libbluray/bdnav/bdid_parse.c
@@ -109,6 +109,18 @@ BDID_DATA *bdid_parse(const char *file_name)
 
         X_FREE(backup);
     }
+    /* if failed, try backup file */
+    if (!bdid) {
+        size_t len   = strlen(file_name);
+        char *backup = malloc(len + 8);
+
+        strcpy(backup, file_name);
+        strcpy(backup + len - 7, "backup/id.bdmv");
+
+        bdid = _bdid_parse(backup);
+
+        X_FREE(backup);
+    }
 
     return bdid;
 }
diff --git a/src/libbluray/bdnav/clpi_parse.c b/src/libbluray/bdnav/clpi_parse.c
index ce0b27b..b12e0c1 100644
--- a/src/libbluray/bdnav/clpi_parse.c
+++ b/src/libbluray/bdnav/clpi_parse.c
@@ -724,6 +724,19 @@ clpi_parse(const char *path, int verbose)
 
         X_FREE(backup);
     }
+    /* if failed, try backup file */
+    if (!cl) {
+        size_t len   = strlen(path);
+        char *backup = malloc(len + 8);
+
+        strncpy(backup, path, len - 18);
+        strcpy(backup + len - 18, "backup/");
+        strcpy(backup + len - 18 + 7, path + len - 18);
+
+        cl = _clpi_parse(backup, verbose);
+
+        X_FREE(backup);
+    }
 
     return cl;
 }
diff --git a/src/libbluray/bdnav/index_parse.c b/src/libbluray/bdnav/index_parse.c
index 981024b..feb5250 100644
--- a/src/libbluray/bdnav/index_parse.c
+++ b/src/libbluray/bdnav/index_parse.c
@@ -210,6 +210,19 @@ INDX_ROOT *indx_parse(const char *file_name)
         X_FREE(backup);
     }
 
+    /* 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);
+    }
+
     return indx;
 }
 
diff --git a/src/libbluray/bdnav/mpls_parse.c b/src/libbluray/bdnav/mpls_parse.c
index 2ae1e73..9c8310e 100644
--- a/src/libbluray/bdnav/mpls_parse.c
+++ b/src/libbluray/bdnav/mpls_parse.c
@@ -849,6 +849,19 @@ mpls_parse(const char *path, int verbose)
 
         X_FREE(backup);
     }
+    /* if failed, try backup file */
+    if (!pl) {
+        size_t len   = strlen(path);
+        char *backup = malloc(len + 8);
+
+        strncpy(backup, path, len - 19);
+        strcpy(backup + len - 19, "backup/");
+        strcpy(backup + len - 19 + 7, path + len - 19);
+
+        pl = _mpls_parse(backup, verbose);
+
+        X_FREE(backup);
+    }
 
     return pl;
 }
diff --git a/src/libbluray/hdmv/mobj_parse.c b/src/libbluray/hdmv/mobj_parse.c
index d6557a1..02c3c99 100644
--- a/src/libbluray/hdmv/mobj_parse.c
+++ b/src/libbluray/hdmv/mobj_parse.c
@@ -183,6 +183,18 @@ MOBJ_OBJECTS *mobj_parse(const char *file_name)
 
         X_FREE(backup);
     }
+    /* if failed, try backup file */
+    if (!objects) {
+        int   len    = strlen(file_name);
+        char *backup = malloc(len + 8);
+
+        strcpy(backup, file_name);
+        strcpy(backup + len - 16, "backup/MovieObject.bdmv");
+
+        objects = _mobj_parse(backup);
+
+        X_FREE(backup);
+    }
 
     return objects;
 }
-- 
1.7.8.6

Attachment: signature.asc
Description: PGP signature

_______________________________________________
libbluray-devel mailing list
[email protected]
http://mailman.videolan.org/listinfo/libbluray-devel

Reply via email to