summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-05-04 09:16:53 +0200
committerwm4 <wm4@nowhere>2013-05-05 18:44:24 +0200
commite5f18eb82516a8d9e78185c9542d1e29e2819f18 (patch)
tree2fe221b9ac955be993b58cf482904dcbe773407e /core
parent6a0421295ea985c3156d715666803053a12a6536 (diff)
downloadmpv-e5f18eb82516a8d9e78185c9542d1e29e2819f18.tar.bz2
mpv-e5f18eb82516a8d9e78185c9542d1e29e2819f18.tar.xz
options: correctly handle things like: dvd://1-2/filename
The "/filename" part was silently dropped when a range of titles is specified.
Diffstat (limited to 'core')
-rw-r--r--core/parser-mpcmd.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/core/parser-mpcmd.c b/core/parser-mpcmd.c
index 223b487a2a..156b32e783 100644
--- a/core/parser-mpcmd.c
+++ b/core/parser-mpcmd.c
@@ -228,28 +228,30 @@ bool m_config_parse_mp_command_line(m_config_t *config, struct playlist *files,
}
} else {
// filename
+ void *tmp = talloc_new(NULL);
bstr file = p.arg;
- char *file0 = bstrdup0(NULL, p.arg);
+ char *file0 = bstrdup0(tmp, p.arg);
// expand DVD filename entries like dvd://1-3 into component titles
if (bstr_startswith0(file, "dvd://")) {
int offset = 6;
char *splitpos = strstr(file0 + offset, "-");
if (splitpos != NULL) {
- int start_title = strtol(file0 + offset, NULL, 10);
+ char *endpos;
+ int start_title = strtol(file0 + offset, &endpos, 10);
int end_title;
//entries like dvd://-2 imply start at title 1
if (start_title < 0) {
end_title = abs(start_title);
start_title = 1;
} else
- end_title = strtol(splitpos + 1, NULL, 10);
+ end_title = strtol(splitpos + 1, &endpos, 10);
if (dvd_range(start_title) && dvd_range(end_title)
&& (start_title < end_title)) {
for (int j = start_title; j <= end_title; j++) {
- char entbuf[15];
- snprintf(entbuf, sizeof(entbuf), "dvd://%d", j);
- playlist_add_file(files, entbuf);
+ char *f = talloc_asprintf(tmp, "dvd://%d%s", j,
+ endpos);
+ playlist_add_file(files, f);
}
} else
mp_tmsg(MSGT_CFGPARSER, MSGL_ERR,
@@ -259,7 +261,7 @@ bool m_config_parse_mp_command_line(m_config_t *config, struct playlist *files,
playlist_add_file(files, file0);
} else
playlist_add_file(files, file0);
- talloc_free(file0);
+ talloc_free(tmp);
// Lock stdin if it will be used as input
if (bstrcmp0(file, "-") == 0)