summaryrefslogtreecommitdiffstats
path: root/stream/stream_dvd.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-08-02 17:03:30 +0200
committerwm4 <wm4@nowhere>2013-08-02 17:05:26 +0200
commit44d6ac06aed7c13cbace543920e706023551c3c2 (patch)
treef2b352e856c7b4286f873b1cd2f5a9a6465774b2 /stream/stream_dvd.c
parentf8589c98891b11eea249c998b1dc2fac50c99b46 (diff)
downloadmpv-44d6ac06aed7c13cbace543920e706023551c3c2.tar.bz2
mpv-44d6ac06aed7c13cbace543920e706023551c3c2.tar.xz
stream: parse URL escapes for file://
So for example "file:///file%20name.mkv" will open "file name.mkv". I'm not sure whether we want/need this. The old code didn't do it. Also, it's not really clear whether this is handled correctly. It seems the corresponding freedesktop.org "standard" allows a (useless) hostname part, which we should skip in theory. The number of slashes is not really clear either. We can open relative filenames (by removing one of the slashes from the example above), which is perhaps an unneeded feature. How does this even work with Windows paths? This issues can probably be corrected later. The URL unescape code is based on code from m_option.c removed with a recent commit.
Diffstat (limited to 'stream/stream_dvd.c')
-rw-r--r--stream/stream_dvd.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/stream/stream_dvd.c b/stream/stream_dvd.c
index 624ea4c672..c9473c4b67 100644
--- a/stream/stream_dvd.c
+++ b/stream/stream_dvd.c
@@ -1050,6 +1050,10 @@ static int ifo_stream_open (stream_t *stream, int mode)
stream->priv = priv;
*priv = stream_priv_dflts;
+ // "file://" prefix -> decode URL-style escapes
+ if (strlen(stream->url) > strlen(stream->path))
+ mp_url_unescape_inplace(stream->path);
+
int len = strlen(stream->path);
if (len < 4 || strcasecmp (stream->path + len - 4, ".ifo"))
return STREAM_UNSUPPORTED;