unsigned char *p = (unsigned char *) buf;
int i;
size_t len;
+ uint16_t frq;
len = sizeof(*d) - offsetof(struct isdbt_desc_terrestrial_delivery_system, bitfield);
memcpy(&d->bitfield, p, len);
bswap16(d->bitfield);
- d->num_freqs = d->length / 2;
- if (!len)
- return -1;
+ d->num_freqs = d->length / sizeof(uint16_t);
+ if (!d->num_freqs)
+ return 0;
d->frequency = malloc(d->num_freqs * sizeof(*d->frequency));
if (!d->frequency) {
dvb_perror("Can't allocate space for ISDB-T frequencies");
return -2;
}
- memcpy(d->frequency, p, d->num_freqs * sizeof(*d->frequency));
- for (i = 0; i < d->num_freqs; i++)
- bswap16(d->frequency[i]);
+ for (i = 0; i < d->num_freqs; i++) {
+ frq = *(uint16_t *)p;
+ p += sizeof(uint16_t);
+
+ bswap16(frq);
+
+ d->frequency[i] = (uint32_t)((((uint64_t)frq) * 1000000ul) / 7);
+ }
return 0;
}
dvb_loginfo("| area code %d", d->area_code);
for (i = 0; i < d->num_freqs; i++) {
- dvb_loginfo("| frequency[%d] %" PRIu64 " Hz", i, (((uint64_t)d->frequency[i]) * 1000000ul) / 7);
+ dvb_loginfo("| frequency[%d] %u Hz", i, d->frequency[i]);
}
}
}
for (i = 0; i < d->num_freqs; i++) {
- 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);
+ d->frequency[i], tr->shift, tr->pol);
if (!new)
return;
}