From 1b6c2275a61180d70e4bfc9ad90d3bf84158c0b0 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sat, 20 Sep 2014 21:54:56 +0200 Subject: [PATCH] channel: fix channel_find_by_number for maj.min support, fixes #2321 --- src/channels.c | 16 ++++++++++++++-- src/channels.h | 2 +- src/webui/webui.c | 4 ++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/channels.c b/src/channels.c index 886b26c0..9f23c356 100644 --- a/src/channels.c +++ b/src/channels.c @@ -402,11 +402,23 @@ channel_find_by_id ( uint32_t i ) } channel_t * -channel_find_by_number ( int no ) +channel_find_by_number ( const char *no ) { channel_t *ch; + uint32_t maj, min = 0; + uint64_t cno; + char *s; + + if (no == NULL) + return NULL; + if ((s = strchr(no, '.')) != NULL) { + *s = '\0'; + min = atoi(s + 1); + } + maj = atoi(no); + cno = (uint64_t)maj * CHANNEL_SPLIT + (uint64_t)min; CHANNEL_FOREACH(ch) - if(channel_get_number(ch) == no) + if(channel_get_number(ch) == cno) break; return ch; } diff --git a/src/channels.h b/src/channels.h index 23755eb6..cb5b717d 100644 --- a/src/channels.h +++ b/src/channels.h @@ -149,7 +149,7 @@ channel_t *channel_find_by_name(const char *name); channel_t *channel_find_by_id(uint32_t id); -channel_t *channel_find_by_number(int no); +channel_t *channel_find_by_number(const char *no); #define channel_find channel_find_by_uuid diff --git a/src/webui/webui.c b/src/webui/webui.c index 3a3b7611..7b0df597 100644 --- a/src/webui/webui.c +++ b/src/webui/webui.c @@ -722,7 +722,7 @@ page_http_playlist(http_connection_t *hc, const char *remain, void *opaque) if(nc == 2 && !strcmp(components[0], "channelid")) ch = channel_find_by_id(atoi(components[1])); else if(nc == 2 && !strcmp(components[0], "channelnumber")) - ch = channel_find_by_number(atoi(components[1])); + ch = channel_find_by_number(components[1]); else if(nc == 2 && !strcmp(components[0], "channelname")) ch = channel_find_by_name(components[1]); else if(nc == 2 && !strcmp(components[0], "channel")) @@ -1004,7 +1004,7 @@ http_stream(http_connection_t *hc, const char *remain, void *opaque) if(!strcmp(components[0], "channelid")) { ch = channel_find_by_id(atoi(components[1])); } else if(!strcmp(components[0], "channelnumber")) { - ch = channel_find_by_number(atoi(components[1])); + ch = channel_find_by_number(components[1]); } else if(!strcmp(components[0], "channelname")) { ch = channel_find_by_name(components[1]); } else if(!strcmp(components[0], "channel")) {