From: Jaroslav Kysela Date: Fri, 20 Nov 2015 08:43:17 +0000 (+0100) Subject: m3u parser: add EXT-X-KEY tag parsing X-Git-Tag: v4.2.1~1502 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0e5c899df057227404cab933bfa7f5518ee72832;p=thirdparty%2Ftvheadend.git m3u parser: add EXT-X-KEY tag parsing --- diff --git a/src/misc/m3u.c b/src/misc/m3u.c index 1ea0cac1c..36383f49f 100644 --- a/src/misc/m3u.c +++ b/src/misc/m3u.c @@ -41,6 +41,8 @@ static char *get_m3u_str(char *data, char **res, int *last) *last = *data; *data = '\0'; data++; + while (*last && *data == ',') + data++; } *res = data; return p; @@ -121,7 +123,7 @@ htsmsg_t *parse_m3u const char *multi_name; int delim; htsmsg_t *m = htsmsg_create_map(); - htsmsg_t *item = NULL, *l = NULL, *t; + htsmsg_t *item = NULL, *l = NULL, *t, *key = NULL; char buf[512]; while (*data && *data <= ' ') data++; @@ -209,15 +211,24 @@ multi: if (*data != ',') break; } } - if (item == NULL) - item = htsmsg_create_map(); - htsmsg_add_msg(item, multi_name, t); + if (strcmp(multi_name, "x-key") == 0) { + htsmsg_destroy(key); + key = t; + } else { + if (item == NULL) + item = htsmsg_create_map(); + htsmsg_add_msg(item, multi_name, t); + } data = until_eol(data); continue; } else if (strncmp(data, "#EXT-X-MEDIA:", 13) == 0) { data += 13; multi_name = "x-media"; goto multi; + } else if (strncmp(data, "#EXT-X-KEY:", 11) == 0) { + data += 11; + multi_name = "x-key"; + goto multi; } else if (strncmp(data, "#EXT-X-ENDLIST", 14) == 0) { htsmsg_add_bool(m, "x-endlist", 1); data = until_eol(data + 14); @@ -264,11 +275,14 @@ multi: if (item) { if (l == NULL) l = htsmsg_create_list(); + if (key) + htsmsg_add_msg(item, "x-key", htsmsg_copy(key)); htsmsg_add_msg(l, NULL, item); item = NULL; } } + htsmsg_destroy(key); if (l == NULL) l = htsmsg_create_list(); htsmsg_add_msg(m, "items", l);