uint32_t services_count;
char name[32];
mpegts_mux_t *mm;
- TAILQ_HEAD(,dvb_bat_svc) services;
- TAILQ_HEAD(,dvb_freesat_svc) fservices;
+ TAILQ_HEAD(,dvb_bat_svc) services;
+ TAILQ_HEAD(,dvb_freesat_svc) fservices;
+ LIST_HEAD(,dvb_freesat_region) fregions;
} dvb_bat_id_t;
typedef struct dvb_bat {
int complete;
LIST_HEAD(,dvb_bat_id) bats;
- LIST_HEAD(,dvb_freesat_region) fregions;
} dvb_bat_t;
SKEL_DECLARE(mpegts_table_state_skel, struct mpegts_table_state);
static void
dvb_freesat_regions
- ( dvb_bat_t *b, const char *dstr, const uint8_t *ptr, int len )
+ ( dvb_bat_id_t *bi, const char *dstr, const uint8_t *ptr, int len )
{
uint16_t id;
char name[32];
break;
tvhtrace(dstr, " region %u - '%s'", id, name);
- LIST_FOREACH(fr, &b->fregions, link)
+ LIST_FOREACH(fr, &bi->fregions, link)
if (fr->regionid == id)
break;
if (!fr) {
strncpy(fr->name, name, sizeof(fr->name)-1);
fr->name[sizeof(fr->name)-1] = '\0';
TAILQ_INIT(&fr->services);
- LIST_INSERT_HEAD(&b->fregions, fr, link);
+ LIST_INSERT_HEAD(&bi->fregions, fr, link);
}
ptr += 5 + r;
bs->fallback = fs;
continue;
}
- LIST_FOREACH(fr, &b->fregions, link)
+ LIST_FOREACH(fr, &bi->fregions, link)
if (fr->regionid == fs->regionid)
break;
if (!fr)
}
/* create bouquets, one per region */
- LIST_FOREACH(fr, &b->fregions, link) {
+ LIST_FOREACH(fr, &bi->fregions, link) {
regions++;
if (TAILQ_EMPTY(&fr->services)) continue;
uregions++;
total, regions, uregions);
/* Remove all services associated to region, notify the completed status */
- LIST_FOREACH(fr, &b->fregions, link) {
- while ((fs = TAILQ_FIRST(&fr->services)) != NULL)
- TAILQ_REMOVE(&fr->services, fs, region_link);
+ LIST_FOREACH(fr, &bi->fregions, link) {
+ TAILQ_INIT(&fr->services);
if (fr->bouquet) {
dvb_bouquet_comment(fr->bouquet, bi->mm);
bouquet_completed(fr->bouquet, total);
static void
dvb_bskyb_local_channels
- ( dvb_bat_t *b, dvb_bat_id_t *bi, const char *dstr,
+ ( dvb_bat_id_t *bi, const char *dstr,
const uint8_t *ptr, int len, mpegts_mux_t *mm )
{
uint16_t sid, unk, lcn, regionid, stype;
}
if (regionid && regionid != 0xffff) {
- LIST_FOREACH(fr, &b->fregions, link)
+ LIST_FOREACH(fr, &bi->fregions, link)
if (fr->regionid == regionid)
break;
if (!fr) {
strncpy(fr->name, str, sizeof(fr->name)-1);
fr->name[sizeof(fr->name)-1] = '\0';
TAILQ_INIT(&fr->services);
- LIST_INSERT_HEAD(&b->fregions, fr, link);
+ LIST_INSERT_HEAD(&bi->fregions, fr, link);
}
}
}
TAILQ_REMOVE(&bi->fservices, fs, link);
free(fs);
}
+ while ((fr = LIST_FIRST(&bi->fregions)) != NULL) {
+ LIST_REMOVE(fr, link);
+ free(fr);
+ }
LIST_REMOVE(bi, link);
free(bi);
}
- while ((fr = LIST_FIRST(&b->fregions)) != NULL) {
- LIST_REMOVE(fr, link);
- free(fr);
- }
}
void
break;
case DVB_DESC_FREESAT_REGIONS:
if (fsat)
- dvb_freesat_regions(b, mt->mt_name, dptr, dlen);
+ dvb_freesat_regions(bi, mt->mt_name, dptr, dlen);
break;
}
}
break;
case DVB_DESC_BSKYB_LCN:
if (tableid == 0x4A && p02) {
- dvb_bskyb_local_channels(b, bi, mt->mt_name, dptr, dlen, mux);
+ dvb_bskyb_local_channels(bi, mt->mt_name, dptr, dlen, mux);
bi->bskyb = 1;
}
break;