From 8b4acd5e4d7f215cf553484680b4296a611a6fb3 Mon Sep 17 00:00:00 2001 From: Henrik Kurelid Date: Fri, 5 Dec 2008 10:00:16 +0100 Subject: [PATCH] --- yaml --- r: 131730 b: refs/heads/master c: 7199e523ef71d24cd8030ea454fca00bb52d58f0 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/media/dvb/firesat/firesat-ci.c | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 983e6d4f09d4..90a60845cdf1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 096edfbf167ab277608d26ba8b7978da116a4996 +refs/heads/master: 7199e523ef71d24cd8030ea454fca00bb52d58f0 diff --git a/trunk/drivers/media/dvb/firesat/firesat-ci.c b/trunk/drivers/media/dvb/firesat/firesat-ci.c index 0deb47eefa10..783ed2000102 100644 --- a/trunk/drivers/media/dvb/firesat/firesat-ci.c +++ b/trunk/drivers/media/dvb/firesat/firesat-ci.c @@ -127,14 +127,20 @@ static int firesat_ca_pmt(struct firesat *firesat, void *arg) { struct ca_msg *msg = arg; int data_pos; + int data_length; + int i; + + data_pos = 4; + if (msg->msg[3] & 0x80) { + data_length = 0; + for (i = 0; i < (msg->msg[3] & 0x7F); i++) + data_length = (data_length << 8) + msg->msg[data_pos++]; + } else { + data_length = msg->msg[3]; + } - if (msg->msg[3] & 0x80) - data_pos = (msg->msg[4] && 0x7F) + 4; - else - data_pos = 4; - - return avc_ca_pmt(firesat, &msg->msg[data_pos], - msg->length - data_pos) ? -EFAULT : 0; + return avc_ca_pmt(firesat, &msg->msg[data_pos], data_length) ? + -EFAULT : 0; } static int firesat_ca_send_msg(struct firesat *firesat, void *arg)