libdvbv5: fix ISDB-T frequency calculus on 32 bits machines
authorMauro Carvalho Chehab <m.chehab@samsung.com>
Fri, 11 Apr 2014 17:27:35 +0000 (10:27 -0700)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Fri, 11 Apr 2014 17:34:54 +0000 (14:34 -0300)
On 32 bits, the frequency got truncated and become a negative
number. Fix it.

Signed-off-by: Mauro Carvalho Chehab <mchehab@brisa.lan>
lib/libdvbv5/descriptors/desc_isdbt_delivery.c
lib/libdvbv5/dvb-scan.c

index e25ce46..883e88d 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <libdvbv5/desc_isdbt_delivery.h>
 #include <libdvbv5/dvb-fe.h>
+#include <inttypes.h>
 
 int isdbt_desc_delivery_init(struct dvb_v5_fe_parms *parms,
                              const uint8_t *buf, struct dvb_desc *desc)
@@ -90,7 +91,7 @@ void isdbt_desc_delivery_print(struct dvb_v5_fe_parms *parms, const struct dvb_d
        dvb_loginfo("|           area code         %d", d->area_code);
 
        for (i = 0; i < d->num_freqs; i++) {
-               dvb_loginfo("|           frequency[%d]      %ld Hz", i, d->frequency[i] * 1000000l / 7);
+               dvb_loginfo("|           frequency[%d]      %" PRIu64 " Hz", i, (((uint64_t)d->frequency[i]) * 1000000ul) / 7);
        }
 }
 
index 4fbd6d2..aac685f 100644 (file)
@@ -831,7 +831,7 @@ static void add_update_nit_isdbt(struct dvb_table_nit *nit,
        }
 
        for (i = 0; i < d->num_freqs; i++) {
-               uint32_t frq = d->frequency[i] * 1000000l / 7;
+               uint32_t frq = (((uint64_t)d->frequency[i]) * 1000000ul / 7);
 
                new = dvb_scan_add_entry(tr->parms, tr->first_entry, tr->entry,
                                         frq, tr->shift, tr->pol);