* [PATCH 02/11] libdvbv5: add attribute packed to structs and unions
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
@ 2014-01-04 17:07 ` André Roth
2014-01-04 17:07 ` [PATCH 03/11] libdvbv5: add parser for CAT André Roth
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: André Roth @ 2014-01-04 17:07 UTC (permalink / raw)
To: linux-media; +Cc: André Roth
Signed-off-by: André Roth <neolynx@gmail.com>
---
| 2 +-
lib/include/libdvbv5/desc_atsc_service_location.h | 4 ++--
lib/include/libdvbv5/desc_cable_delivery.h | 8 ++++----
lib/include/libdvbv5/desc_event_extended.h | 4 ++--
lib/include/libdvbv5/desc_frequency_list.h | 4 ++--
lib/include/libdvbv5/desc_isdbt_delivery.h | 4 ++--
lib/include/libdvbv5/desc_logical_channel.h | 4 ++--
lib/include/libdvbv5/desc_sat.h | 4 ++--
lib/include/libdvbv5/desc_service_location.h | 8 ++++----
lib/include/libdvbv5/desc_t2_delivery.h | 4 ++--
| 4 ++--
lib/include/libdvbv5/mpeg_es.h | 6 +++---
lib/include/libdvbv5/mpeg_ts.h | 2 +-
lib/include/libdvbv5/nit.h | 4 ++--
lib/include/libdvbv5/pat.h | 2 +-
lib/include/libdvbv5/pmt.h | 16 ++++++++--------
lib/include/libdvbv5/sdt.h | 2 +-
lib/include/libdvbv5/vct.h | 4 ++--
18 files changed, 43 insertions(+), 43 deletions(-)
--git a/lib/include/libdvbv5/atsc_header.h b/lib/include/libdvbv5/atsc_header.h
index 1e7148e..9685b37 100644
--- a/lib/include/libdvbv5/atsc_header.h
+++ b/lib/include/libdvbv5/atsc_header.h
@@ -36,7 +36,7 @@ struct atsc_table_header {
uint16_t priv:1;
uint16_t syntax:1;
} __attribute__((packed));
- };
+ } __attribute__((packed));
uint16_t id;
uint8_t current_next:1;
uint8_t version:5;
diff --git a/lib/include/libdvbv5/desc_atsc_service_location.h b/lib/include/libdvbv5/desc_atsc_service_location.h
index 47113f2..1ff2341 100644
--- a/lib/include/libdvbv5/desc_atsc_service_location.h
+++ b/lib/include/libdvbv5/desc_atsc_service_location.h
@@ -32,7 +32,7 @@ struct atsc_desc_service_location_elementary {
uint16_t elementary_pid:13;
uint16_t reserved:3;
} __attribute__((packed));
- };
+ } __attribute__((packed));
char ISO_639_language_code[3];
} __attribute__((packed));
@@ -49,7 +49,7 @@ struct atsc_desc_service_location {
uint16_t pcr_pid:13;
uint16_t reserved:3;
} __attribute__((packed));
- };
+ } __attribute__((packed));
uint8_t number_elements;
} __attribute__((packed));
diff --git a/lib/include/libdvbv5/desc_cable_delivery.h b/lib/include/libdvbv5/desc_cable_delivery.h
index 70f5a5b..c2bab5a 100644
--- a/lib/include/libdvbv5/desc_cable_delivery.h
+++ b/lib/include/libdvbv5/desc_cable_delivery.h
@@ -37,16 +37,16 @@ struct dvb_desc_cable_delivery {
struct {
uint16_t fec_outer:4;
uint16_t reserved_future_use:12;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
uint8_t modulation;
union {
uint32_t bitfield2;
struct {
uint32_t fec_inner:4;
uint32_t symbol_rate:28;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
} __attribute__((packed));
struct dvb_v5_fe_parms;
diff --git a/lib/include/libdvbv5/desc_event_extended.h b/lib/include/libdvbv5/desc_event_extended.h
index a543590..03fb1f1 100644
--- a/lib/include/libdvbv5/desc_event_extended.h
+++ b/lib/include/libdvbv5/desc_event_extended.h
@@ -34,9 +34,9 @@ struct dvb_desc_event_extended {
struct {
uint8_t last_id:4;
uint8_t id:4;
- };
+ } __attribute__((packed));
uint8_t ids;
- };
+ } __attribute__((packed));
unsigned char language[4];
char *text;
diff --git a/lib/include/libdvbv5/desc_frequency_list.h b/lib/include/libdvbv5/desc_frequency_list.h
index e6e7945..55723c7 100644
--- a/lib/include/libdvbv5/desc_frequency_list.h
+++ b/lib/include/libdvbv5/desc_frequency_list.h
@@ -38,8 +38,8 @@ struct dvb_desc_frequency_list {
struct {
uint8_t freq_type:2;
uint8_t reserved:6;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
} __attribute__((packed));
struct dvb_v5_fe_parms;
diff --git a/lib/include/libdvbv5/desc_isdbt_delivery.h b/lib/include/libdvbv5/desc_isdbt_delivery.h
index 4df30df..5bac178 100644
--- a/lib/include/libdvbv5/desc_isdbt_delivery.h
+++ b/lib/include/libdvbv5/desc_isdbt_delivery.h
@@ -38,8 +38,8 @@ struct isdbt_desc_terrestrial_delivery_system {
uint16_t transmission_mode:2;
uint16_t guard_interval:2;
uint16_t area_code:6;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
} __attribute__((packed));
struct dvb_v5_fe_parms;
diff --git a/lib/include/libdvbv5/desc_logical_channel.h b/lib/include/libdvbv5/desc_logical_channel.h
index ce1206c..bbccb81 100644
--- a/lib/include/libdvbv5/desc_logical_channel.h
+++ b/lib/include/libdvbv5/desc_logical_channel.h
@@ -36,8 +36,8 @@ struct dvb_desc_logical_channel_number {
uint16_t logical_channel_number:10;
uint16_t reserved:5;
uint16_t visible_service_flag:1;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
} __attribute__((packed));
struct dvb_desc_logical_channel {
diff --git a/lib/include/libdvbv5/desc_sat.h b/lib/include/libdvbv5/desc_sat.h
index bb55319..9e192c6 100644
--- a/lib/include/libdvbv5/desc_sat.h
+++ b/lib/include/libdvbv5/desc_sat.h
@@ -42,8 +42,8 @@ struct dvb_desc_sat {
struct {
uint32_t fec:4;
uint32_t symbol_rate:28;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
} __attribute__((packed));
struct dvb_v5_fe_parms;
diff --git a/lib/include/libdvbv5/desc_service_location.h b/lib/include/libdvbv5/desc_service_location.h
index 89ed055..046bedc 100644
--- a/lib/include/libdvbv5/desc_service_location.h
+++ b/lib/include/libdvbv5/desc_service_location.h
@@ -31,8 +31,8 @@ struct dvb_desc_service_location_element {
struct {
uint16_t elementary_pid:13;
uint16_t reserved:3;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
uint8_t language[4];
} __attribute__((packed));
@@ -46,8 +46,8 @@ struct dvb_desc_service_location {
struct {
uint16_t pcr_pid:13;
uint16_t reserved:3;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
uint8_t elements;
struct dvb_desc_service_location_element *element;
} __attribute__((packed));
diff --git a/lib/include/libdvbv5/desc_t2_delivery.h b/lib/include/libdvbv5/desc_t2_delivery.h
index a36f6c1..a51f897 100644
--- a/lib/include/libdvbv5/desc_t2_delivery.h
+++ b/lib/include/libdvbv5/desc_t2_delivery.h
@@ -43,8 +43,8 @@ struct dvb_desc_t2_delivery {
uint16_t reserved:2;
uint16_t bandwidth:3;
uint16_t SISO_MISO:2;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
uint32_t *centre_frequency;
uint8_t frequency_loop_length;
--git a/lib/include/libdvbv5/header.h b/lib/include/libdvbv5/header.h
index c8cd466..39871c9 100644
--- a/lib/include/libdvbv5/header.h
+++ b/lib/include/libdvbv5/header.h
@@ -35,7 +35,7 @@ struct dvb_ts_packet_header {
uint16_t payload_unit_start_indicator:1;
uint16_t transport_error_indicator:1;
} __attribute__((packed));
- };
+ } __attribute__((packed));
uint8_t continuity_counter:4;
uint8_t adaptation_field_control:2;
uint8_t transport_scrambling_control:2;
@@ -55,7 +55,7 @@ struct dvb_table_header {
uint8_t zero2:1;
uint8_t syntax:1;
} __attribute__((packed));
- };
+ } __attribute__((packed));
uint16_t id;
uint8_t current_next:1;
uint8_t version:5;
diff --git a/lib/include/libdvbv5/mpeg_es.h b/lib/include/libdvbv5/mpeg_es.h
index 4c6a862..4f1786e 100644
--- a/lib/include/libdvbv5/mpeg_es.h
+++ b/lib/include/libdvbv5/mpeg_es.h
@@ -47,7 +47,7 @@ struct dvb_mpeg_es_seq_start {
uint32_t height:12;
uint32_t width:12;
} __attribute__((packed));
- };
+ } __attribute__((packed));
union {
uint32_t bitfield3;
struct {
@@ -58,7 +58,7 @@ struct dvb_mpeg_es_seq_start {
uint32_t one:1;
uint32_t bitrate:18;
} __attribute__((packed));
- };
+ } __attribute__((packed));
} __attribute__((packed));
struct dvb_mpeg_es_pic_start {
@@ -77,7 +77,7 @@ struct dvb_mpeg_es_pic_start {
uint32_t coding_type:3;
uint32_t temporal_ref:10;
} __attribute__((packed));
- };
+ } __attribute__((packed));
} __attribute__((packed));
enum dvb_mpeg_es_frame_t
diff --git a/lib/include/libdvbv5/mpeg_ts.h b/lib/include/libdvbv5/mpeg_ts.h
index de4fc3f..a877f42 100644
--- a/lib/include/libdvbv5/mpeg_ts.h
+++ b/lib/include/libdvbv5/mpeg_ts.h
@@ -51,7 +51,7 @@ struct dvb_mpeg_ts {
uint16_t payload_start:1;
uint16_t tei:1;
} __attribute__((packed));
- };
+ } __attribute__((packed));
struct {
uint8_t continuity_counter:4;
uint8_t adaptation_field:2;
diff --git a/lib/include/libdvbv5/nit.h b/lib/include/libdvbv5/nit.h
index 09fe596..48feecc 100644
--- a/lib/include/libdvbv5/nit.h
+++ b/lib/include/libdvbv5/nit.h
@@ -49,7 +49,7 @@ struct dvb_table_nit_transport {
uint16_t section_length:12;
uint16_t reserved:4;
} __attribute__((packed));
- };
+ } __attribute__((packed));
struct dvb_desc *descriptor;
struct dvb_table_nit_transport *next;
} __attribute__((packed));
@@ -62,7 +62,7 @@ struct dvb_table_nit {
uint16_t desc_length:12;
uint16_t reserved:4;
} __attribute__((packed));
- };
+ } __attribute__((packed));
struct dvb_desc *descriptor;
struct dvb_table_nit_transport *transport;
} __attribute__((packed));
diff --git a/lib/include/libdvbv5/pat.h b/lib/include/libdvbv5/pat.h
index 899815c..2004836 100644
--- a/lib/include/libdvbv5/pat.h
+++ b/lib/include/libdvbv5/pat.h
@@ -38,7 +38,7 @@ struct dvb_table_pat_program {
uint16_t pid:13;
uint8_t reserved:3;
} __attribute__((packed));
- };
+ } __attribute__((packed));
struct dvb_table_pat_program *next;
} __attribute__((packed));
diff --git a/lib/include/libdvbv5/pmt.h b/lib/include/libdvbv5/pmt.h
index e1d44cb..f1b7cef 100644
--- a/lib/include/libdvbv5/pmt.h
+++ b/lib/include/libdvbv5/pmt.h
@@ -64,16 +64,16 @@ struct dvb_table_pmt_stream {
struct {
uint16_t elementary_pid:13;
uint16_t reserved:3;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
union {
uint16_t bitfield2;
struct {
uint16_t section_length:10;
uint16_t zero:2;
uint16_t reserved2:4;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
struct dvb_desc *descriptor;
struct dvb_table_pmt_stream *next;
} __attribute__((packed));
@@ -85,8 +85,8 @@ struct dvb_table_pmt {
struct {
uint16_t pcr_pid:13;
uint16_t reserved2:3;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
union {
uint16_t bitfield2;
@@ -94,8 +94,8 @@ struct dvb_table_pmt {
uint16_t prog_length:10;
uint16_t zero3:2;
uint16_t reserved3:4;
- };
- };
+ } __attribute__((packed));
+ } __attribute__((packed));
struct dvb_table_pmt_stream *stream;
} __attribute__((packed));
diff --git a/lib/include/libdvbv5/sdt.h b/lib/include/libdvbv5/sdt.h
index 77ec5b1..17c51f2 100644
--- a/lib/include/libdvbv5/sdt.h
+++ b/lib/include/libdvbv5/sdt.h
@@ -44,7 +44,7 @@ struct dvb_table_sdt_service {
uint16_t free_CA_mode:1;
uint16_t running_status:3;
} __attribute__((packed));
- };
+ } __attribute__((packed));
struct dvb_desc *descriptor;
struct dvb_table_sdt_service *next;
} __attribute__((packed));
diff --git a/lib/include/libdvbv5/vct.h b/lib/include/libdvbv5/vct.h
index 6935f30..0dc64fd 100644
--- a/lib/include/libdvbv5/vct.h
+++ b/lib/include/libdvbv5/vct.h
@@ -104,8 +104,8 @@ union atsc_table_vct_descriptor_length {
struct {
uint16_t descriptor_length:10;
uint16_t reserved:6;
- };
-};
+ } __attribute__((packed));
+} __attribute__((packed));
#define atsc_vct_channel_foreach(_channel, _vct) \
for (struct atsc_table_vct_channel *_channel = _vct->channel; _channel; _channel = _channel->next) \
--
1.7.10.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 03/11] libdvbv5: add parser for CAT
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
2014-01-04 17:07 ` [PATCH 02/11] libdvbv5: add attribute packed to structs and unions André Roth
@ 2014-01-04 17:07 ` André Roth
2014-01-04 17:07 ` [PATCH 04/11] libdvbv5: add parser for ca and ca_identifier descriptors André Roth
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: André Roth @ 2014-01-04 17:07 UTC (permalink / raw)
To: linux-media; +Cc: André Roth
Signed-off-by: André Roth <neolynx@gmail.com>
---
lib/include/libdvbv5/cat.h | 51 +++++++++++++++++++++++++++++++
lib/libdvbv5/Makefile.am | 2 ++
lib/libdvbv5/descriptors.c | 2 ++
lib/libdvbv5/descriptors/cat.c | 66 ++++++++++++++++++++++++++++++++++++++++
4 files changed, 121 insertions(+)
create mode 100644 lib/include/libdvbv5/cat.h
create mode 100644 lib/libdvbv5/descriptors/cat.c
diff --git a/lib/include/libdvbv5/cat.h b/lib/include/libdvbv5/cat.h
new file mode 100644
index 0000000..4c442a8
--- /dev/null
+++ b/lib/include/libdvbv5/cat.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2013 - Andre Roth <neolynx@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation version 2
+ * of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ *
+ */
+
+#ifndef _CAT_H
+#define _CAT_H
+
+#include <stdint.h>
+#include <unistd.h> /* ssize_t */
+
+#include <libdvbv5/header.h>
+
+#define DVB_TABLE_CAT 0x01
+#define DVB_TABLE_CAT_PID 0x0001
+
+struct dvb_table_cat {
+ struct dvb_table_header header;
+ struct dvb_desc *descriptor;
+} __attribute__((packed));
+
+struct dvb_v5_fe_parms;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void dvb_table_cat_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, ssize_t buflen, uint8_t *table, ssize_t *table_length);
+void dvb_table_cat_free(struct dvb_table_cat *cat);
+void dvb_table_cat_print(struct dvb_v5_fe_parms *parms, struct dvb_table_cat *t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/libdvbv5/Makefile.am b/lib/libdvbv5/Makefile.am
index 8f89531..0abe42d 100644
--- a/lib/libdvbv5/Makefile.am
+++ b/lib/libdvbv5/Makefile.am
@@ -39,6 +39,7 @@ otherinclude_HEADERS = \
../include/libdvbv5/atsc_header.h \
../include/libdvbv5/mgt.h \
../include/libdvbv5/eit.h \
+ ../include/libdvbv5/cat.h \
../include/libdvbv5/atsc_eit.h \
../include/libdvbv5/desc_service_location.h \
../include/libdvbv5/mpeg_ts.h \
@@ -74,6 +75,7 @@ libdvbv5_la_SOURCES = \
descriptors/vct.c \
descriptors/mgt.c \
descriptors/eit.c \
+ descriptors/cat.c \
descriptors/atsc_eit.c \
descriptors/desc_language.c \
descriptors/desc_network_name.c \
diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
index 626f81d..e888123 100644
--- a/lib/libdvbv5/descriptors.c
+++ b/lib/libdvbv5/descriptors.c
@@ -31,6 +31,7 @@
#include <libdvbv5/dvb-log.h>
#include <libdvbv5/pat.h>
+#include <libdvbv5/cat.h>
#include <libdvbv5/pmt.h>
#include <libdvbv5/nit.h>
#include <libdvbv5/sdt.h>
@@ -78,6 +79,7 @@ void dvb_desc_default_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc
const struct dvb_table_init dvb_table_initializers[] = {
[DVB_TABLE_PAT] = { dvb_table_pat_init, sizeof(struct dvb_table_pat) },
+ [DVB_TABLE_CAT] = { dvb_table_cat_init, sizeof(struct dvb_table_cat) },
[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) },
diff --git a/lib/libdvbv5/descriptors/cat.c b/lib/libdvbv5/descriptors/cat.c
new file mode 100644
index 0000000..e6fc64e
--- /dev/null
+++ b/lib/libdvbv5/descriptors/cat.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2013 - Andre Roth <neolynx@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation version 2
+ * of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ *
+ */
+
+#include <libdvbv5/cat.h>
+#include <libdvbv5/descriptors.h>
+#include <libdvbv5/dvb-fe.h>
+
+void dvb_table_cat_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
+ ssize_t buflen, uint8_t *table, ssize_t *table_length)
+{
+ struct dvb_table_cat *cat = (void *)table;
+ struct dvb_desc **head_desc = &cat->descriptor;
+ const uint8_t *p = buf, *endbuf = buf + buflen - 4;
+ size_t size;
+
+ if (*table_length > 0) {
+ /* find end of current lists */
+ while (*head_desc != NULL)
+ head_desc = &(*head_desc)->next;
+ }
+
+ size = offsetof(struct dvb_table_cat, descriptor);
+ if (p + size > endbuf) {
+ dvb_logerr("CAT table was truncated while filling dvb_table_cat. Need %zu bytes, but has only %zu.",
+ size, buflen);
+ return;
+ }
+
+ memcpy(table, p, size);
+ p += size;
+ *table_length = sizeof(struct dvb_table_cat);
+
+ size = endbuf - p;
+ dvb_parse_descriptors(parms, p, size, head_desc);
+}
+
+void dvb_table_cat_free(struct dvb_table_cat *cat)
+{
+ dvb_free_descriptors((struct dvb_desc **) &cat->descriptor);
+ free(cat);
+}
+
+void dvb_table_cat_print(struct dvb_v5_fe_parms *parms, struct dvb_table_cat *cat)
+{
+ dvb_log("cat");
+ dvb_table_header_print(parms, &cat->header);
+ dvb_print_descriptors(parms, cat->descriptor);
+}
+
--
1.7.10.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 04/11] libdvbv5: add parser for ca and ca_identifier descriptors
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
2014-01-04 17:07 ` [PATCH 02/11] libdvbv5: add attribute packed to structs and unions André Roth
2014-01-04 17:07 ` [PATCH 03/11] libdvbv5: add parser for CAT André Roth
@ 2014-01-04 17:07 ` André Roth
2014-01-04 17:07 ` [PATCH 05/11] libdvbv5: fix PMT parser André Roth
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: André Roth @ 2014-01-04 17:07 UTC (permalink / raw)
To: linux-media; +Cc: André Roth
Signed-off-by: André Roth <neolynx@gmail.com>
---
lib/include/libdvbv5/desc_ca.h | 63 ++++++++++++++++++++++++
lib/include/libdvbv5/desc_ca_identifier.h | 55 +++++++++++++++++++++
lib/libdvbv5/Makefile.am | 10 ++--
lib/libdvbv5/descriptors.c | 18 +++----
lib/libdvbv5/descriptors/desc_ca.c | 64 +++++++++++++++++++++++++
lib/libdvbv5/descriptors/desc_ca_identifier.c | 58 ++++++++++++++++++++++
6 files changed, 257 insertions(+), 11 deletions(-)
create mode 100644 lib/include/libdvbv5/desc_ca.h
create mode 100644 lib/include/libdvbv5/desc_ca_identifier.h
create mode 100644 lib/libdvbv5/descriptors/desc_ca.c
create mode 100644 lib/libdvbv5/descriptors/desc_ca_identifier.c
diff --git a/lib/include/libdvbv5/desc_ca.h b/lib/include/libdvbv5/desc_ca.h
new file mode 100644
index 0000000..12f4ff3
--- /dev/null
+++ b/lib/include/libdvbv5/desc_ca.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2013 - Andre Roth <neolynx@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation version 2
+ * of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ *
+ * Described at ETSI EN 300 468 V1.11.1 (2010-04)
+ */
+
+#ifndef _CA_H
+#define _CA_H
+
+#include <stdint.h>
+#include <unistd.h> /* ssize_t */
+
+struct dvb_desc_ca {
+ uint8_t type;
+ uint8_t length;
+ struct dvb_desc *next;
+
+ uint16_t ca_id;
+ union {
+ uint16_t bitfield1;
+ struct {
+ uint16_t ca_pid:13;
+ uint16_t reserved:3;
+ } __attribute__((packed));
+ } __attribute__((packed));
+
+ uint8_t *privdata;
+ uint8_t privdata_len;
+} __attribute__((packed));
+
+struct dvb_v5_fe_parms;
+
+#define dvb_desc_ca_field_first ca_id
+#define dvb_desc_ca_field_last privdata
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void dvb_desc_ca_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+void dvb_desc_ca_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
+void dvb_desc_ca_free (struct dvb_desc *desc);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/include/libdvbv5/desc_ca_identifier.h b/lib/include/libdvbv5/desc_ca_identifier.h
new file mode 100644
index 0000000..18df191
--- /dev/null
+++ b/lib/include/libdvbv5/desc_ca_identifier.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2013 - Andre Roth <neolynx@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation version 2
+ * of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ *
+ * Described at ETSI EN 300 468 V1.11.1 (2010-04)
+ */
+
+#ifndef _CA_IDENTIFIER_H
+#define _CA_IDENTIFIER_H
+
+#include <stdint.h>
+#include <unistd.h> /* ssize_t */
+
+struct dvb_desc_ca_identifier {
+ uint8_t type;
+ uint8_t length;
+ struct dvb_desc *next;
+
+ uint8_t caid_count;
+ uint16_t *caids;
+
+} __attribute__((packed));
+
+struct dvb_v5_fe_parms;
+
+#define dvb_desc_ca_identifier_field_first ca_id
+#define dvb_desc_ca_identifier_field_last privdata
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void dvb_desc_ca_identifier_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+void dvb_desc_ca_identifier_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
+void dvb_desc_ca_identifier_free (struct dvb_desc *desc);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/libdvbv5/Makefile.am b/lib/libdvbv5/Makefile.am
index 0abe42d..667a1af 100644
--- a/lib/libdvbv5/Makefile.am
+++ b/lib/libdvbv5/Makefile.am
@@ -33,6 +33,9 @@ otherinclude_HEADERS = \
../include/libdvbv5/desc_logical_channel.h \
../include/libdvbv5/desc_ts_info.h \
../include/libdvbv5/desc_partial_reception.h \
+ ../include/libdvbv5/desc_service_location.h \
+ ../include/libdvbv5/desc_ca.h \
+ ../include/libdvbv5/desc_ca_identifier.h \
../include/libdvbv5/nit.h \
../include/libdvbv5/sdt.h \
../include/libdvbv5/vct.h \
@@ -41,7 +44,6 @@ otherinclude_HEADERS = \
../include/libdvbv5/eit.h \
../include/libdvbv5/cat.h \
../include/libdvbv5/atsc_eit.h \
- ../include/libdvbv5/desc_service_location.h \
../include/libdvbv5/mpeg_ts.h \
../include/libdvbv5/mpeg_pes.h \
../include/libdvbv5/mpeg_es.h
@@ -96,8 +98,10 @@ libdvbv5_la_SOURCES = \
descriptors/desc_ts_info.c \
descriptors/desc_partial_reception.c \
descriptors/desc_service_location.c \
- descriptors/mpeg_ts.c \
- descriptors/mpeg_pes.c \
+ descriptors/desc_ca.c \
+ descriptors/desc_ca_identifier.c \
+ descriptors/mpeg_ts.c \
+ descriptors/mpeg_pes.c \
descriptors/mpeg_es.c
libdvbv5_la_CPPFLAGS = -I../.. $(ENFORCE_LIBDVBV5_STATIC)
diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
index e888123..93239e6 100644
--- a/lib/libdvbv5/descriptors.c
+++ b/lib/libdvbv5/descriptors.c
@@ -55,6 +55,8 @@
#include <libdvbv5/desc_ts_info.h>
#include <libdvbv5/desc_logical_channel.h>
#include <libdvbv5/desc_partial_reception.h>
+#include <libdvbv5/desc_ca.h>
+#include <libdvbv5/desc_ca_identifier.h>
#include <libdvbv5/desc_extension.h>
static void dvb_desc_init(uint8_t type, uint8_t length, struct dvb_desc *desc)
@@ -243,10 +245,10 @@ const struct dvb_descriptor dvb_descriptors[] = {
},
[conditional_access_descriptor] = {
.name = "conditional_access_descriptor",
- .init = NULL,
- .print = NULL,
- .free = NULL,
- .size = 0,
+ .init = dvb_desc_ca_init,
+ .print = dvb_desc_ca_print,
+ .free = dvb_desc_ca_free,
+ .size = sizeof(struct dvb_desc_ca),
},
[iso639_language_descriptor] = {
.name = "iso639_language_descriptor",
@@ -572,10 +574,10 @@ const struct dvb_descriptor dvb_descriptors[] = {
},
[CA_identifier_descriptor] = {
.name = "CA_identifier_descriptor",
- .init = NULL,
- .print = NULL,
- .free = NULL,
- .size = 0,
+ .init = dvb_desc_ca_identifier_init,
+ .print = dvb_desc_ca_identifier_print,
+ .free = dvb_desc_ca_identifier_free,
+ .size = sizeof(struct dvb_desc_ca_identifier),
},
[content_descriptor] = {
.name = "content_descriptor",
diff --git a/lib/libdvbv5/descriptors/desc_ca.c b/lib/libdvbv5/descriptors/desc_ca.c
new file mode 100644
index 0000000..6b48175
--- /dev/null
+++ b/lib/libdvbv5/descriptors/desc_ca.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2013 - Andre Roth <neolynx@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation version 2
+ * of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ *
+ * Described at ETSI EN 300 468 V1.11.1 (2010-04)
+ */
+
+#include <libdvbv5/desc_ca.h>
+#include <libdvbv5/descriptors.h>
+#include <libdvbv5/dvb-fe.h>
+
+void dvb_desc_ca_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+{
+ size_t size = offsetof(struct dvb_desc_ca, dvb_desc_ca_field_last) - offsetof(struct dvb_desc_ca, dvb_desc_ca_field_first);
+ struct dvb_desc_ca *d = (struct dvb_desc_ca *) desc;
+
+ memcpy(((uint8_t *) d ) + sizeof(struct dvb_desc), buf, size);
+ bswap16(d->ca_id);
+ bswap16(d->bitfield1);
+
+ if (d->length > size) {
+ size = d->length - size;
+ d->privdata = malloc(size);
+ d->privdata_len = size;
+ memcpy(d->privdata, buf + 4, size);
+ } else {
+ d->privdata = NULL;
+ d->privdata_len = 0;
+ }
+ /*hexdump(parms, "desc ca ", buf, desc->length);*/
+ /*dvb_desc_ca_print(parms, desc);*/
+}
+
+void dvb_desc_ca_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
+{
+ const struct dvb_desc_ca *d = (const struct dvb_desc_ca *) desc;
+ dvb_log("| ca_id %04x", d->ca_id);
+ dvb_log("| ca_pid %04x", d->ca_pid);
+ dvb_log("| privdata length %d", d->privdata_len);
+ if (d->privdata)
+ hexdump(parms, "| privdata ", d->privdata, d->privdata_len);
+}
+
+void dvb_desc_ca_free(struct dvb_desc *desc)
+{
+ struct dvb_desc_ca *d = (struct dvb_desc_ca *) desc;
+ if (d->privdata)
+ free(d->privdata);
+}
+
diff --git a/lib/libdvbv5/descriptors/desc_ca_identifier.c b/lib/libdvbv5/descriptors/desc_ca_identifier.c
new file mode 100644
index 0000000..4740a01
--- /dev/null
+++ b/lib/libdvbv5/descriptors/desc_ca_identifier.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2013 - Andre Roth <neolynx@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation version 2
+ * of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ *
+ * Described at ETSI EN 300 468 V1.11.1 (2010-04)
+ */
+
+#include <libdvbv5/desc_ca_identifier.h>
+#include <libdvbv5/descriptors.h>
+#include <libdvbv5/dvb-fe.h>
+
+void dvb_desc_ca_identifier_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+{
+ struct dvb_desc_ca_identifier *d = (struct dvb_desc_ca_identifier *) desc;
+ int i;
+
+ d->caid_count = d->length >> 1; /* FIXME: warn if odd */
+ d->caids = malloc(d->length);
+ if (!d->caids) {
+ dvb_logerr("dvb_desc_ca_identifier_init: out of memory");
+ return;
+ }
+ for (i = 0; i < d->caid_count; i++) {
+ d->caids[i] = ((uint16_t *) buf)[i];
+ bswap16(d->caids[i]);
+ }
+}
+
+void dvb_desc_ca_identifier_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
+{
+ const struct dvb_desc_ca_identifier *d = (const struct dvb_desc_ca_identifier *) desc;
+ int i;
+
+ for (i = 0; i < d->caid_count; i++)
+ dvb_log("| caid %d %04x", i, d->caids[i]);
+}
+
+void dvb_desc_ca_identifier_free(struct dvb_desc *desc)
+{
+ struct dvb_desc_ca_identifier *d = (struct dvb_desc_ca_identifier *) desc;
+ if (d->caids)
+ free(d->caids);
+}
+
--
1.7.10.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 05/11] libdvbv5: fix PMT parser
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
` (2 preceding siblings ...)
2014-01-04 17:07 ` [PATCH 04/11] libdvbv5: add parser for ca and ca_identifier descriptors André Roth
@ 2014-01-04 17:07 ` André Roth
2014-01-04 17:07 ` [PATCH 06/11] libdvbv5: cleanup printing tables and descriptors André Roth
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: André Roth @ 2014-01-04 17:07 UTC (permalink / raw)
To: linux-media; +Cc: André Roth
Signed-off-by: André Roth <neolynx@gmail.com>
---
lib/include/libdvbv5/pmt.h | 6 +++++-
lib/libdvbv5/descriptors/pmt.c | 22 +++++++++++++++-------
2 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/lib/include/libdvbv5/pmt.h b/lib/include/libdvbv5/pmt.h
index f1b7cef..a2183ac 100644
--- a/lib/include/libdvbv5/pmt.h
+++ b/lib/include/libdvbv5/pmt.h
@@ -96,9 +96,13 @@ struct dvb_table_pmt {
uint16_t reserved3:4;
} __attribute__((packed));
} __attribute__((packed));
+ struct dvb_desc *descriptor;
struct dvb_table_pmt_stream *stream;
} __attribute__((packed));
+#define dvb_pmt_field_first header
+#define dvb_pmt_field_last descriptor
+
#define dvb_pmt_stream_foreach(_stream, _pmt) \
for (struct dvb_table_pmt_stream *_stream = _pmt->stream; _stream; _stream = _stream->next) \
@@ -108,7 +112,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_table_pmt_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, ssize_t buflen, uint8_t *table, ssize_t *table_length);
+void dvb_table_pmt_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, ssize_t buflen, struct dvb_table_pmt *pmt, ssize_t *table_length);
void dvb_table_pmt_free(struct dvb_table_pmt *pmt);
void dvb_table_pmt_print(struct dvb_v5_fe_parms *parms, const struct dvb_table_pmt *pmt);
diff --git a/lib/libdvbv5/descriptors/pmt.c b/lib/libdvbv5/descriptors/pmt.c
index 3915414..5d42eb7 100644
--- a/lib/libdvbv5/descriptors/pmt.c
+++ b/lib/libdvbv5/descriptors/pmt.c
@@ -26,10 +26,9 @@
#include <string.h> /* memcpy */
void dvb_table_pmt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
- ssize_t buflen, uint8_t *table, ssize_t *table_length)
+ ssize_t buflen, struct dvb_table_pmt *pmt, ssize_t *table_length)
{
const uint8_t *p = buf, *endbuf = buf + buflen - 4;
- struct dvb_table_pmt *pmt = (void *)table;
struct dvb_table_pmt_stream **head = &pmt->stream;
size_t size;
@@ -38,13 +37,13 @@ void dvb_table_pmt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
while (*head != NULL)
head = &(*head)->next;
} else {
- size = offsetof(struct dvb_table_pmt, stream);
+ size = offsetof(struct dvb_table_pmt, dvb_pmt_field_last);
if (p + size > endbuf) {
dvb_logerr("PMT table was truncated. Need %zu bytes, but has only %zu.",
size, buflen);
return;
}
- memcpy(table, p, size);
+ memcpy(pmt, p, size);
p += size;
*table_length = sizeof(struct dvb_table_pmt);
@@ -52,7 +51,8 @@ void dvb_table_pmt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
bswap16(pmt->bitfield2);
pmt->stream = NULL;
- /* skip prog section */
+ dvb_parse_descriptors(parms, p, pmt->prog_length,
+ &pmt->descriptor);
p += pmt->prog_length;
}
@@ -74,15 +74,22 @@ void dvb_table_pmt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
*head = stream;
head = &(*head)->next;
+ if (stream->section_length > endbuf - p) {
+ dvb_logerr("PMT stream section length > buffer: %zd", stream->section_length - (endbuf - p));
+ stream->section_length = endbuf - p;
+ }
/* get the descriptors for each program */
dvb_parse_descriptors(parms, p, stream->section_length,
&stream->descriptor);
p += stream->section_length;
}
- if (endbuf - p)
- dvb_logerr("PAT table has %zu spurious bytes at the end.",
+ if (p < endbuf)
+ dvb_logerr("PMT table has %zu spurious bytes at the end.",
endbuf - p);
+ if (p > endbuf)
+ dvb_logerr("PMT oops %zu ",
+ p - endbuf);
}
void dvb_table_pmt_free(struct dvb_table_pmt *pmt)
@@ -94,6 +101,7 @@ void dvb_table_pmt_free(struct dvb_table_pmt *pmt)
stream = stream->next;
free(tmp);
}
+ dvb_free_descriptors((struct dvb_desc **) &pmt->descriptor);
free(pmt);
}
--
1.7.10.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 06/11] libdvbv5: cleanup printing tables and descriptors
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
` (3 preceding siblings ...)
2014-01-04 17:07 ` [PATCH 05/11] libdvbv5: fix PMT parser André Roth
@ 2014-01-04 17:07 ` André Roth
2014-01-04 17:07 ` [PATCH 07/11] libdvbv5: use DVB_DESC_HEADER macro in all descriptors André Roth
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: André Roth @ 2014-01-04 17:07 UTC (permalink / raw)
To: linux-media; +Cc: André Roth
- log hex values where appropriate
- cleanup indents
Signed-off-by: André Roth <neolynx@gmail.com>
---
lib/libdvbv5/descriptors.c | 4 ++--
lib/libdvbv5/descriptors/cat.c | 2 +-
lib/libdvbv5/descriptors/desc_atsc_service_location.c | 1 -
lib/libdvbv5/descriptors/desc_ca.c | 4 ++--
lib/libdvbv5/descriptors/desc_ca_identifier.c | 2 +-
lib/libdvbv5/descriptors/desc_cable_delivery.c | 1 -
lib/libdvbv5/descriptors/desc_event_extended.c | 2 +-
lib/libdvbv5/descriptors/desc_event_short.c | 6 +++---
lib/libdvbv5/descriptors/desc_extension.c | 2 +-
lib/libdvbv5/descriptors/desc_frequency_list.c | 4 ++--
lib/libdvbv5/descriptors/desc_hierarchy.c | 1 -
lib/libdvbv5/descriptors/desc_isdbt_delivery.c | 1 -
lib/libdvbv5/descriptors/desc_language.c | 2 +-
lib/libdvbv5/descriptors/desc_service.c | 7 +++----
lib/libdvbv5/descriptors/desc_t2_delivery.c | 1 -
lib/libdvbv5/descriptors/desc_terrestrial_delivery.c | 1 -
lib/libdvbv5/descriptors/desc_ts_info.c | 1 -
lib/libdvbv5/descriptors/mpeg_pes.c | 10 +++++-----
lib/libdvbv5/descriptors/mpeg_ts.c | 6 +++---
lib/libdvbv5/descriptors/nit.c | 2 +-
lib/libdvbv5/descriptors/pat.c | 4 ++--
lib/libdvbv5/descriptors/pmt.c | 7 ++++---
lib/libdvbv5/descriptors/sdt.c | 6 +++---
23 files changed, 35 insertions(+), 42 deletions(-)
diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
index 93239e6..4bf9d59 100644
--- a/lib/libdvbv5/descriptors.c
+++ b/lib/libdvbv5/descriptors.c
@@ -75,8 +75,7 @@ void dvb_desc_default_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc
{
if (!parms)
parms = dvb_fe_dummy();
- dvb_log("| %s (%#02x)", dvb_descriptors[desc->type].name, desc->type);
- hexdump(parms, "| ", desc->data, desc->length);
+ hexdump(parms, "| ", desc->data, desc->length);
}
const struct dvb_table_init dvb_table_initializers[] = {
@@ -168,6 +167,7 @@ void dvb_print_descriptors(struct dvb_v5_fe_parms *parms, struct dvb_desc *desc)
dvb_desc_print_func print = dvb_descriptors[desc->type].print;
if (!print)
print = dvb_desc_default_print;
+ dvb_log("| 0x%02x: %s", desc->type, dvb_descriptors[desc->type].name);
print(parms, desc);
desc = desc->next;
}
diff --git a/lib/libdvbv5/descriptors/cat.c b/lib/libdvbv5/descriptors/cat.c
index e6fc64e..82da031 100644
--- a/lib/libdvbv5/descriptors/cat.c
+++ b/lib/libdvbv5/descriptors/cat.c
@@ -59,7 +59,7 @@ void dvb_table_cat_free(struct dvb_table_cat *cat)
void dvb_table_cat_print(struct dvb_v5_fe_parms *parms, struct dvb_table_cat *cat)
{
- dvb_log("cat");
+ dvb_log("CAT");
dvb_table_header_print(parms, &cat->header);
dvb_print_descriptors(parms, cat->descriptor);
}
diff --git a/lib/libdvbv5/descriptors/desc_atsc_service_location.c b/lib/libdvbv5/descriptors/desc_atsc_service_location.c
index 5e3f461..6da43b6 100644
--- a/lib/libdvbv5/descriptors/desc_atsc_service_location.c
+++ b/lib/libdvbv5/descriptors/desc_atsc_service_location.c
@@ -64,7 +64,6 @@ void atsc_desc_service_location_print(struct dvb_v5_fe_parms *parms, const struc
struct atsc_desc_service_location_elementary *el = s_loc->elementary;
int i;
- dvb_log("| service location");
dvb_log("| pcr PID %d", s_loc->pcr_pid);
dvb_log("|\\ elementary service - %d elementaries", s_loc->number_elements);
for (i = 0; i < s_loc->number_elements; i++) {
diff --git a/lib/libdvbv5/descriptors/desc_ca.c b/lib/libdvbv5/descriptors/desc_ca.c
index 6b48175..40edfde 100644
--- a/lib/libdvbv5/descriptors/desc_ca.c
+++ b/lib/libdvbv5/descriptors/desc_ca.c
@@ -48,8 +48,8 @@ void dvb_desc_ca_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct
void dvb_desc_ca_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
{
const struct dvb_desc_ca *d = (const struct dvb_desc_ca *) desc;
- dvb_log("| ca_id %04x", d->ca_id);
- dvb_log("| ca_pid %04x", d->ca_pid);
+ dvb_log("| ca_id 0x%04x", d->ca_id);
+ dvb_log("| ca_pid 0x%04x", d->ca_pid);
dvb_log("| privdata length %d", d->privdata_len);
if (d->privdata)
hexdump(parms, "| privdata ", d->privdata, d->privdata_len);
diff --git a/lib/libdvbv5/descriptors/desc_ca_identifier.c b/lib/libdvbv5/descriptors/desc_ca_identifier.c
index 4740a01..95e0569 100644
--- a/lib/libdvbv5/descriptors/desc_ca_identifier.c
+++ b/lib/libdvbv5/descriptors/desc_ca_identifier.c
@@ -46,7 +46,7 @@ void dvb_desc_ca_identifier_print(struct dvb_v5_fe_parms *parms, const struct dv
int i;
for (i = 0; i < d->caid_count; i++)
- dvb_log("| caid %d %04x", i, d->caids[i]);
+ dvb_log("| caid %d 0x%04x", i, d->caids[i]);
}
void dvb_desc_ca_identifier_free(struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_cable_delivery.c b/lib/libdvbv5/descriptors/desc_cable_delivery.c
index 0aa7719..6a1c7bb 100644
--- a/lib/libdvbv5/descriptors/desc_cable_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_cable_delivery.c
@@ -41,7 +41,6 @@ void dvb_desc_cable_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *
void dvb_desc_cable_delivery_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
{
const struct dvb_desc_cable_delivery *cable = (const struct dvb_desc_cable_delivery *) desc;
- dvb_log("| cable delivery");
dvb_log("| length %d", cable->length);
dvb_log("| frequency %d", cable->frequency);
dvb_log("| fec outer %d", cable->fec_outer);
diff --git a/lib/libdvbv5/descriptors/desc_event_extended.c b/lib/libdvbv5/descriptors/desc_event_extended.c
index bb05951..0970484 100644
--- a/lib/libdvbv5/descriptors/desc_event_extended.c
+++ b/lib/libdvbv5/descriptors/desc_event_extended.c
@@ -74,6 +74,6 @@ void dvb_desc_event_extended_free(struct dvb_desc *desc)
void dvb_desc_event_extended_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
{
const struct dvb_desc_event_extended *event = (const struct dvb_desc_event_extended *) desc;
- dvb_log("| Description '%s'", event->text);
+ dvb_log("| '%s'", event->text);
}
diff --git a/lib/libdvbv5/descriptors/desc_event_short.c b/lib/libdvbv5/descriptors/desc_event_short.c
index 1978beb..98809a5 100644
--- a/lib/libdvbv5/descriptors/desc_event_short.c
+++ b/lib/libdvbv5/descriptors/desc_event_short.c
@@ -67,8 +67,8 @@ void dvb_desc_event_short_free(struct dvb_desc *desc)
void dvb_desc_event_short_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
{
const struct dvb_desc_event_short *event = (const struct dvb_desc_event_short *) desc;
- dvb_log("| Name '%s'", event->name);
- dvb_log("| Language '%s'", event->language);
- dvb_log("| Description '%s'", event->text);
+ dvb_log("| name '%s'", event->name);
+ dvb_log("| language '%s'", event->language);
+ dvb_log("| sescription '%s'", event->text);
}
diff --git a/lib/libdvbv5/descriptors/desc_extension.c b/lib/libdvbv5/descriptors/desc_extension.c
index 400372f..0adf9c0 100644
--- a/lib/libdvbv5/descriptors/desc_extension.c
+++ b/lib/libdvbv5/descriptors/desc_extension.c
@@ -178,7 +178,7 @@ void extension_descriptor_print(struct dvb_v5_fe_parms *parms,
{
struct dvb_extension_descriptor *ext = (void *)desc;
uint8_t type = ext->extension_code;
- dvb_log("Extension descriptor %s type 0x%02x",
+ dvb_log("| descriptor %s type 0x%02x",
dvb_ext_descriptors[type].name, type);
if (dvb_ext_descriptors[type].print)
diff --git a/lib/libdvbv5/descriptors/desc_frequency_list.c b/lib/libdvbv5/descriptors/desc_frequency_list.c
index 447e412..28ba068 100644
--- a/lib/libdvbv5/descriptors/desc_frequency_list.c
+++ b/lib/libdvbv5/descriptors/desc_frequency_list.c
@@ -59,11 +59,11 @@ void dvb_desc_frequency_list_init(struct dvb_v5_fe_parms *parms, const uint8_t *
void dvb_desc_frequency_list_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
{
const struct dvb_desc_frequency_list *d = (const struct dvb_desc_frequency_list *) desc;
- dvb_log("| frequency list type: %d", d->freq_type);
+ dvb_log("| type: %d", d->freq_type);
int i = 0;
for (i = 0; i < d->frequencies; i++) {
- dvb_log("| frequency : %d", d->frequency[i]);
+ dvb_log("| frequency : %d", d->frequency[i]);
}
}
diff --git a/lib/libdvbv5/descriptors/desc_hierarchy.c b/lib/libdvbv5/descriptors/desc_hierarchy.c
index a591ed8..346a9c0 100644
--- a/lib/libdvbv5/descriptors/desc_hierarchy.c
+++ b/lib/libdvbv5/descriptors/desc_hierarchy.c
@@ -35,7 +35,6 @@ void dvb_desc_hierarchy_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
void dvb_desc_hierarchy_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
{
const struct dvb_desc_hierarchy *hierarchy = (const struct dvb_desc_hierarchy *) desc;
- dvb_log("| Hierarchy");
dvb_log("| type %d", hierarchy->hierarchy_type);
dvb_log("| layer %d", hierarchy->layer);
dvb_log("| embedded_layer %d", hierarchy->embedded_layer);
diff --git a/lib/libdvbv5/descriptors/desc_isdbt_delivery.c b/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
index df04580..bd22456 100644
--- a/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
@@ -83,7 +83,6 @@ void isdbt_desc_delivery_print(struct dvb_v5_fe_parms *parms, const struct dvb_d
const struct isdbt_desc_terrestrial_delivery_system *d = (const void *) desc;
int i;
- dvb_log("| ISDB-T delivery");
dvb_log("| transmission mode %s (%d)",
tm_name[d->transmission_mode], d->transmission_mode);
dvb_log("| guard interval %s (%d)",
diff --git a/lib/libdvbv5/descriptors/desc_language.c b/lib/libdvbv5/descriptors/desc_language.c
index 0b47371..264be55 100644
--- a/lib/libdvbv5/descriptors/desc_language.c
+++ b/lib/libdvbv5/descriptors/desc_language.c
@@ -37,6 +37,6 @@ void dvb_desc_language_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, s
void dvb_desc_language_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
{
const struct dvb_desc_language *lang = (const struct dvb_desc_language *) desc;
- dvb_log("| lang: %s (type: %d)", lang->language, lang->audio_type);
+ dvb_log("| lang: %s (type: %d)", lang->language, lang->audio_type);
}
diff --git a/lib/libdvbv5/descriptors/desc_service.c b/lib/libdvbv5/descriptors/desc_service.c
index 2f1b6ef..1e38451 100644
--- a/lib/libdvbv5/descriptors/desc_service.c
+++ b/lib/libdvbv5/descriptors/desc_service.c
@@ -30,7 +30,6 @@ void dvb_desc_service_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, st
uint8_t len; /* the length of the string in the input data */
uint8_t len1, len2; /* the lenght of the output strings */
- /*hexdump(parms, "service desc: ", buf - 2, desc->length + 2);*/
service->service_type = buf[0];
buf++;
@@ -63,8 +62,8 @@ void dvb_desc_service_free(struct dvb_desc *desc)
void dvb_desc_service_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
{
const struct dvb_desc_service *service = (const struct dvb_desc_service *) desc;
- dvb_log("| service type %d", service->service_type);
- dvb_log("| name '%s'", service->name);
- dvb_log("| provider '%s'", service->provider);
+ dvb_log("| service type %d", service->service_type);
+ dvb_log("| name '%s'", service->name);
+ dvb_log("| provider '%s'", service->provider);
}
diff --git a/lib/libdvbv5/descriptors/desc_t2_delivery.c b/lib/libdvbv5/descriptors/desc_t2_delivery.c
index a563164..31c6974 100644
--- a/lib/libdvbv5/descriptors/desc_t2_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_t2_delivery.c
@@ -98,7 +98,6 @@ void dvb_desc_t2_delivery_print(struct dvb_v5_fe_parms *parms,
const struct dvb_desc_t2_delivery *d = desc;
int i;
- dvb_log("| DVB-T2 delivery");
dvb_log("| plp_id %d", d->plp_id);
dvb_log("| system_id %d", d->system_id);
diff --git a/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c b/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
index 745813f..889ded3 100644
--- a/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
@@ -39,7 +39,6 @@ void dvb_desc_terrestrial_delivery_init(struct dvb_v5_fe_parms *parms, const uin
void dvb_desc_terrestrial_delivery_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
{
const struct dvb_desc_terrestrial_delivery *tdel = (const struct dvb_desc_terrestrial_delivery *) desc;
- dvb_log("| terrestrial delivery");
dvb_log("| length %d", tdel->length);
dvb_log("| centre frequency %d", tdel->centre_frequency * 10);
dvb_log("| mpe_fec_indicator %d", tdel->mpe_fec_indicator);
diff --git a/lib/libdvbv5/descriptors/desc_ts_info.c b/lib/libdvbv5/descriptors/desc_ts_info.c
index 02fcb82..233d331 100644
--- a/lib/libdvbv5/descriptors/desc_ts_info.c
+++ b/lib/libdvbv5/descriptors/desc_ts_info.c
@@ -69,7 +69,6 @@ void dvb_desc_ts_info_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc
t = &d->transmission_type;
- dvb_log("| TS Information");
dvb_log("| remote key ID %d", d->remote_control_key_id);
dvb_log("| name %s", d->ts_name);
dvb_log("| emphasis name %s", d->ts_name_emph);
diff --git a/lib/libdvbv5/descriptors/mpeg_pes.c b/lib/libdvbv5/descriptors/mpeg_pes.c
index ab1cadf..65f5cf1 100644
--- a/lib/libdvbv5/descriptors/mpeg_pes.c
+++ b/lib/libdvbv5/descriptors/mpeg_pes.c
@@ -34,7 +34,7 @@ void dvb_mpeg_pes_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ssize_
bswap16(pes->length);
if (pes->sync != 0x000001) {
- dvb_logerr("mpeg pes invalid");
+ dvb_logerr("mpeg pes invalid, sync 0x%06x should be 0x000001", pes->sync);
return;
}
@@ -47,7 +47,7 @@ void dvb_mpeg_pes_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ssize_
pes->stream_id == DVB_MPEG_STREAM_DIRECTORY ||
pes->stream_id == DVB_MPEG_STREAM_DSMCC ||
pes->stream_id == DVB_MPEG_STREAM_H222E ) {
- dvb_logerr("mpeg pes: unsupported stream type %#04x", pes->stream_id);
+ dvb_logerr("mpeg pes: unsupported stream type 0x%04x", pes->stream_id);
} else {
memcpy(pes->optional, p, sizeof(struct dvb_mpeg_pes_optional) -
sizeof(pes->optional->pts) -
@@ -94,8 +94,8 @@ void dvb_mpeg_pes_free(struct dvb_mpeg_pes *ts)
void dvb_mpeg_pes_print(struct dvb_v5_fe_parms *parms, struct dvb_mpeg_pes *pes)
{
dvb_log("MPEG PES");
- dvb_log(" - sync %#08x", pes->sync);
- dvb_log(" - stream_id %#04x", pes->stream_id);
+ dvb_log(" - sync 0x%08x", pes->sync);
+ dvb_log(" - stream_id 0x%04x", pes->stream_id);
dvb_log(" - length %d", pes->length);
if (pes->stream_id == DVB_MPEG_STREAM_PADDING) {
} else if (pes->stream_id == DVB_MPEG_STREAM_MAP ||
@@ -105,7 +105,7 @@ void dvb_mpeg_pes_print(struct dvb_v5_fe_parms *parms, struct dvb_mpeg_pes *pes)
pes->stream_id == DVB_MPEG_STREAM_DIRECTORY ||
pes->stream_id == DVB_MPEG_STREAM_DSMCC ||
pes->stream_id == DVB_MPEG_STREAM_H222E ) {
- dvb_log(" mpeg pes unsupported stream type %#04x", pes->stream_id);
+ dvb_log(" mpeg pes unsupported stream type 0x%04x", pes->stream_id);
} else {
dvb_log(" mpeg pes optional");
dvb_log(" - two %d", pes->optional->two);
diff --git a/lib/libdvbv5/descriptors/mpeg_ts.c b/lib/libdvbv5/descriptors/mpeg_ts.c
index 83e983a..c2154af 100644
--- a/lib/libdvbv5/descriptors/mpeg_ts.c
+++ b/lib/libdvbv5/descriptors/mpeg_ts.c
@@ -25,7 +25,7 @@
ssize_t dvb_mpeg_ts_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ssize_t buflen, uint8_t *table, ssize_t *table_length)
{
if (buf[0] != DVB_MPEG_TS) {
- dvb_logerr("mpeg ts invalid marker %#02x, sould be %#02x", buf[0], DVB_MPEG_TS);
+ dvb_logerr("mpeg ts invalid marker 0x%02x, sould be 0x%02x", buf[0], DVB_MPEG_TS);
*table_length = 0;
return 0;
}
@@ -58,11 +58,11 @@ void dvb_mpeg_ts_free(struct dvb_mpeg_ts *ts)
void dvb_mpeg_ts_print(struct dvb_v5_fe_parms *parms, struct dvb_mpeg_ts *ts)
{
dvb_log("MPEG TS");
- dvb_log(" - sync byte %#02x", ts->sync_byte);
+ dvb_log(" - sync byte 0x%02x", ts->sync_byte);
dvb_log(" - tei %d", ts->tei);
dvb_log(" - payload_start %d", ts->payload_start);
dvb_log(" - priority %d", ts->priority);
- dvb_log(" - pid %d", ts->pid);
+ dvb_log(" - pid 0x%04x", ts->pid);
dvb_log(" - scrambling %d", ts->scrambling);
dvb_log(" - adaptation_field %d", ts->adaptation_field);
dvb_log(" - continuity_counter %d", ts->continuity_counter);
diff --git a/lib/libdvbv5/descriptors/nit.c b/lib/libdvbv5/descriptors/nit.c
index ca565dd..b351a6b 100644
--- a/lib/libdvbv5/descriptors/nit.c
+++ b/lib/libdvbv5/descriptors/nit.c
@@ -143,7 +143,7 @@ void dvb_table_nit_print(struct dvb_v5_fe_parms *parms, struct dvb_table_nit *ni
const struct dvb_table_nit_transport *transport = nit->transport;
uint16_t transports = 0;
while(transport) {
- dvb_log("|- Transport: %-7d Network: %-7d", transport->transport_id, transport->network_id);
+ dvb_log("|- transport %04x network %04x", transport->transport_id, transport->network_id);
dvb_print_descriptors(parms, transport->descriptor);
transport = transport->next;
transports++;
diff --git a/lib/libdvbv5/descriptors/pat.c b/lib/libdvbv5/descriptors/pat.c
index 67d267b..1d1c124 100644
--- a/lib/libdvbv5/descriptors/pat.c
+++ b/lib/libdvbv5/descriptors/pat.c
@@ -94,10 +94,10 @@ void dvb_table_pat_print(struct dvb_v5_fe_parms *parms, struct dvb_table_pat *pa
dvb_log("PAT");
dvb_table_header_print(parms, &pat->header);
- dvb_log("|\\ program service (%d programs)", pat->programs);
+ dvb_log("|\\ %d program%s", pat->programs, pat->programs != 1 ? "s" : "");
while (pgm) {
- dvb_log("|- %7d %7d", pgm->pid, pgm->service_id);
+ dvb_log("|- program 0x%04x -> service 0x%04x", pgm->pid, pgm->service_id);
pgm = pgm->next;
}
}
diff --git a/lib/libdvbv5/descriptors/pmt.c b/lib/libdvbv5/descriptors/pmt.c
index 5d42eb7..954a51f 100644
--- a/lib/libdvbv5/descriptors/pmt.c
+++ b/lib/libdvbv5/descriptors/pmt.c
@@ -109,16 +109,17 @@ void dvb_table_pmt_print(struct dvb_v5_fe_parms *parms, const struct dvb_table_p
{
dvb_log("PMT");
dvb_table_header_print(parms, &pmt->header);
- dvb_log("|- pcr_pid %d", pmt->pcr_pid);
+ dvb_log("|- pcr_pid %04x", pmt->pcr_pid);
dvb_log("| reserved2 %d", pmt->reserved2);
dvb_log("| prog length %d", pmt->prog_length);
dvb_log("| zero3 %d", pmt->zero3);
dvb_log("| reserved3 %d", pmt->reserved3);
- dvb_log("|\\ pid type");
+ dvb_print_descriptors(parms, pmt->descriptor);
+ dvb_log("|\\");
const struct dvb_table_pmt_stream *stream = pmt->stream;
uint16_t streams = 0;
while(stream) {
- dvb_log("|- %5d %s (%d)", stream->elementary_pid,
+ dvb_log("|- stream 0x%04x: %s (%x)", stream->elementary_pid,
pmt_stream_name[stream->type], stream->type);
dvb_print_descriptors(parms, stream->descriptor);
stream = stream->next;
diff --git a/lib/libdvbv5/descriptors/sdt.c b/lib/libdvbv5/descriptors/sdt.c
index c15512f..861a352 100644
--- a/lib/libdvbv5/descriptors/sdt.c
+++ b/lib/libdvbv5/descriptors/sdt.c
@@ -73,7 +73,7 @@ void dvb_table_sdt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
p += service->section_length;
}
if (endbuf - p)
- dvb_logerr("PAT table has %zu spurious bytes at the end.",
+ dvb_logerr("SDT table has %zu spurious bytes at the end.",
endbuf - p);
}
@@ -94,11 +94,11 @@ void dvb_table_sdt_print(struct dvb_v5_fe_parms *parms, struct dvb_table_sdt *sd
dvb_log("SDT");
dvb_table_header_print(parms, &sdt->header);
dvb_log("|- network_id %d", sdt->network_id);
- dvb_log("|\\ service_id");
+ dvb_log("|\\");
const struct dvb_table_sdt_service *service = sdt->service;
uint16_t services = 0;
while(service) {
- dvb_log("|- %7d", service->service_id);
+ dvb_log("|- service 0x%04x", service->service_id);
dvb_log("| EIT schedule %d", service->EIT_schedule);
dvb_log("| EIT present following %d", service->EIT_present_following);
dvb_log("| free CA mode %d", service->free_CA_mode);
--
1.7.10.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 07/11] libdvbv5: use DVB_DESC_HEADER macro in all descriptors
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
` (4 preceding siblings ...)
2014-01-04 17:07 ` [PATCH 06/11] libdvbv5: cleanup printing tables and descriptors André Roth
@ 2014-01-04 17:07 ` André Roth
2014-01-04 17:07 ` [PATCH 08/11] libdvbv5: make dvb_desc_default_init and dvb_desc_default_print private André Roth
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: André Roth @ 2014-01-04 17:07 UTC (permalink / raw)
To: linux-media; +Cc: André Roth
Signed-off-by: André Roth <neolynx@gmail.com>
---
lib/include/libdvbv5/desc_atsc_service_location.h | 7 ++-----
lib/include/libdvbv5/desc_ca.h | 7 ++-----
lib/include/libdvbv5/desc_ca_identifier.h | 7 ++-----
lib/include/libdvbv5/desc_cable_delivery.h | 7 ++-----
lib/include/libdvbv5/desc_event_extended.h | 7 ++-----
lib/include/libdvbv5/desc_event_short.h | 7 ++-----
lib/include/libdvbv5/desc_extension.h | 7 ++-----
lib/include/libdvbv5/desc_frequency_list.h | 7 ++-----
lib/include/libdvbv5/desc_hierarchy.h | 6 ++----
lib/include/libdvbv5/desc_isdbt_delivery.h | 8 +++-----
lib/include/libdvbv5/desc_language.h | 7 ++-----
lib/include/libdvbv5/desc_logical_channel.h | 7 ++-----
lib/include/libdvbv5/desc_network_name.h | 7 ++-----
lib/include/libdvbv5/desc_partial_reception.h | 7 ++-----
lib/include/libdvbv5/desc_sat.h | 7 ++-----
lib/include/libdvbv5/desc_service.h | 7 ++-----
lib/include/libdvbv5/desc_service_list.h | 7 ++-----
lib/include/libdvbv5/desc_service_location.h | 7 ++-----
lib/include/libdvbv5/desc_t2_delivery.h | 5 +++--
lib/include/libdvbv5/desc_terrestrial_delivery.h | 7 ++-----
lib/include/libdvbv5/desc_ts_info.h | 7 ++-----
lib/include/libdvbv5/descriptors.h | 9 ++++++---
22 files changed, 50 insertions(+), 104 deletions(-)
diff --git a/lib/include/libdvbv5/desc_atsc_service_location.h b/lib/include/libdvbv5/desc_atsc_service_location.h
index 1ff2341..ebe11b7 100644
--- a/lib/include/libdvbv5/desc_atsc_service_location.h
+++ b/lib/include/libdvbv5/desc_atsc_service_location.h
@@ -21,8 +21,7 @@
#ifndef _ATSC_SERVICE_LOCATION_H
#define _ATSC_SERVICE_LOCATION_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct atsc_desc_service_location_elementary {
uint8_t stream_type;
@@ -37,9 +36,7 @@ struct atsc_desc_service_location_elementary {
} __attribute__((packed));
struct atsc_desc_service_location {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
struct atsc_desc_service_location_elementary *elementary;
diff --git a/lib/include/libdvbv5/desc_ca.h b/lib/include/libdvbv5/desc_ca.h
index 12f4ff3..49d346b 100644
--- a/lib/include/libdvbv5/desc_ca.h
+++ b/lib/include/libdvbv5/desc_ca.h
@@ -22,13 +22,10 @@
#ifndef _CA_H
#define _CA_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_ca {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
uint16_t ca_id;
union {
diff --git a/lib/include/libdvbv5/desc_ca_identifier.h b/lib/include/libdvbv5/desc_ca_identifier.h
index 18df191..1136a84 100644
--- a/lib/include/libdvbv5/desc_ca_identifier.h
+++ b/lib/include/libdvbv5/desc_ca_identifier.h
@@ -22,13 +22,10 @@
#ifndef _CA_IDENTIFIER_H
#define _CA_IDENTIFIER_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_ca_identifier {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
uint8_t caid_count;
uint16_t *caids;
diff --git a/lib/include/libdvbv5/desc_cable_delivery.h b/lib/include/libdvbv5/desc_cable_delivery.h
index c2bab5a..25d6ab2 100644
--- a/lib/include/libdvbv5/desc_cable_delivery.h
+++ b/lib/include/libdvbv5/desc_cable_delivery.h
@@ -23,13 +23,10 @@
#ifndef _CABLE_DELIVERY_H
#define _CABLE_DELIVERY_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_cable_delivery {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
uint32_t frequency;
union {
diff --git a/lib/include/libdvbv5/desc_event_extended.h b/lib/include/libdvbv5/desc_event_extended.h
index 03fb1f1..f816a2a 100644
--- a/lib/include/libdvbv5/desc_event_extended.h
+++ b/lib/include/libdvbv5/desc_event_extended.h
@@ -22,13 +22,10 @@
#ifndef _DESC_EVENT_EXTENDED_H
#define _DESC_EVENT_EXTENDED_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_event_extended {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
union {
struct {
diff --git a/lib/include/libdvbv5/desc_event_short.h b/lib/include/libdvbv5/desc_event_short.h
index 521fbca..68c7f64 100644
--- a/lib/include/libdvbv5/desc_event_short.h
+++ b/lib/include/libdvbv5/desc_event_short.h
@@ -22,13 +22,10 @@
#ifndef _DESC_EVENT_SHORT_H
#define _DESC_EVENT_SHORT_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_event_short {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
unsigned char language[4];
char *name;
diff --git a/lib/include/libdvbv5/desc_extension.h b/lib/include/libdvbv5/desc_extension.h
index 5921cba..c19ec70 100644
--- a/lib/include/libdvbv5/desc_extension.h
+++ b/lib/include/libdvbv5/desc_extension.h
@@ -21,8 +21,7 @@
#ifndef _EXTENSION_DESC_H
#define _EXTENSION_DESC_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_v5_fe_parms;
@@ -42,9 +41,7 @@ enum extension_descriptors {
};
struct dvb_extension_descriptor {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
uint8_t extension_code;
diff --git a/lib/include/libdvbv5/desc_frequency_list.h b/lib/include/libdvbv5/desc_frequency_list.h
index 55723c7..ca155fa 100644
--- a/lib/include/libdvbv5/desc_frequency_list.h
+++ b/lib/include/libdvbv5/desc_frequency_list.h
@@ -22,13 +22,10 @@
#ifndef _DESC_FREQUENCY_LIST_H
#define _DESC_FREQUENCY_LIST_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_frequency_list {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
uint8_t frequencies;
uint32_t *frequency;
diff --git a/lib/include/libdvbv5/desc_hierarchy.h b/lib/include/libdvbv5/desc_hierarchy.h
index 9dd44c2..3b08d66 100644
--- a/lib/include/libdvbv5/desc_hierarchy.h
+++ b/lib/include/libdvbv5/desc_hierarchy.h
@@ -22,12 +22,10 @@
#ifndef _HIERARCHY_H
#define _HIERARCHY_H
-#include <stdint.h>
+#include <libdvbv5/descriptors.h>
struct dvb_desc_hierarchy {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
uint8_t hierarchy_type:4;
uint8_t reserved:4;
diff --git a/lib/include/libdvbv5/desc_isdbt_delivery.h b/lib/include/libdvbv5/desc_isdbt_delivery.h
index 5bac178..ae23475 100644
--- a/lib/include/libdvbv5/desc_isdbt_delivery.h
+++ b/lib/include/libdvbv5/desc_isdbt_delivery.h
@@ -22,13 +22,11 @@
#ifndef _ISDBT_DELIVERY_H
#define _ISDBT_DELIVERY_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct isdbt_desc_terrestrial_delivery_system {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
+
uint16_t *frequency;
unsigned num_freqs;
diff --git a/lib/include/libdvbv5/desc_language.h b/lib/include/libdvbv5/desc_language.h
index 44fe1a4..f8b9634 100644
--- a/lib/include/libdvbv5/desc_language.h
+++ b/lib/include/libdvbv5/desc_language.h
@@ -22,13 +22,10 @@
#ifndef _DESC_LANGUAGE_H
#define _DESC_LANGUAGE_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_language {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
unsigned char language[4];
uint8_t audio_type;
diff --git a/lib/include/libdvbv5/desc_logical_channel.h b/lib/include/libdvbv5/desc_logical_channel.h
index bbccb81..28a6ac4 100644
--- a/lib/include/libdvbv5/desc_logical_channel.h
+++ b/lib/include/libdvbv5/desc_logical_channel.h
@@ -25,8 +25,7 @@
#ifndef _LCN_DESC_H
#define _LCN_DESC_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_logical_channel_number {
uint16_t service_id;
@@ -41,9 +40,7 @@ struct dvb_desc_logical_channel_number {
} __attribute__((packed));
struct dvb_desc_logical_channel {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
struct dvb_desc_logical_channel_number *lcn;
} __attribute__((packed));
diff --git a/lib/include/libdvbv5/desc_network_name.h b/lib/include/libdvbv5/desc_network_name.h
index 060b2e8..20e23a7 100644
--- a/lib/include/libdvbv5/desc_network_name.h
+++ b/lib/include/libdvbv5/desc_network_name.h
@@ -22,13 +22,10 @@
#ifndef _DESC_NETWORK_NAME_H
#define _DESC_NETWORK_NAME_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_network_name {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
char *network_name;
char *network_name_emph;
diff --git a/lib/include/libdvbv5/desc_partial_reception.h b/lib/include/libdvbv5/desc_partial_reception.h
index c6c45f7..3f40e5f 100644
--- a/lib/include/libdvbv5/desc_partial_reception.h
+++ b/lib/include/libdvbv5/desc_partial_reception.h
@@ -25,17 +25,14 @@
#ifndef _PARTIAL_RECEPTION_H
#define _PARTIAL_RECEPTION_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct isdb_partial_reception_service_id {
uint16_t service_id;
} __attribute__((packed));
struct isdb_desc_partial_reception {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
struct isdb_partial_reception_service_id *partial_reception;
} __attribute__((packed));
diff --git a/lib/include/libdvbv5/desc_sat.h b/lib/include/libdvbv5/desc_sat.h
index 9e192c6..8f2b1a6 100644
--- a/lib/include/libdvbv5/desc_sat.h
+++ b/lib/include/libdvbv5/desc_sat.h
@@ -22,13 +22,10 @@
#ifndef _SAT_H
#define _SAT_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_sat {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
uint32_t frequency;
uint16_t orbit;
diff --git a/lib/include/libdvbv5/desc_service.h b/lib/include/libdvbv5/desc_service.h
index 8f269aa..dc26eac 100644
--- a/lib/include/libdvbv5/desc_service.h
+++ b/lib/include/libdvbv5/desc_service.h
@@ -22,13 +22,10 @@
#ifndef _DESC_SERVICE_H
#define _DESC_SERVICE_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_service {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
uint8_t service_type;
char *name;
diff --git a/lib/include/libdvbv5/desc_service_list.h b/lib/include/libdvbv5/desc_service_list.h
index 8e7d73f..0dc34c0 100644
--- a/lib/include/libdvbv5/desc_service_list.h
+++ b/lib/include/libdvbv5/desc_service_list.h
@@ -22,8 +22,7 @@
#ifndef _DESC_SERVICE_LIST_H
#define _DESC_SERVICE_LIST_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_service_list_table {
uint16_t service_id;
@@ -31,9 +30,7 @@ struct dvb_desc_service_list_table {
} __attribute__((packed));
struct dvb_desc_service_list {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
//struct dvb_desc_service_list_table services[];
} __attribute__((packed));
diff --git a/lib/include/libdvbv5/desc_service_location.h b/lib/include/libdvbv5/desc_service_location.h
index 046bedc..958dd04 100644
--- a/lib/include/libdvbv5/desc_service_location.h
+++ b/lib/include/libdvbv5/desc_service_location.h
@@ -21,8 +21,7 @@
#ifndef _SERVICE_LOCATION_H
#define _SERVICE_LOCATION_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_service_location_element {
uint8_t stream_type;
@@ -37,9 +36,7 @@ struct dvb_desc_service_location_element {
} __attribute__((packed));
struct dvb_desc_service_location {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
union {
uint16_t bitfield;
diff --git a/lib/include/libdvbv5/desc_t2_delivery.h b/lib/include/libdvbv5/desc_t2_delivery.h
index a51f897..ed0d7a3 100644
--- a/lib/include/libdvbv5/desc_t2_delivery.h
+++ b/lib/include/libdvbv5/desc_t2_delivery.h
@@ -22,8 +22,7 @@
#ifndef _T2_DELIVERY_H
#define _T2_DELIVERY_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_t2_delivery_subcell {
uint8_t cell_id_extension;
@@ -31,6 +30,8 @@ struct dvb_desc_t2_delivery_subcell {
} __attribute__((packed));
struct dvb_desc_t2_delivery {
+ /* extended descriptor */
+
uint8_t plp_id;
uint16_t system_id;
union {
diff --git a/lib/include/libdvbv5/desc_terrestrial_delivery.h b/lib/include/libdvbv5/desc_terrestrial_delivery.h
index 9404169..72e449e 100644
--- a/lib/include/libdvbv5/desc_terrestrial_delivery.h
+++ b/lib/include/libdvbv5/desc_terrestrial_delivery.h
@@ -24,13 +24,10 @@
#ifndef _TERRESTRIAL_DELIVERY_H
#define _TERRESTRIAL_DELIVERY_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_terrestrial_delivery {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
uint32_t centre_frequency;
uint8_t reserved_future_use1:2;
diff --git a/lib/include/libdvbv5/desc_ts_info.h b/lib/include/libdvbv5/desc_ts_info.h
index 523aa04..60eed5d 100644
--- a/lib/include/libdvbv5/desc_ts_info.h
+++ b/lib/include/libdvbv5/desc_ts_info.h
@@ -22,8 +22,7 @@
#ifndef _TS_INFO_H
#define _TS_INFO_H
-#include <stdint.h>
-#include <unistd.h> /* ssize_t */
+#include <libdvbv5/descriptors.h>
struct dvb_desc_ts_info_transmission_type {
uint8_t transmission_type_info;
@@ -31,9 +30,7 @@ struct dvb_desc_ts_info_transmission_type {
} __attribute__((packed));
struct dvb_desc_ts_info {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
char *ts_name, *ts_name_emph;
struct dvb_desc_ts_info_transmission_type transmission_type;
diff --git a/lib/include/libdvbv5/descriptors.h b/lib/include/libdvbv5/descriptors.h
index 36bcc61..ae33fda 100644
--- a/lib/include/libdvbv5/descriptors.h
+++ b/lib/include/libdvbv5/descriptors.h
@@ -54,10 +54,13 @@ extern char *output_charset;
b = ntohl(b); \
} while (0)
+#define DVB_DESC_HEADER() \
+ uint8_t type; \
+ uint8_t length; \
+ struct dvb_desc *next
+
struct dvb_desc {
- uint8_t type;
- uint8_t length;
- struct dvb_desc *next;
+ DVB_DESC_HEADER();
uint8_t data[];
} __attribute__((packed));
--
1.7.10.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 08/11] libdvbv5: make dvb_desc_default_init and dvb_desc_default_print private
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
` (5 preceding siblings ...)
2014-01-04 17:07 ` [PATCH 07/11] libdvbv5: use DVB_DESC_HEADER macro in all descriptors André Roth
@ 2014-01-04 17:07 ` André Roth
2014-01-04 17:07 ` [PATCH 09/11] libdvbv5: use TABLE_INIT macro André Roth
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: André Roth @ 2014-01-04 17:07 UTC (permalink / raw)
To: linux-media; +Cc: André Roth
Signed-off-by: André Roth <neolynx@gmail.com>
---
lib/include/libdvbv5/descriptors.h | 16 ++++++++--------
lib/libdvbv5/descriptors.c | 4 ++--
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/lib/include/libdvbv5/descriptors.h b/lib/include/libdvbv5/descriptors.h
index ae33fda..d5feb4f 100644
--- a/lib/include/libdvbv5/descriptors.h
+++ b/lib/include/libdvbv5/descriptors.h
@@ -65,14 +65,6 @@ struct dvb_desc {
uint8_t data[];
} __attribute__((packed));
-void dvb_desc_default_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
-#ifdef __cplusplus
-extern "C" {
-#endif
-void dvb_desc_default_print (struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
-#ifdef __cplusplus
-}
-#endif
#define dvb_desc_foreach( _desc, _tbl ) \
for( struct dvb_desc *_desc = _tbl->descriptor; _desc; _desc = _desc->next ) \
@@ -81,6 +73,10 @@ void dvb_desc_default_print (struct dvb_v5_fe_parms *parms, const struct dvb_de
for( _struct *_desc = (_struct *) _tbl->descriptor; _desc; _desc = (_struct *) _desc->next ) \
if(_desc->type == _type) \
+#ifdef __cplusplus
+extern "C" {
+#endif
+
uint32_t bcd(uint32_t bcd);
void hexdump(struct dvb_v5_fe_parms *parms, const char *prefix, const unsigned char *buf, int len);
@@ -89,6 +85,10 @@ void dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ui
void dvb_free_descriptors(struct dvb_desc **list);
void dvb_print_descriptors(struct dvb_v5_fe_parms *parms, struct dvb_desc *desc);
+#ifdef __cplusplus
+}
+#endif
+
struct dvb_v5_fe_parms;
typedef void (*dvb_desc_init_func) (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
index 4bf9d59..48f3fe7 100644
--- a/lib/libdvbv5/descriptors.c
+++ b/lib/libdvbv5/descriptors.c
@@ -66,12 +66,12 @@ static void dvb_desc_init(uint8_t type, uint8_t length, struct dvb_desc *desc)
desc->next = NULL;
}
-void dvb_desc_default_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+static void dvb_desc_default_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
memcpy(desc->data, buf, desc->length);
}
-void dvb_desc_default_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
+static void dvb_desc_default_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
{
if (!parms)
parms = dvb_fe_dummy();
--
1.7.10.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 09/11] libdvbv5: use TABLE_INIT macro
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
` (6 preceding siblings ...)
2014-01-04 17:07 ` [PATCH 08/11] libdvbv5: make dvb_desc_default_init and dvb_desc_default_print private André Roth
@ 2014-01-04 17:07 ` André Roth
2014-01-04 17:08 ` [PATCH 10/11] libdvbv5: descriptor parser return int André Roth
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: André Roth @ 2014-01-04 17:07 UTC (permalink / raw)
To: linux-media; +Cc: André Roth
Signed-off-by: André Roth <neolynx@gmail.com>
---
lib/include/libdvbv5/descriptors.h | 2 +-
lib/libdvbv5/descriptors.c | 24 +++++++++++++-----------
2 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/lib/include/libdvbv5/descriptors.h b/lib/include/libdvbv5/descriptors.h
index d5feb4f..bc80940 100644
--- a/lib/include/libdvbv5/descriptors.h
+++ b/lib/include/libdvbv5/descriptors.h
@@ -35,7 +35,7 @@
struct dvb_v5_fe_parms;
-typedef void (*dvb_table_init_func)(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ssize_t buflen, uint8_t *table, ssize_t *table_length);
+typedef void (*dvb_table_init_func)(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ssize_t buflen, void *table, ssize_t *table_length);
struct dvb_table_init {
dvb_table_init_func init;
diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
index 48f3fe7..c7d535c 100644
--- a/lib/libdvbv5/descriptors.c
+++ b/lib/libdvbv5/descriptors.c
@@ -78,18 +78,20 @@ static void dvb_desc_default_print(struct dvb_v5_fe_parms *parms, const struct d
hexdump(parms, "| ", desc->data, desc->length);
}
+#define TABLE_INIT( _x ) { (dvb_table_init_func) _x##_init, sizeof(struct _x) }
+
const struct dvb_table_init dvb_table_initializers[] = {
- [DVB_TABLE_PAT] = { dvb_table_pat_init, sizeof(struct dvb_table_pat) },
- [DVB_TABLE_CAT] = { dvb_table_cat_init, sizeof(struct dvb_table_cat) },
- [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_EIT_SCHEDULE] = { dvb_table_eit_init, sizeof(struct dvb_table_eit) },
- [ATSC_TABLE_MGT] = { atsc_table_mgt_init, sizeof(struct atsc_table_mgt) },
- [ATSC_TABLE_EIT] = { atsc_table_eit_init, sizeof(struct atsc_table_eit) },
- [ATSC_TABLE_TVCT] = { atsc_table_vct_init, sizeof(struct atsc_table_vct) },
- [ATSC_TABLE_CVCT] = { atsc_table_vct_init, sizeof(struct atsc_table_vct) },
+ [DVB_TABLE_PAT] = TABLE_INIT(dvb_table_pat),
+ [DVB_TABLE_CAT] = TABLE_INIT(dvb_table_cat),
+ [DVB_TABLE_PMT] = TABLE_INIT(dvb_table_pmt),
+ [DVB_TABLE_NIT] = TABLE_INIT(dvb_table_nit),
+ [DVB_TABLE_SDT] = TABLE_INIT(dvb_table_sdt),
+ [DVB_TABLE_EIT] = TABLE_INIT(dvb_table_eit),
+ [DVB_TABLE_EIT_SCHEDULE] = TABLE_INIT(dvb_table_eit),
+ [ATSC_TABLE_MGT] = TABLE_INIT(atsc_table_mgt),
+ [ATSC_TABLE_EIT] = TABLE_INIT(atsc_table_eit),
+ [ATSC_TABLE_TVCT] = TABLE_INIT(atsc_table_vct),
+ [ATSC_TABLE_CVCT] = TABLE_INIT(atsc_table_vct),
};
char *default_charset = "iso-8859-1";
--
1.7.10.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 10/11] libdvbv5: descriptor parser return int
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
` (7 preceding siblings ...)
2014-01-04 17:07 ` [PATCH 09/11] libdvbv5: use TABLE_INIT macro André Roth
@ 2014-01-04 17:08 ` André Roth
2014-01-04 17:08 ` [PATCH 11/11] libdvbv5: remove unneeded includes André Roth
2014-01-07 16:15 ` [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private Mauro Carvalho Chehab
10 siblings, 0 replies; 12+ messages in thread
From: André Roth @ 2014-01-04 17:08 UTC (permalink / raw)
To: linux-media; +Cc: André Roth
Signed-off-by: André Roth <neolynx@gmail.com>
---
lib/include/libdvbv5/desc_atsc_service_location.h | 2 +-
lib/include/libdvbv5/desc_ca.h | 2 +-
lib/include/libdvbv5/desc_ca_identifier.h | 2 +-
lib/include/libdvbv5/desc_cable_delivery.h | 2 +-
lib/include/libdvbv5/desc_event_extended.h | 2 +-
lib/include/libdvbv5/desc_event_short.h | 2 +-
lib/include/libdvbv5/desc_extension.h | 4 ++--
lib/include/libdvbv5/desc_frequency_list.h | 2 +-
lib/include/libdvbv5/desc_hierarchy.h | 2 +-
lib/include/libdvbv5/desc_isdbt_delivery.h | 2 +-
lib/include/libdvbv5/desc_language.h | 2 +-
lib/include/libdvbv5/desc_logical_channel.h | 2 +-
lib/include/libdvbv5/desc_network_name.h | 2 +-
lib/include/libdvbv5/desc_partial_reception.h | 2 +-
lib/include/libdvbv5/desc_sat.h | 2 +-
lib/include/libdvbv5/desc_service.h | 2 +-
lib/include/libdvbv5/desc_service_list.h | 2 +-
lib/include/libdvbv5/desc_service_location.h | 2 +-
lib/include/libdvbv5/desc_t2_delivery.h | 2 +-
lib/include/libdvbv5/desc_terrestrial_delivery.h | 2 +-
lib/include/libdvbv5/desc_ts_info.h | 2 +-
lib/include/libdvbv5/descriptors.h | 4 ++--
lib/libdvbv5/descriptors.c | 16 ++++++++++------
lib/libdvbv5/descriptors/desc_atsc_service_location.c | 5 +++--
lib/libdvbv5/descriptors/desc_ca.c | 3 ++-
lib/libdvbv5/descriptors/desc_ca_identifier.c | 5 +++--
lib/libdvbv5/descriptors/desc_cable_delivery.c | 3 ++-
lib/libdvbv5/descriptors/desc_event_extended.c | 3 ++-
lib/libdvbv5/descriptors/desc_event_short.c | 3 ++-
lib/libdvbv5/descriptors/desc_extension.c | 9 ++++++---
lib/libdvbv5/descriptors/desc_frequency_list.c | 3 ++-
lib/libdvbv5/descriptors/desc_hierarchy.c | 3 ++-
lib/libdvbv5/descriptors/desc_isdbt_delivery.c | 7 ++++---
lib/libdvbv5/descriptors/desc_language.c | 3 ++-
lib/libdvbv5/descriptors/desc_logical_channel.c | 5 +++--
lib/libdvbv5/descriptors/desc_network_name.c | 3 ++-
lib/libdvbv5/descriptors/desc_partial_reception.c | 5 +++--
lib/libdvbv5/descriptors/desc_sat.c | 4 +++-
lib/libdvbv5/descriptors/desc_service.c | 3 ++-
lib/libdvbv5/descriptors/desc_service_list.c | 3 ++-
lib/libdvbv5/descriptors/desc_service_location.c | 3 ++-
lib/libdvbv5/descriptors/desc_t2_delivery.c | 11 ++++++-----
lib/libdvbv5/descriptors/desc_terrestrial_delivery.c | 3 ++-
lib/libdvbv5/descriptors/desc_ts_info.c | 3 ++-
44 files changed, 91 insertions(+), 63 deletions(-)
diff --git a/lib/include/libdvbv5/desc_atsc_service_location.h b/lib/include/libdvbv5/desc_atsc_service_location.h
index ebe11b7..310efa3 100644
--- a/lib/include/libdvbv5/desc_atsc_service_location.h
+++ b/lib/include/libdvbv5/desc_atsc_service_location.h
@@ -57,7 +57,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void atsc_desc_service_location_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int atsc_desc_service_location_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void atsc_desc_service_location_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void atsc_desc_service_location_free(struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_ca.h b/lib/include/libdvbv5/desc_ca.h
index 49d346b..34723d7 100644
--- a/lib/include/libdvbv5/desc_ca.h
+++ b/lib/include/libdvbv5/desc_ca.h
@@ -49,7 +49,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_ca_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_ca_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_ca_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void dvb_desc_ca_free (struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_ca_identifier.h b/lib/include/libdvbv5/desc_ca_identifier.h
index 1136a84..a4b8537 100644
--- a/lib/include/libdvbv5/desc_ca_identifier.h
+++ b/lib/include/libdvbv5/desc_ca_identifier.h
@@ -41,7 +41,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_ca_identifier_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_ca_identifier_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_ca_identifier_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void dvb_desc_ca_identifier_free (struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_cable_delivery.h b/lib/include/libdvbv5/desc_cable_delivery.h
index 25d6ab2..d794285 100644
--- a/lib/include/libdvbv5/desc_cable_delivery.h
+++ b/lib/include/libdvbv5/desc_cable_delivery.h
@@ -52,7 +52,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_cable_delivery_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_cable_delivery_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_cable_delivery_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
extern const unsigned dvbc_modulation_table[];
diff --git a/lib/include/libdvbv5/desc_event_extended.h b/lib/include/libdvbv5/desc_event_extended.h
index f816a2a..439adbe 100644
--- a/lib/include/libdvbv5/desc_event_extended.h
+++ b/lib/include/libdvbv5/desc_event_extended.h
@@ -46,7 +46,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_event_extended_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_event_extended_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_event_extended_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void dvb_desc_event_extended_free (struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_event_short.h b/lib/include/libdvbv5/desc_event_short.h
index 68c7f64..d666aad 100644
--- a/lib/include/libdvbv5/desc_event_short.h
+++ b/lib/include/libdvbv5/desc_event_short.h
@@ -40,7 +40,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_event_short_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_event_short_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_event_short_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void dvb_desc_event_short_free (struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_extension.h b/lib/include/libdvbv5/desc_extension.h
index c19ec70..8b2606a 100644
--- a/lib/include/libdvbv5/desc_extension.h
+++ b/lib/include/libdvbv5/desc_extension.h
@@ -49,7 +49,7 @@ struct dvb_extension_descriptor {
} __attribute__((packed));
-typedef void (*dvb_desc_ext_init_func) (struct dvb_v5_fe_parms *parms,
+typedef int (*dvb_desc_ext_init_func) (struct dvb_v5_fe_parms *parms,
const uint8_t *buf,
struct dvb_extension_descriptor *ext,
void *desc);
@@ -71,7 +71,7 @@ struct dvb_ext_descriptor {
extern "C" {
#endif
-void extension_descriptor_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int extension_descriptor_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void extension_descriptor_free(struct dvb_desc *descriptor);
void extension_descriptor_print(struct dvb_v5_fe_parms *parms,
const struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_frequency_list.h b/lib/include/libdvbv5/desc_frequency_list.h
index ca155fa..dc62461 100644
--- a/lib/include/libdvbv5/desc_frequency_list.h
+++ b/lib/include/libdvbv5/desc_frequency_list.h
@@ -45,7 +45,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_frequency_list_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_frequency_list_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_frequency_list_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
#ifdef __cplusplus
diff --git a/lib/include/libdvbv5/desc_hierarchy.h b/lib/include/libdvbv5/desc_hierarchy.h
index 3b08d66..e4b702c 100644
--- a/lib/include/libdvbv5/desc_hierarchy.h
+++ b/lib/include/libdvbv5/desc_hierarchy.h
@@ -46,7 +46,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_hierarchy_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_hierarchy_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_hierarchy_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
#ifdef __cplusplus
diff --git a/lib/include/libdvbv5/desc_isdbt_delivery.h b/lib/include/libdvbv5/desc_isdbt_delivery.h
index ae23475..5131d1a 100644
--- a/lib/include/libdvbv5/desc_isdbt_delivery.h
+++ b/lib/include/libdvbv5/desc_isdbt_delivery.h
@@ -46,7 +46,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void isdbt_desc_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int isdbt_desc_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void isdbt_desc_delivery_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void isdbt_desc_delivery_free(struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_language.h b/lib/include/libdvbv5/desc_language.h
index f8b9634..1b23a24 100644
--- a/lib/include/libdvbv5/desc_language.h
+++ b/lib/include/libdvbv5/desc_language.h
@@ -37,7 +37,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_language_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_language_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_language_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
#ifdef __cplusplus
diff --git a/lib/include/libdvbv5/desc_logical_channel.h b/lib/include/libdvbv5/desc_logical_channel.h
index 28a6ac4..83d44e5 100644
--- a/lib/include/libdvbv5/desc_logical_channel.h
+++ b/lib/include/libdvbv5/desc_logical_channel.h
@@ -51,7 +51,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_logical_channel_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_logical_channel_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_logical_channel_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void dvb_desc_logical_channel_free(struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_network_name.h b/lib/include/libdvbv5/desc_network_name.h
index 20e23a7..cabf9c3 100644
--- a/lib/include/libdvbv5/desc_network_name.h
+++ b/lib/include/libdvbv5/desc_network_name.h
@@ -37,7 +37,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_network_name_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_network_name_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_network_name_free (struct dvb_desc *desc);
void dvb_desc_network_name_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_partial_reception.h b/lib/include/libdvbv5/desc_partial_reception.h
index 3f40e5f..05230e7 100644
--- a/lib/include/libdvbv5/desc_partial_reception.h
+++ b/lib/include/libdvbv5/desc_partial_reception.h
@@ -43,7 +43,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void isdb_desc_partial_reception_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int isdb_desc_partial_reception_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void isdb_desc_partial_reception_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void isdb_desc_partial_reception_free(struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_sat.h b/lib/include/libdvbv5/desc_sat.h
index 8f2b1a6..eca70d4 100644
--- a/lib/include/libdvbv5/desc_sat.h
+++ b/lib/include/libdvbv5/desc_sat.h
@@ -49,7 +49,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_sat_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_sat_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_sat_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
extern const unsigned dvbs_dvbc_dvbs_freq_inner[];
diff --git a/lib/include/libdvbv5/desc_service.h b/lib/include/libdvbv5/desc_service.h
index dc26eac..93ee4cc 100644
--- a/lib/include/libdvbv5/desc_service.h
+++ b/lib/include/libdvbv5/desc_service.h
@@ -40,7 +40,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_service_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_service_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_service_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void dvb_desc_service_free (struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_service_list.h b/lib/include/libdvbv5/desc_service_list.h
index 0dc34c0..167e251 100644
--- a/lib/include/libdvbv5/desc_service_list.h
+++ b/lib/include/libdvbv5/desc_service_list.h
@@ -41,7 +41,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_service_list_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_service_list_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_service_list_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
#ifdef __cplusplus
diff --git a/lib/include/libdvbv5/desc_service_location.h b/lib/include/libdvbv5/desc_service_location.h
index 958dd04..af3379b 100644
--- a/lib/include/libdvbv5/desc_service_location.h
+++ b/lib/include/libdvbv5/desc_service_location.h
@@ -55,7 +55,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_service_location_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_service_location_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_service_location_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void dvb_desc_service_location_free (struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/desc_t2_delivery.h b/lib/include/libdvbv5/desc_t2_delivery.h
index ed0d7a3..55c967d 100644
--- a/lib/include/libdvbv5/desc_t2_delivery.h
+++ b/lib/include/libdvbv5/desc_t2_delivery.h
@@ -59,7 +59,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms,
+int dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms,
const uint8_t *buf,
struct dvb_extension_descriptor *ext,
void *desc);
diff --git a/lib/include/libdvbv5/desc_terrestrial_delivery.h b/lib/include/libdvbv5/desc_terrestrial_delivery.h
index 72e449e..6f48e76 100644
--- a/lib/include/libdvbv5/desc_terrestrial_delivery.h
+++ b/lib/include/libdvbv5/desc_terrestrial_delivery.h
@@ -51,7 +51,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_terrestrial_delivery_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_terrestrial_delivery_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_terrestrial_delivery_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
extern const unsigned dvbt_bw[];
extern const unsigned dvbt_modulation[];
diff --git a/lib/include/libdvbv5/desc_ts_info.h b/lib/include/libdvbv5/desc_ts_info.h
index 60eed5d..a34a721 100644
--- a/lib/include/libdvbv5/desc_ts_info.h
+++ b/lib/include/libdvbv5/desc_ts_info.h
@@ -52,7 +52,7 @@ struct dvb_v5_fe_parms;
extern "C" {
#endif
-void dvb_desc_ts_info_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+int dvb_desc_ts_info_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
void dvb_desc_ts_info_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
void dvb_desc_ts_info_free(struct dvb_desc *desc);
diff --git a/lib/include/libdvbv5/descriptors.h b/lib/include/libdvbv5/descriptors.h
index bc80940..3e09f85 100644
--- a/lib/include/libdvbv5/descriptors.h
+++ b/lib/include/libdvbv5/descriptors.h
@@ -81,7 +81,7 @@ uint32_t bcd(uint32_t bcd);
void hexdump(struct dvb_v5_fe_parms *parms, const char *prefix, const unsigned char *buf, int len);
-void dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf, uint16_t section_length, struct dvb_desc **head_desc);
+int dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf, uint16_t section_length, struct dvb_desc **head_desc);
void dvb_free_descriptors(struct dvb_desc **list);
void dvb_print_descriptors(struct dvb_v5_fe_parms *parms, struct dvb_desc *desc);
@@ -91,7 +91,7 @@ void dvb_print_descriptors(struct dvb_v5_fe_parms *parms, struct dvb_desc *desc)
struct dvb_v5_fe_parms;
-typedef void (*dvb_desc_init_func) (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
+typedef int (*dvb_desc_init_func) (struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc);
typedef void (*dvb_desc_print_func)(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc);
typedef void (*dvb_desc_free_func) (struct dvb_desc *desc);
diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
index c7d535c..30b3a6d 100644
--- a/lib/libdvbv5/descriptors.c
+++ b/lib/libdvbv5/descriptors.c
@@ -66,9 +66,10 @@ static void dvb_desc_init(uint8_t type, uint8_t length, struct dvb_desc *desc)
desc->next = NULL;
}
-static void dvb_desc_default_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+static int dvb_desc_default_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
memcpy(desc->data, buf, desc->length);
+ return 0;
}
static void dvb_desc_default_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
@@ -97,7 +98,7 @@ const struct dvb_table_init dvb_table_initializers[] = {
char *default_charset = "iso-8859-1";
char *output_charset = "utf-8";
-void dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
+int dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
uint16_t buflen, struct dvb_desc **head_desc)
{
const uint8_t *ptr = buf, *endbuf = buf + buflen;
@@ -116,7 +117,7 @@ void dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
if (ptr + desc_len > endbuf) {
dvb_logerr("short read of %zd/%d bytes parsing descriptor %#02x",
endbuf - ptr, desc_len, desc_type);
- return;
+ return -1;
}
switch (parms->verbose) {
@@ -144,16 +145,18 @@ void dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
}
if (!size) {
dvb_logerr("descriptor type 0x%02x has no size defined", desc_type);
- return;
+ return -2;
}
current = malloc(size);
if (!current) {
dvb_perror("Out of memory");
- return;
+ return -3;
}
dvb_desc_init(desc_type, desc_len, current); /* initialize the standard header */
- init(parms, ptr, current);
+ if (init(parms, ptr, current) != 0) {
+ return -4;
+ }
if (!*head_desc)
*head_desc = current;
if (last)
@@ -161,6 +164,7 @@ void dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
last = current;
ptr += current->length; /* standard descriptor header plus descriptor length */
}
+ return 0;
}
void dvb_print_descriptors(struct dvb_v5_fe_parms *parms, struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_atsc_service_location.c b/lib/libdvbv5/descriptors/desc_atsc_service_location.c
index 6da43b6..d47eee0 100644
--- a/lib/libdvbv5/descriptors/desc_atsc_service_location.c
+++ b/lib/libdvbv5/descriptors/desc_atsc_service_location.c
@@ -22,7 +22,7 @@
#include <libdvbv5/desc_atsc_service_location.h>
#include <libdvbv5/dvb-fe.h>
-void atsc_desc_service_location_init(struct dvb_v5_fe_parms *parms,
+int atsc_desc_service_location_init(struct dvb_v5_fe_parms *parms,
const uint8_t *buf, struct dvb_desc *desc)
{
struct atsc_desc_service_location *s_loc = (struct atsc_desc_service_location *)desc;
@@ -41,7 +41,7 @@ void atsc_desc_service_location_init(struct dvb_v5_fe_parms *parms,
s_loc->elementary = malloc(s_loc->number_elements * sizeof(*s_loc->elementary));
if (!s_loc->elementary) {
dvb_perror("Can't allocate space for ATSC service location elementary data");
- return;
+ return -1;
}
el = s_loc->elementary;
@@ -56,6 +56,7 @@ void atsc_desc_service_location_init(struct dvb_v5_fe_parms *parms,
} else {
s_loc->elementary = NULL;
}
+ return 0;
}
void atsc_desc_service_location_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_ca.c b/lib/libdvbv5/descriptors/desc_ca.c
index 40edfde..01d3b8c 100644
--- a/lib/libdvbv5/descriptors/desc_ca.c
+++ b/lib/libdvbv5/descriptors/desc_ca.c
@@ -23,7 +23,7 @@
#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
-void dvb_desc_ca_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_ca_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
size_t size = offsetof(struct dvb_desc_ca, dvb_desc_ca_field_last) - offsetof(struct dvb_desc_ca, dvb_desc_ca_field_first);
struct dvb_desc_ca *d = (struct dvb_desc_ca *) desc;
@@ -43,6 +43,7 @@ void dvb_desc_ca_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct
}
/*hexdump(parms, "desc ca ", buf, desc->length);*/
/*dvb_desc_ca_print(parms, desc);*/
+ return 0;
}
void dvb_desc_ca_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_ca_identifier.c b/lib/libdvbv5/descriptors/desc_ca_identifier.c
index 95e0569..c986ac7 100644
--- a/lib/libdvbv5/descriptors/desc_ca_identifier.c
+++ b/lib/libdvbv5/descriptors/desc_ca_identifier.c
@@ -23,7 +23,7 @@
#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
-void dvb_desc_ca_identifier_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_ca_identifier_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_ca_identifier *d = (struct dvb_desc_ca_identifier *) desc;
int i;
@@ -32,12 +32,13 @@ void dvb_desc_ca_identifier_init(struct dvb_v5_fe_parms *parms, const uint8_t *b
d->caids = malloc(d->length);
if (!d->caids) {
dvb_logerr("dvb_desc_ca_identifier_init: out of memory");
- return;
+ return -1;
}
for (i = 0; i < d->caid_count; i++) {
d->caids[i] = ((uint16_t *) buf)[i];
bswap16(d->caids[i]);
}
+ return 0;
}
void dvb_desc_ca_identifier_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_cable_delivery.c b/lib/libdvbv5/descriptors/desc_cable_delivery.c
index 6a1c7bb..5263a56 100644
--- a/lib/libdvbv5/descriptors/desc_cable_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_cable_delivery.c
@@ -24,7 +24,7 @@
#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
-void dvb_desc_cable_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_cable_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_cable_delivery *cable = (struct dvb_desc_cable_delivery *) desc;
/* copy only the data - length already initialize */
@@ -36,6 +36,7 @@ void dvb_desc_cable_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *
bswap32(cable->bitfield2);
cable->frequency = bcd(cable->frequency) * 100;
cable->symbol_rate = bcd(cable->symbol_rate) * 100;
+ return 0;
}
void dvb_desc_cable_delivery_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_event_extended.c b/lib/libdvbv5/descriptors/desc_event_extended.c
index 0970484..6689aa2 100644
--- a/lib/libdvbv5/descriptors/desc_event_extended.c
+++ b/lib/libdvbv5/descriptors/desc_event_extended.c
@@ -24,7 +24,7 @@
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
-void dvb_desc_event_extended_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_event_extended_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_event_extended *event = (struct dvb_desc_event_extended *) desc;
uint8_t len; /* the length of the string in the input data */
@@ -62,6 +62,7 @@ void dvb_desc_event_extended_init(struct dvb_v5_fe_parms *parms, const uint8_t *
buf++;
parse_string(parms, &event->text, &event->text_emph, buf, len1, default_charset, output_charset);
buf += len;
+ return 0;
}
void dvb_desc_event_extended_free(struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_event_short.c b/lib/libdvbv5/descriptors/desc_event_short.c
index 98809a5..a4fb2d0 100644
--- a/lib/libdvbv5/descriptors/desc_event_short.c
+++ b/lib/libdvbv5/descriptors/desc_event_short.c
@@ -24,7 +24,7 @@
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
-void dvb_desc_event_short_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_event_short_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_event_short *event = (struct dvb_desc_event_short *) desc;
uint8_t len; /* the length of the string in the input data */
@@ -53,6 +53,7 @@ void dvb_desc_event_short_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf
buf++;
parse_string(parms, &event->text, &event->text_emph, buf, len2, default_charset, output_charset);
buf += len;
+ return 0;
}
void dvb_desc_event_short_free(struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_extension.c b/lib/libdvbv5/descriptors/desc_extension.c
index 0adf9c0..91748bb 100644
--- a/lib/libdvbv5/descriptors/desc_extension.c
+++ b/lib/libdvbv5/descriptors/desc_extension.c
@@ -117,7 +117,7 @@ const struct dvb_ext_descriptor dvb_ext_descriptors[] = {
},
};
-void extension_descriptor_init(struct dvb_v5_fe_parms *parms,
+int extension_descriptor_init(struct dvb_v5_fe_parms *parms,
const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_extension_descriptor *ext = (void *)desc;
@@ -153,10 +153,13 @@ void extension_descriptor_init(struct dvb_v5_fe_parms *parms,
ext->descriptor = calloc(1, size);
- if (init)
- init(parms, p, ext, ext->descriptor);
+ if (init) {
+ if (init(parms, p, ext, ext->descriptor) != 0)
+ return -1;
+ }
else
memcpy(ext->descriptor, p, size);
+ return 0;
}
void extension_descriptor_free(struct dvb_desc *descriptor)
diff --git a/lib/libdvbv5/descriptors/desc_frequency_list.c b/lib/libdvbv5/descriptors/desc_frequency_list.c
index 28ba068..e1183b9 100644
--- a/lib/libdvbv5/descriptors/desc_frequency_list.c
+++ b/lib/libdvbv5/descriptors/desc_frequency_list.c
@@ -23,7 +23,7 @@
#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
-void dvb_desc_frequency_list_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_frequency_list_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_frequency_list *d = (struct dvb_desc_frequency_list *) desc;
size_t len;
@@ -54,6 +54,7 @@ void dvb_desc_frequency_list_init(struct dvb_v5_fe_parms *parms, const uint8_t *
break;
}
}
+ return 0;
}
void dvb_desc_frequency_list_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_hierarchy.c b/lib/libdvbv5/descriptors/desc_hierarchy.c
index 346a9c0..0f7675c 100644
--- a/lib/libdvbv5/descriptors/desc_hierarchy.c
+++ b/lib/libdvbv5/descriptors/desc_hierarchy.c
@@ -23,13 +23,14 @@
#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
-void dvb_desc_hierarchy_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_hierarchy_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_hierarchy *hierarchy = (struct dvb_desc_hierarchy *) desc;
/* copy from .length */
memcpy(((uint8_t *) hierarchy ) + sizeof(hierarchy->type) + sizeof(hierarchy->length) + sizeof(hierarchy->next),
buf,
hierarchy->length);
+ return 0;
}
void dvb_desc_hierarchy_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_isdbt_delivery.c b/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
index bd22456..9ef5df4 100644
--- a/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
@@ -22,7 +22,7 @@
#include <libdvbv5/desc_isdbt_delivery.h>
#include <libdvbv5/dvb-fe.h>
-void isdbt_desc_delivery_init(struct dvb_v5_fe_parms *parms,
+int isdbt_desc_delivery_init(struct dvb_v5_fe_parms *parms,
const uint8_t *buf, struct dvb_desc *desc)
{
struct isdbt_desc_terrestrial_delivery_system *d = (void *)desc;
@@ -38,16 +38,17 @@ void isdbt_desc_delivery_init(struct dvb_v5_fe_parms *parms,
d->num_freqs = d->length / 2;
if (!len)
- return;
+ return -1;
d->frequency = malloc(d->num_freqs * sizeof(*d->frequency));
if (!d->frequency) {
dvb_perror("Can't allocate space for ISDB-T frequencies");
- return;
+ return -2;
}
memcpy(d->frequency, p, d->num_freqs * sizeof(*d->frequency));
for (i = 0; i < d->num_freqs; i++)
bswap16(d->frequency[i]);
+ return 0;
}
static const char *interval_name[] = {
diff --git a/lib/libdvbv5/descriptors/desc_language.c b/lib/libdvbv5/descriptors/desc_language.c
index 264be55..cfc91b7 100644
--- a/lib/libdvbv5/descriptors/desc_language.c
+++ b/lib/libdvbv5/descriptors/desc_language.c
@@ -23,7 +23,7 @@
#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
-void dvb_desc_language_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_language_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_language *lang = (struct dvb_desc_language *) desc;
@@ -32,6 +32,7 @@ void dvb_desc_language_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, s
lang->language[2] = buf[2];
lang->language[3] = '\0';
lang->audio_type = buf[3];
+ return 0;
}
void dvb_desc_language_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_logical_channel.c b/lib/libdvbv5/descriptors/desc_logical_channel.c
index d3edbd9..6ebea03 100644
--- a/lib/libdvbv5/descriptors/desc_logical_channel.c
+++ b/lib/libdvbv5/descriptors/desc_logical_channel.c
@@ -27,7 +27,7 @@
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
-void dvb_desc_logical_channel_init(struct dvb_v5_fe_parms *parms,
+int dvb_desc_logical_channel_init(struct dvb_v5_fe_parms *parms,
const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_logical_channel *d = (void *)desc;
@@ -38,7 +38,7 @@ void dvb_desc_logical_channel_init(struct dvb_v5_fe_parms *parms,
d->lcn = malloc(d->length);
if (!d->lcn) {
dvb_perror("Out of memory!");
- return;
+ return -1;
}
memcpy(d->lcn, p, d->length);
@@ -49,6 +49,7 @@ void dvb_desc_logical_channel_init(struct dvb_v5_fe_parms *parms,
bswap16(d->lcn[i].service_id);
bswap16(d->lcn[i].bitfield);
}
+ return 0;
}
void dvb_desc_logical_channel_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_network_name.c b/lib/libdvbv5/descriptors/desc_network_name.c
index 260856e..03f98fa 100644
--- a/lib/libdvbv5/descriptors/desc_network_name.c
+++ b/lib/libdvbv5/descriptors/desc_network_name.c
@@ -24,7 +24,7 @@
#include <libdvbv5/dvb-fe.h>
#include "parse_string.h"
-void dvb_desc_network_name_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_network_name_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_network_name *net = (struct dvb_desc_network_name *) desc;
uint8_t len; /* the length of the string in the input data */
@@ -36,6 +36,7 @@ void dvb_desc_network_name_init(struct dvb_v5_fe_parms *parms, const uint8_t *bu
net->network_name_emph = NULL;
parse_string(parms, &net->network_name, &net->network_name_emph, buf, len1, default_charset, output_charset);
buf += len;
+ return 0;
}
void dvb_desc_network_name_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_partial_reception.c b/lib/libdvbv5/descriptors/desc_partial_reception.c
index 58d3fe6..4d19f14 100644
--- a/lib/libdvbv5/descriptors/desc_partial_reception.c
+++ b/lib/libdvbv5/descriptors/desc_partial_reception.c
@@ -24,7 +24,7 @@
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
-void isdb_desc_partial_reception_init(struct dvb_v5_fe_parms *parms,
+int isdb_desc_partial_reception_init(struct dvb_v5_fe_parms *parms,
const uint8_t *buf, struct dvb_desc *desc)
{
struct isdb_desc_partial_reception *d = (void *)desc;
@@ -35,7 +35,7 @@ void isdb_desc_partial_reception_init(struct dvb_v5_fe_parms *parms,
d->partial_reception = malloc(d->length);
if (!d->partial_reception) {
dvb_perror("Out of memory!");
- return;
+ return -1;
}
memcpy(d->partial_reception, p, d->length);
@@ -44,6 +44,7 @@ void isdb_desc_partial_reception_init(struct dvb_v5_fe_parms *parms,
for (i = 0; i < len; i++)
bswap16(d->partial_reception[i].service_id);
+ return 0;
}
void isdb_desc_partial_reception_free(struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_sat.c b/lib/libdvbv5/descriptors/desc_sat.c
index b38ab5f..b57ee22 100644
--- a/lib/libdvbv5/descriptors/desc_sat.c
+++ b/lib/libdvbv5/descriptors/desc_sat.c
@@ -23,7 +23,7 @@
#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
-void dvb_desc_sat_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_sat_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_sat *sat = (struct dvb_desc_sat *) desc;
/* copy from .length */
@@ -36,6 +36,8 @@ void dvb_desc_sat_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct
sat->orbit = bcd(sat->orbit);
sat->frequency = bcd(sat->frequency) * 10;
sat->symbol_rate = bcd(sat->symbol_rate) * 100;
+
+ return 0;
}
void dvb_desc_sat_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_service.c b/lib/libdvbv5/descriptors/desc_service.c
index 1e38451..fdcea02 100644
--- a/lib/libdvbv5/descriptors/desc_service.c
+++ b/lib/libdvbv5/descriptors/desc_service.c
@@ -24,7 +24,7 @@
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
-void dvb_desc_service_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_service_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_service *service = (struct dvb_desc_service *) desc;
uint8_t len; /* the length of the string in the input data */
@@ -48,6 +48,7 @@ void dvb_desc_service_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, st
buf++;
parse_string(parms, &service->name, &service->name_emph, buf, len2, default_charset, output_charset);
buf += len;
+ return 0;
}
void dvb_desc_service_free(struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_service_list.c b/lib/libdvbv5/descriptors/desc_service_list.c
index b81f961..a9a99e9 100644
--- a/lib/libdvbv5/descriptors/desc_service_list.c
+++ b/lib/libdvbv5/descriptors/desc_service_list.c
@@ -25,7 +25,7 @@
/* FIXME: implement */
-void dvb_desc_service_list_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_service_list_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
/*struct dvb_desc_service_list *slist = (struct dvb_desc_service_list *) desc;*/
@@ -41,6 +41,7 @@ void dvb_desc_service_list_init(struct dvb_v5_fe_parms *parms, const uint8_t *bu
/*return sizeof(struct dvb_desc_service_list) + slist->length + sizeof(struct dvb_desc_service_list_table);*/
/* FIXME: make linked list */
+ return 0;
}
void dvb_desc_service_list_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_service_location.c b/lib/libdvbv5/descriptors/desc_service_location.c
index c636862..8dde550 100644
--- a/lib/libdvbv5/descriptors/desc_service_location.c
+++ b/lib/libdvbv5/descriptors/desc_service_location.c
@@ -22,7 +22,7 @@
#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
-void dvb_desc_service_location_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_service_location_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_service_location *service_location = (struct dvb_desc_service_location *) desc;
/* copy from .next */
@@ -47,6 +47,7 @@ void dvb_desc_service_location_init(struct dvb_v5_fe_parms *parms, const uint8_t
bswap16(element->bitfield);
element++;
}
+ return 0;
}
void dvb_desc_service_location_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_t2_delivery.c b/lib/libdvbv5/descriptors/desc_t2_delivery.c
index 31c6974..b7f2d0b 100644
--- a/lib/libdvbv5/descriptors/desc_t2_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_t2_delivery.c
@@ -24,7 +24,7 @@
#include <libdvbv5/desc_t2_delivery.h>
#include <libdvbv5/dvb-fe.h>
-void dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms,
+int dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms,
const uint8_t *buf,
struct dvb_extension_descriptor *ext,
void *desc)
@@ -39,7 +39,7 @@ void dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms,
if (desc_len < len) {
dvb_logwarn("T2 delivery descriptor is too small");
- return;
+ return -1;
}
if (desc_len < len2) {
memcpy(p, buf, len);
@@ -48,7 +48,7 @@ void dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms,
if (desc_len != len)
dvb_logwarn("T2 delivery descriptor is truncated");
- return;
+ return -2;
}
memcpy(p, buf, len2);
p += len2;
@@ -68,7 +68,7 @@ void dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms,
sizeof(*d->centre_frequency));
if (!d->centre_frequency) {
dvb_perror("Out of memory");
- return;
+ return -3;
}
memcpy(d->centre_frequency, p, sizeof(*d->centre_frequency) * d->frequency_loop_length);
@@ -83,12 +83,13 @@ void dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms,
d->subcell = calloc(d->subcel_info_loop_length, sizeof(*d->subcell));
if (!d->subcell) {
dvb_perror("Out of memory");
- return;
+ return -4;
}
memcpy(d->subcell, p, sizeof(*d->subcell) * d->subcel_info_loop_length);
for (i = 0; i < d->subcel_info_loop_length; i++)
bswap16(d->subcell[i].transposer_frequency);
+ return 0;
}
void dvb_desc_t2_delivery_print(struct dvb_v5_fe_parms *parms,
diff --git a/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c b/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
index 889ded3..0c568b0 100644
--- a/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
@@ -25,7 +25,7 @@
#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
-void dvb_desc_terrestrial_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
+int dvb_desc_terrestrial_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_terrestrial_delivery *tdel = (struct dvb_desc_terrestrial_delivery *) desc;
/* copy from .length */
@@ -34,6 +34,7 @@ void dvb_desc_terrestrial_delivery_init(struct dvb_v5_fe_parms *parms, const uin
tdel->length);
bswap32(tdel->centre_frequency);
bswap32(tdel->reserved_future_use2);
+ return 0;
}
void dvb_desc_terrestrial_delivery_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_ts_info.c b/lib/libdvbv5/descriptors/desc_ts_info.c
index 233d331..f2867e5 100644
--- a/lib/libdvbv5/descriptors/desc_ts_info.c
+++ b/lib/libdvbv5/descriptors/desc_ts_info.c
@@ -24,7 +24,7 @@
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
-void dvb_desc_ts_info_init(struct dvb_v5_fe_parms *parms,
+int dvb_desc_ts_info_init(struct dvb_v5_fe_parms *parms,
const uint8_t *buf, struct dvb_desc *desc)
{
struct dvb_desc_ts_info *d = (void *)desc;
@@ -59,6 +59,7 @@ void dvb_desc_ts_info_init(struct dvb_v5_fe_parms *parms,
bswap16(d->service_id[i]);
p += sizeof(*d->service_id) * t->num_of_service;
+ return 0;
}
void dvb_desc_ts_info_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
--
1.7.10.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 11/11] libdvbv5: remove unneeded includes
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
` (8 preceding siblings ...)
2014-01-04 17:08 ` [PATCH 10/11] libdvbv5: descriptor parser return int André Roth
@ 2014-01-04 17:08 ` André Roth
2014-01-07 16:15 ` [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private Mauro Carvalho Chehab
10 siblings, 0 replies; 12+ messages in thread
From: André Roth @ 2014-01-04 17:08 UTC (permalink / raw)
To: linux-media; +Cc: André Roth
Signed-off-by: André Roth <neolynx@gmail.com>
---
lib/libdvbv5/descriptors/desc_atsc_service_location.c | 1 -
lib/libdvbv5/descriptors/desc_ca.c | 1 -
lib/libdvbv5/descriptors/desc_ca_identifier.c | 1 -
lib/libdvbv5/descriptors/desc_cable_delivery.c | 1 -
lib/libdvbv5/descriptors/desc_event_extended.c | 1 -
lib/libdvbv5/descriptors/desc_event_short.c | 1 -
lib/libdvbv5/descriptors/desc_extension.c | 1 -
lib/libdvbv5/descriptors/desc_frequency_list.c | 1 -
lib/libdvbv5/descriptors/desc_hierarchy.c | 1 -
lib/libdvbv5/descriptors/desc_isdbt_delivery.c | 1 -
lib/libdvbv5/descriptors/desc_language.c | 1 -
lib/libdvbv5/descriptors/desc_logical_channel.c | 1 -
lib/libdvbv5/descriptors/desc_network_name.c | 1 -
lib/libdvbv5/descriptors/desc_partial_reception.c | 1 -
lib/libdvbv5/descriptors/desc_sat.c | 1 -
lib/libdvbv5/descriptors/desc_service.c | 1 -
lib/libdvbv5/descriptors/desc_service_list.c | 1 -
lib/libdvbv5/descriptors/desc_service_location.c | 1 -
lib/libdvbv5/descriptors/desc_t2_delivery.c | 1 -
lib/libdvbv5/descriptors/desc_terrestrial_delivery.c | 1 -
lib/libdvbv5/descriptors/desc_ts_info.c | 1 -
21 files changed, 21 deletions(-)
diff --git a/lib/libdvbv5/descriptors/desc_atsc_service_location.c b/lib/libdvbv5/descriptors/desc_atsc_service_location.c
index d47eee0..a654adc 100644
--- a/lib/libdvbv5/descriptors/desc_atsc_service_location.c
+++ b/lib/libdvbv5/descriptors/desc_atsc_service_location.c
@@ -18,7 +18,6 @@
*
*/
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/desc_atsc_service_location.h>
#include <libdvbv5/dvb-fe.h>
diff --git a/lib/libdvbv5/descriptors/desc_ca.c b/lib/libdvbv5/descriptors/desc_ca.c
index 01d3b8c..791bda2 100644
--- a/lib/libdvbv5/descriptors/desc_ca.c
+++ b/lib/libdvbv5/descriptors/desc_ca.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_ca.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
int dvb_desc_ca_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_ca_identifier.c b/lib/libdvbv5/descriptors/desc_ca_identifier.c
index c986ac7..3102d01 100644
--- a/lib/libdvbv5/descriptors/desc_ca_identifier.c
+++ b/lib/libdvbv5/descriptors/desc_ca_identifier.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_ca_identifier.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
int dvb_desc_ca_identifier_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_cable_delivery.c b/lib/libdvbv5/descriptors/desc_cable_delivery.c
index 5263a56..0b599e6 100644
--- a/lib/libdvbv5/descriptors/desc_cable_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_cable_delivery.c
@@ -21,7 +21,6 @@
*/
#include <libdvbv5/desc_cable_delivery.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
int dvb_desc_cable_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_event_extended.c b/lib/libdvbv5/descriptors/desc_event_extended.c
index 6689aa2..de20d06 100644
--- a/lib/libdvbv5/descriptors/desc_event_extended.c
+++ b/lib/libdvbv5/descriptors/desc_event_extended.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_event_extended.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
diff --git a/lib/libdvbv5/descriptors/desc_event_short.c b/lib/libdvbv5/descriptors/desc_event_short.c
index a4fb2d0..c4f5efe 100644
--- a/lib/libdvbv5/descriptors/desc_event_short.c
+++ b/lib/libdvbv5/descriptors/desc_event_short.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_event_short.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
diff --git a/lib/libdvbv5/descriptors/desc_extension.c b/lib/libdvbv5/descriptors/desc_extension.c
index 91748bb..0aaeba8 100644
--- a/lib/libdvbv5/descriptors/desc_extension.c
+++ b/lib/libdvbv5/descriptors/desc_extension.c
@@ -18,7 +18,6 @@
*
*/
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/desc_extension.h>
#include <libdvbv5/desc_t2_delivery.h>
#include <libdvbv5/dvb-fe.h>
diff --git a/lib/libdvbv5/descriptors/desc_frequency_list.c b/lib/libdvbv5/descriptors/desc_frequency_list.c
index e1183b9..1ee563c 100644
--- a/lib/libdvbv5/descriptors/desc_frequency_list.c
+++ b/lib/libdvbv5/descriptors/desc_frequency_list.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_frequency_list.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
int dvb_desc_frequency_list_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_hierarchy.c b/lib/libdvbv5/descriptors/desc_hierarchy.c
index 0f7675c..a85c8da 100644
--- a/lib/libdvbv5/descriptors/desc_hierarchy.c
+++ b/lib/libdvbv5/descriptors/desc_hierarchy.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_hierarchy.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
int dvb_desc_hierarchy_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_isdbt_delivery.c b/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
index 9ef5df4..336ca85 100644
--- a/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
@@ -18,7 +18,6 @@
*
*/
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/desc_isdbt_delivery.h>
#include <libdvbv5/dvb-fe.h>
diff --git a/lib/libdvbv5/descriptors/desc_language.c b/lib/libdvbv5/descriptors/desc_language.c
index cfc91b7..5477ae7 100644
--- a/lib/libdvbv5/descriptors/desc_language.c
+++ b/lib/libdvbv5/descriptors/desc_language.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_language.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
int dvb_desc_language_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_logical_channel.c b/lib/libdvbv5/descriptors/desc_logical_channel.c
index 6ebea03..7137c57 100644
--- a/lib/libdvbv5/descriptors/desc_logical_channel.c
+++ b/lib/libdvbv5/descriptors/desc_logical_channel.c
@@ -22,7 +22,6 @@
* http://tdt.telecom.pt/recursos/apresentacoes/Signalling Specifications for DTT deployment in Portugal.pdf
*/
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/desc_logical_channel.h>
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
diff --git a/lib/libdvbv5/descriptors/desc_network_name.c b/lib/libdvbv5/descriptors/desc_network_name.c
index 03f98fa..95d8501 100644
--- a/lib/libdvbv5/descriptors/desc_network_name.c
+++ b/lib/libdvbv5/descriptors/desc_network_name.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_network_name.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
#include "parse_string.h"
diff --git a/lib/libdvbv5/descriptors/desc_partial_reception.c b/lib/libdvbv5/descriptors/desc_partial_reception.c
index 4d19f14..0e4d25c 100644
--- a/lib/libdvbv5/descriptors/desc_partial_reception.c
+++ b/lib/libdvbv5/descriptors/desc_partial_reception.c
@@ -19,7 +19,6 @@
* Described on ARIB STD-B10 as Partial reception descriptor
*/
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/desc_partial_reception.h>
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
diff --git a/lib/libdvbv5/descriptors/desc_sat.c b/lib/libdvbv5/descriptors/desc_sat.c
index b57ee22..c763e4e 100644
--- a/lib/libdvbv5/descriptors/desc_sat.c
+++ b/lib/libdvbv5/descriptors/desc_sat.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_sat.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
int dvb_desc_sat_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_service.c b/lib/libdvbv5/descriptors/desc_service.c
index fdcea02..f13a9e6 100644
--- a/lib/libdvbv5/descriptors/desc_service.c
+++ b/lib/libdvbv5/descriptors/desc_service.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_service.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
diff --git a/lib/libdvbv5/descriptors/desc_service_list.c b/lib/libdvbv5/descriptors/desc_service_list.c
index a9a99e9..7334f01 100644
--- a/lib/libdvbv5/descriptors/desc_service_list.c
+++ b/lib/libdvbv5/descriptors/desc_service_list.c
@@ -20,7 +20,6 @@
*/
#include <libdvbv5/desc_service_list.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
/* FIXME: implement */
diff --git a/lib/libdvbv5/descriptors/desc_service_location.c b/lib/libdvbv5/descriptors/desc_service_location.c
index 8dde550..3023561 100644
--- a/lib/libdvbv5/descriptors/desc_service_location.c
+++ b/lib/libdvbv5/descriptors/desc_service_location.c
@@ -19,7 +19,6 @@
*/
#include <libdvbv5/desc_service_location.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
int dvb_desc_service_location_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_t2_delivery.c b/lib/libdvbv5/descriptors/desc_t2_delivery.c
index b7f2d0b..0d5cab6 100644
--- a/lib/libdvbv5/descriptors/desc_t2_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_t2_delivery.c
@@ -19,7 +19,6 @@
* Based on ETSI EN 300 468 V1.11.1 (2010-04)
*/
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/desc_extension.h>
#include <libdvbv5/desc_t2_delivery.h>
#include <libdvbv5/dvb-fe.h>
diff --git a/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c b/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
index 0c568b0..7eb4b2b 100644
--- a/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
@@ -22,7 +22,6 @@
*/
#include <libdvbv5/desc_terrestrial_delivery.h>
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/dvb-fe.h>
int dvb_desc_terrestrial_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_ts_info.c b/lib/libdvbv5/descriptors/desc_ts_info.c
index f2867e5..7a6e520 100644
--- a/lib/libdvbv5/descriptors/desc_ts_info.c
+++ b/lib/libdvbv5/descriptors/desc_ts_info.c
@@ -19,7 +19,6 @@
* Described on ARIB STD-B10 as TS information descriptor
*/
-#include <libdvbv5/descriptors.h>
#include <libdvbv5/desc_ts_info.h>
#include <libdvbv5/dvb-fe.h>
#include <parse_string.h>
--
1.7.10.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private
2014-01-04 17:07 [PATCH 01/11] libdvbv5: fix dvb_parse_descriptors and make dvb_desc_init private André Roth
` (9 preceding siblings ...)
2014-01-04 17:08 ` [PATCH 11/11] libdvbv5: remove unneeded includes André Roth
@ 2014-01-07 16:15 ` Mauro Carvalho Chehab
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2014-01-07 16:15 UTC (permalink / raw)
To: André Roth; +Cc: linux-media
Em Sat, 4 Jan 2014 18:07:51 +0100
André Roth <neolynx@gmail.com> escreveu:
description?
what are you fixing? why? how?
> Signed-off-by: André Roth <neolynx@gmail.com>
> ---
> lib/include/libdvbv5/descriptors.h | 2 --
> lib/libdvbv5/descriptors.c | 44 ++++++++++++++++++------------------
> 2 files changed, 22 insertions(+), 24 deletions(-)
>
> diff --git a/lib/include/libdvbv5/descriptors.h b/lib/include/libdvbv5/descriptors.h
> index 6f89aeb..36bcc61 100644
> --- a/lib/include/libdvbv5/descriptors.h
> +++ b/lib/include/libdvbv5/descriptors.h
> @@ -78,8 +78,6 @@ void dvb_desc_default_print (struct dvb_v5_fe_parms *parms, const struct dvb_de
> for( _struct *_desc = (_struct *) _tbl->descriptor; _desc; _desc = (_struct *) _desc->next ) \
> if(_desc->type == _type) \
>
> -ssize_t dvb_desc_init(const uint8_t *buf, struct dvb_desc *desc);
> -
> uint32_t bcd(uint32_t bcd);
>
> void hexdump(struct dvb_v5_fe_parms *parms, const char *prefix, const unsigned char *buf, int len);
> diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
> index a2176b4..626f81d 100644
> --- a/lib/libdvbv5/descriptors.c
> +++ b/lib/libdvbv5/descriptors.c
> @@ -56,12 +56,11 @@
> #include <libdvbv5/desc_partial_reception.h>
> #include <libdvbv5/desc_extension.h>
>
> -ssize_t dvb_desc_init(const uint8_t *buf, struct dvb_desc *desc)
> +static void dvb_desc_init(uint8_t type, uint8_t length, struct dvb_desc *desc)
> {
> - desc->type = buf[0];
> - desc->length = buf[1];
> + desc->type = type;
> + desc->length = length;
> desc->next = NULL;
> - return 2;
> }
>
> void dvb_desc_default_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
> @@ -94,16 +93,27 @@ char *default_charset = "iso-8859-1";
> char *output_charset = "utf-8";
>
> void dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
> - uint16_t section_length, struct dvb_desc **head_desc)
> + uint16_t buflen, struct dvb_desc **head_desc)
> {
> - const uint8_t *ptr = buf;
> + const uint8_t *ptr = buf, *endbuf = buf + buflen;
> struct dvb_desc *current = NULL;
> struct dvb_desc *last = NULL;
> - while (ptr < buf + section_length) {
> - unsigned desc_type = ptr[0];
> - int desc_len = ptr[1];
> +
> + *head_desc = NULL;
> +
> + while (ptr + 2 <= endbuf ) {
No spaces before ')'
> + uint8_t desc_type = ptr[0];
> + uint8_t desc_len = ptr[1];
> size_t size;
>
> + ptr += 2; /* skip type and length */
> +
> + if (ptr + desc_len > endbuf) {
> + dvb_logerr("short read of %zd/%d bytes parsing descriptor %#02x",
> + endbuf - ptr, desc_len, desc_type);
> + return;
> + }
> +
> switch (parms->verbose) {
> case 0:
> case 1:
> @@ -119,11 +129,6 @@ void dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
> hexdump(parms, "content: ", ptr + 2, desc_len);
> }
>
> - if (desc_len > section_length - 2) {
> - dvb_logwarn("descriptor type %0x02x is too big",
> - desc_type);
> - return;
> - }
>
> dvb_desc_init_func init = dvb_descriptors[desc_type].init;
> if (!init) {
> @@ -133,21 +138,16 @@ void dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
> size = dvb_descriptors[desc_type].size;
> }
> if (!size) {
> - dvb_logwarn("descriptor type 0x%02x has no size defined", desc_type);
> - size = 4096;
> - }
> - if (ptr + 2 >= buf + section_length) {
> - dvb_logwarn("descriptor type 0x%02x is truncated: desc len %d, section len %zd",
> - desc_type, desc_len, section_length - (ptr - buf));
> + dvb_logerr("descriptor type 0x%02x has no size defined", desc_type);
> return;
> }
>
> - current = calloc(1, size);
> + current = malloc(size);
Please either keep using calloc, or do a memset() to cleanup the newest
buffer. It is a bad idea to let the new buffers uninitialized.
> if (!current) {
> dvb_perror("Out of memory");
> return;
> }
> - ptr += dvb_desc_init(ptr, current); /* the standard header was read */
> + dvb_desc_init(desc_type, desc_len, current); /* initialize the standard header */
> init(parms, ptr, current);
> if (!*head_desc)
> *head_desc = current;
Btw, I saw some cleanups, but I didn't find any bug to be fixed on the
above.
Also, it is introducing a regression, when it replaced calloc() with
malloc().
Regard
--
Cheers,
Mauro
^ permalink raw reply [flat|nested] 12+ messages in thread