Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
IPTV: another m3u parser improvements
  • Loading branch information
perexg committed Oct 15, 2015
1 parent d863b35 commit 765cc89
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 21 deletions.
44 changes: 27 additions & 17 deletions src/input/mpegts/iptv/iptv_auto.c
Expand Up @@ -40,23 +40,32 @@ static char *get_m3u_str(char *data, char **res)
char *p = data, first = *data;

if (first == '"' || first == '\'') {
data++;
p = data;
data++; p++;
while (*data && *data != first)
data++;
} else {
p = data;
while (*data && *data != ',' && *data > ' ')
data++;
}
*res = data;
if (*data) {
*data = '\0';
(*res)++;
data++;
}
*res = data;
return p;
}

/*
*
*/
static char *until_eol(char *d)
{
while (*d && *d != '\r' && *d != '\n') d++;
if (*d) { *d = '\0'; d++; }
while (*d && (*d == '\r' || *d == '\n')) d++;
return d;
}

/*
*
*/
Expand Down Expand Up @@ -219,18 +228,21 @@ iptv_auto_network_process_m3u(iptv_network_t *in, char *data,
logo = NULL;
epgid = NULL;
data += 8;
while (*data > ' ' && *data != ',') data++;
while (1) {
while (*data && *data <= ' ') data++;
if (*data == ',') break;
if (strncmp(data, "tvg-logo=", 9) == 0)
logo = get_m3u_str(data + 9, &data);
else if (strncmp(data, "tvg-id=", 7) == 0)
epgid = get_m3u_str(data + 7, &data);
else if (strncmp(data, "logo=", 5) == 0)
logo = get_m3u_str(data + 5, &data);
else {
if (strncmp(data, "tvg-logo=", 9) == 0) {
logo = get_m3u_str(data + 9, &data); continue;
} else if (strncmp(data, "tvg-id=", 7) == 0) {
epgid = get_m3u_str(data + 7, &data); continue;
} else if (strncmp(data, "logo=", 5) == 0) {
logo = get_m3u_str(data + 5, &data); continue;
} else {
data++;
while (*data && *data != ',' && *data > ' ') data++;
while (*data && *data != ',' && *data != '=') data++;
if (*data == '=')
get_m3u_str(data + 1, &data);
}
}
if (*data == ',') {
Expand All @@ -239,8 +251,7 @@ iptv_auto_network_process_m3u(iptv_network_t *in, char *data,
if (*data)
name = data;
}
while (*data && *data != '\n') data++;
if (*data) data++;
data = until_eol(data);
continue;
} else if (strncmp(data, "#EXT", 4) == 0) {
data += 4;
Expand All @@ -250,8 +261,7 @@ iptv_auto_network_process_m3u(iptv_network_t *in, char *data,
}
while (*data && *data <= ' ') data++;
url = data;
while (*data && *data != '\n') data++;
if (*data) { *data = '\0'; data++; }
data = until_eol(data);
if (*url && *url > ' ')
iptv_auto_network_process_m3u_item(in, last_url, remove_args,
url, name, logo, epgid,
Expand Down
14 changes: 10 additions & 4 deletions src/input/mpegts/iptv/iptv_http.c
Expand Up @@ -24,6 +24,14 @@
/*
* M3U parser
*/
static char *until_eol(char *d)
{
while (*d && *d != '\r' && *d != '\n') d++;
if (*d) { *d = '\0'; d++; }
while (*d && (*d == '\r' || *d == '\n')) d++;
return d;
}

static char *
iptv_http_m3u(char *data)
{
Expand All @@ -33,14 +41,12 @@ iptv_http_m3u(char *data)
if (*data) data++;
while (*data) {
if (strncmp(data, "#EXT", 4) == 0) {
while (*data && *data != '\n') data++;
if (*data) data++;
data = until_eol(data);
continue;
}
while (*data && *data <= ' ') data++;
url = data;
while (*data && *data != '\n') data++;
if (*data) { *data = '\0'; data++; }
data = until_eol(data);
if (*url && *url > ' ')
return strdup(url);
}
Expand Down

0 comments on commit 765cc89

Please sign in to comment.