summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorphintuka <phintuka>2011-07-13 06:06:55 +0000
committerphintuka <phintuka>2011-07-13 06:06:55 +0000
commit0982f2c733ff2848948905683ad9eb13c90ea5ef (patch)
treee9c4f6736290a1314d06d1e14abf0718b43e7a18
parent1c794b0c9de1cf377bfda38e3f3c31a6ac73f086 (diff)
downloadxineliboutput-0982f2c733ff2848948905683ad9eb13c90ea5ef.tar.gz
xineliboutput-0982f2c733ff2848948905683ad9eb13c90ea5ef.tar.bz2
Improved guessing disc name from disc root path
-rw-r--r--xine/BluRay/input_bluray.c46
1 files changed, 36 insertions, 10 deletions
diff --git a/xine/BluRay/input_bluray.c b/xine/BluRay/input_bluray.c
index e8ad6d85..391bc5d5 100644
--- a/xine/BluRay/input_bluray.c
+++ b/xine/BluRay/input_bluray.c
@@ -1214,13 +1214,47 @@ static int get_disc_info(bluray_input_plugin_t *this)
return 1;
}
+static char *get_file_name(const char *path)
+{
+ const char *name_start;
+ char *file_name = NULL;
+ int len;
+
+ name_start = path + strlen(path) - 1;
+ /* skip trailing '/' */
+ while (name_start > path && name_start[0] == '/')
+ name_start--;
+ /* find prev '/' */
+ while (name_start > path && name_start[-1] != '/')
+ name_start--;
+
+ file_name = strdup(name_start);
+ len = strlen(file_name);
+
+ /* trim trailing '/' */
+ while (len > 0 && file_name[len - 1] == '/')
+ file_name[--len] = 0;
+
+ /* trim trailing ".iso" */
+ if (len > 3 && !strcasecmp(file_name + len - 4, ".iso"))
+ file_name[len - 4] = 0;
+
+ /* '_' --> ' ' */
+ for (len = 0; file_name[len]; ++len)
+ if (file_name[len] == '_')
+ file_name[len] = ' ';
+
+ lprintf("disc name: %s\n", file_name);
+ return file_name;
+}
+
static int bluray_plugin_open (input_plugin_t *this_gen)
{
bluray_input_plugin_t *this = (bluray_input_plugin_t *) this_gen;
int title = -1;
int chapter = 0;
- lprintf("bluray_plugin_open\n");
+ lprintf("bluray_plugin_open '%s'\n",this->mrl);
/* validate and parse mrl */
if (!parse_mrl(this->mrl, &this->disc_root, &title, &chapter))
@@ -1290,15 +1324,7 @@ static int bluray_plugin_open (input_plugin_t *this_gen)
this->disc_name = strdup(this->meta_dl->di_name);
}
else if (strcmp(this->disc_root, this->class->mountpoint)) {
- char *t = strrchr(this->disc_root, '/');
- if (!t[1])
- while (t > this->disc_root && t[-1] != '/') t--;
- else
- while (t[0] == '/') t++;
- this->disc_name = strdup(t);
- char *end = this->disc_name + strlen(this->disc_name) - 1;
- if (*end == '/')
- *end = 0;
+ this->disc_name = get_file_name(this->disc_root);
}
/* register overlay (graphics) handler */