}
const struct dvb_table_init dvb_table_initializers[] = {
- [DVB_TABLE_PAT] = { dvb_table_pat_init },
- [DVB_TABLE_PMT] = { dvb_table_pmt_init },
- [DVB_TABLE_NIT] = { dvb_table_nit_init },
- [DVB_TABLE_SDT] = { dvb_table_sdt_init },
- [DVB_TABLE_EIT] = { dvb_table_eit_init },
- [DVB_TABLE_TVCT] = { dvb_table_vct_init },
- [DVB_TABLE_CVCT] = { dvb_table_vct_init },
- [DVB_TABLE_EIT_SCHEDULE] = { dvb_table_eit_init },
+ [DVB_TABLE_PAT] = { dvb_table_pat_init, 0 /* Size here is variable */ },
+ [DVB_TABLE_PMT] = { dvb_table_pmt_init, sizeof(struct dvb_table_pmt) },
+ [DVB_TABLE_NIT] = { dvb_table_nit_init, sizeof(struct dvb_table_nit) },
+ [DVB_TABLE_SDT] = { dvb_table_sdt_init, sizeof(struct dvb_table_sdt) },
+ [DVB_TABLE_EIT] = { dvb_table_eit_init, sizeof(struct dvb_table_eit) },
+ [DVB_TABLE_TVCT] = { dvb_table_vct_init, sizeof(struct dvb_table_vct) },
+ [DVB_TABLE_CVCT] = { dvb_table_vct_init, sizeof(struct dvb_table_vct) },
+ [DVB_TABLE_EIT_SCHEDULE] = { dvb_table_eit_init, sizeof(struct dvb_table_eit) },
};
char *default_charset = "iso-8859-1";
if (last_section == -1)
last_section = h->last_section;
- //ARRAY_SIZE(vb_table_initializers) >= table
if (!tbl) {
- tbl = malloc(MAX_TABLE_SIZE);
+ if (dvb_table_initializers[tid].size)
+ tbl = malloc(dvb_table_initializers[tid].size);
+ else
+ tbl = malloc(MAX_TABLE_SIZE);
if (!tbl)
dvb_perror("Out of memory");
}
if (dvb_table_initializers[tid].init) {
dvb_table_initializers[tid].init(parms, buf, buf_length, tbl, &table_length);
- tbl = realloc(tbl, table_length);
if (!tbl)
dvb_perror("Out of memory");
+ if (!dvb_table_initializers[tid].size)
+ tbl = realloc(tbl, table_length);
} else
dvb_logerr("dvb_read_section: no initializer for table %d", tid);