All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/7] libdvbv5: reunite atsc_table_header and dvb_table_header
@ 2014-04-09 22:26 André Roth
  2014-04-09 22:26 ` [PATCH 2/7] libdvbv5: fix asprintf compile warning in dvbv5-scan André Roth
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: André Roth @ 2014-04-09 22:26 UTC (permalink / raw)
  To: linux-media; +Cc: André Roth

this solves the ambiguity when parsing the dvb/atsc header
in dvb-scan.c

Signed-off-by: André Roth <neolynx@gmail.com>
---
 lib/include/libdvbv5/atsc_eit.h        |    2 +-
 lib/include/libdvbv5/atsc_header.h     |   39 ++++++--------------------
 lib/include/libdvbv5/header.h          |    5 ++--
 lib/include/libdvbv5/mgt.h             |    2 +-
 lib/include/libdvbv5/vct.h             |    2 +-
 lib/libdvbv5/Makefile.am               |    1 -
 lib/libdvbv5/descriptors/atsc_eit.c    |    2 +-
 lib/libdvbv5/descriptors/atsc_header.c |   47 --------------------------------
 lib/libdvbv5/descriptors/header.c      |    3 +-
 lib/libdvbv5/descriptors/mgt.c         |    2 +-
 lib/libdvbv5/descriptors/vct.c         |    2 +-
 11 files changed, 17 insertions(+), 90 deletions(-)
 delete mode 100644 lib/libdvbv5/descriptors/atsc_header.c

diff --git a/lib/include/libdvbv5/atsc_eit.h b/lib/include/libdvbv5/atsc_eit.h
index c527b1d..8b093de 100644
--- a/lib/include/libdvbv5/atsc_eit.h
+++ b/lib/include/libdvbv5/atsc_eit.h
@@ -64,7 +64,7 @@ union atsc_table_eit_desc_length {
 } __attribute__((packed));
 
 struct atsc_table_eit {
-	struct atsc_table_header header;
+	ATSC_HEADER();
 	uint8_t events;
 	struct atsc_table_eit_event *event;
 } __attribute__((packed));
diff --git a/lib/include/libdvbv5/atsc_header.h b/lib/include/libdvbv5/atsc_header.h
index 9685b37..12e7379 100644
--- a/lib/include/libdvbv5/atsc_header.h
+++ b/lib/include/libdvbv5/atsc_header.h
@@ -24,40 +24,17 @@
 #include <stdint.h>
 #include <unistd.h> /* ssize_t */
 
+#include <libdvbv5/header.h>
+
 #define ATSC_BASE_PID  0x1FFB
 
-struct atsc_table_header {
-	uint8_t  table_id;
-	union {
-		uint16_t bitfield;
-		struct {
-			uint16_t section_length:12;
-			uint16_t one:2;
-			uint16_t priv:1;
-			uint16_t syntax:1;
-		} __attribute__((packed));
-	} __attribute__((packed));
-	uint16_t id;
-	uint8_t  current_next:1;
-	uint8_t  version:5;
-	uint8_t  one2:2;
-
-	uint8_t  section_id;
-	uint8_t  last_section;
-	uint8_t  protocol_version;
-} __attribute__((packed));
-
-struct dvb_v5_fe_parms;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
+#define ATSC_HEADER() \
+	struct dvb_table_header header; \
+	uint8_t  protocol_version; \
 
-int  atsc_table_header_init (struct atsc_table_header *t);
-void atsc_table_header_print(struct dvb_v5_fe_parms *parms, const struct atsc_table_header *t);
+#define ATSC_TABLE_HEADER_PRINT(_parms, _table) \
+	dvb_table_header_print(_parms, &_table->header); \
+	dvb_log("| protocol_version %d", _table->protocol_version); \
 
-#ifdef __cplusplus
-}
-#endif
 
 #endif
diff --git a/lib/include/libdvbv5/header.h b/lib/include/libdvbv5/header.h
index 67b7694..dc85f46 100644
--- a/lib/include/libdvbv5/header.h
+++ b/lib/include/libdvbv5/header.h
@@ -50,10 +50,9 @@ struct dvb_table_header {
 	union {
 		uint16_t bitfield;
 		struct {
-			uint16_t section_length:10;
-			uint8_t  zero:2;
+			uint16_t section_length:12;
 			uint8_t  one:2;
-			uint8_t  zero2:1;
+			uint8_t  zero:1;
 			uint8_t  syntax:1;
 		} __attribute__((packed));
 	} __attribute__((packed));
diff --git a/lib/include/libdvbv5/mgt.h b/lib/include/libdvbv5/mgt.h
index 4ea905d..cb8d63a 100644
--- a/lib/include/libdvbv5/mgt.h
+++ b/lib/include/libdvbv5/mgt.h
@@ -53,7 +53,7 @@ struct atsc_table_mgt_table {
 } __attribute__((packed));
 
 struct atsc_table_mgt {
-	struct atsc_table_header header;
+	ATSC_HEADER();
         uint16_t tables;
         struct atsc_table_mgt_table *table;
 	struct dvb_desc *descriptor;
diff --git a/lib/include/libdvbv5/vct.h b/lib/include/libdvbv5/vct.h
index 6d41ac5..83bad06 100644
--- a/lib/include/libdvbv5/vct.h
+++ b/lib/include/libdvbv5/vct.h
@@ -85,7 +85,7 @@ struct atsc_table_vct_channel {
 } __attribute__((packed));
 
 struct atsc_table_vct {
-	struct atsc_table_header header;
+	ATSC_HEADER();
 
 	uint8_t num_channels_in_section;
 
diff --git a/lib/libdvbv5/Makefile.am b/lib/libdvbv5/Makefile.am
index 667a1af..df67544 100644
--- a/lib/libdvbv5/Makefile.am
+++ b/lib/libdvbv5/Makefile.am
@@ -69,7 +69,6 @@ libdvbv5_la_SOURCES = \
 	dvb-scan.c	\
 	descriptors.c	\
 	descriptors/header.c		\
-	descriptors/atsc_header.c	\
 	descriptors/pat.c		\
 	descriptors/pmt.c		\
 	descriptors/nit.c		\
diff --git a/lib/libdvbv5/descriptors/atsc_eit.c b/lib/libdvbv5/descriptors/atsc_eit.c
index 9e1397d..286748c 100644
--- a/lib/libdvbv5/descriptors/atsc_eit.c
+++ b/lib/libdvbv5/descriptors/atsc_eit.c
@@ -132,7 +132,7 @@ void atsc_table_eit_free(struct atsc_table_eit *eit)
 void atsc_table_eit_print(struct dvb_v5_fe_parms *parms, struct atsc_table_eit *eit)
 {
 	dvb_log("EIT");
-	atsc_table_header_print(parms, &eit->header);
+	ATSC_TABLE_HEADER_PRINT(parms, eit);
 	const struct atsc_table_eit_event *event = eit->event;
 	uint16_t events = 0;
 
diff --git a/lib/libdvbv5/descriptors/atsc_header.c b/lib/libdvbv5/descriptors/atsc_header.c
deleted file mode 100644
index 06d1bb1..0000000
--- a/lib/libdvbv5/descriptors/atsc_header.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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/atsc_header.h>
-#include <libdvbv5/descriptors.h>
-#include <libdvbv5/dvb-fe.h>
-
-int atsc_table_header_init(struct atsc_table_header *t)
-{
-	bswap16(t->bitfield);
-	bswap16(t->id);
-	return 0;
-}
-
-void atsc_table_header_print(struct dvb_v5_fe_parms *parms, const struct atsc_table_header *t)
-{
-	dvb_log("| table_id         %02x", t->table_id);
-	dvb_log("| section_length   %d", t->section_length);
-	dvb_log("| syntax           %d", t->syntax);
-	dvb_log("| priv             %d", t->priv);
-	dvb_log("| one              %d", t->one);
-	dvb_log("| id               %d", t->id);
-	dvb_log("| one2             %d", t->one2);
-	dvb_log("| version          %d", t->version);
-	dvb_log("| current_next     %d", t->current_next);
-	dvb_log("| section_id       %d", t->section_id);
-	dvb_log("| last_section     %d", t->last_section);
-	dvb_log("| protocol_version %d", t->protocol_version);
-}
-
diff --git a/lib/libdvbv5/descriptors/header.c b/lib/libdvbv5/descriptors/header.c
index da3f970..3df73af 100644
--- a/lib/libdvbv5/descriptors/header.c
+++ b/lib/libdvbv5/descriptors/header.c
@@ -34,9 +34,8 @@ void dvb_table_header_print(struct dvb_v5_fe_parms *parms, const struct dvb_tabl
 {
 	dvb_log("| table_id            %d", t->table_id);
 	dvb_log("| section_length      %d", t->section_length);
-	dvb_log("| zero                %d", t->zero);
 	dvb_log("| one                 %d", t->one);
-	dvb_log("| zero2               %d", t->zero2);
+	dvb_log("| zero                %d", t->zero);
 	dvb_log("| syntax              %d", t->syntax);
 	dvb_log("| transport_stream_id %d", t->id);
 	dvb_log("| current_next        %d", t->current_next);
diff --git a/lib/libdvbv5/descriptors/mgt.c b/lib/libdvbv5/descriptors/mgt.c
index b445294..4d34740 100644
--- a/lib/libdvbv5/descriptors/mgt.c
+++ b/lib/libdvbv5/descriptors/mgt.c
@@ -125,7 +125,7 @@ void atsc_table_mgt_print(struct dvb_v5_fe_parms *parms, struct atsc_table_mgt *
 	uint16_t tables = 0;
 
 	dvb_log("MGT");
-	atsc_table_header_print(parms, &mgt->header);
+	ATSC_TABLE_HEADER_PRINT(parms, mgt);
 	dvb_log("| tables           %d", mgt->tables);
 	while(table) {
                 dvb_log("|- type %04x    %d", table->type, table->pid);
diff --git a/lib/libdvbv5/descriptors/vct.c b/lib/libdvbv5/descriptors/vct.c
index 8606d7e..c0d531a 100644
--- a/lib/libdvbv5/descriptors/vct.c
+++ b/lib/libdvbv5/descriptors/vct.c
@@ -150,7 +150,7 @@ void atsc_table_vct_print(struct dvb_v5_fe_parms *parms, struct atsc_table_vct *
 	else
 		dvb_log("TVCT");
 
-	atsc_table_header_print(parms, &vct->header);
+	ATSC_TABLE_HEADER_PRINT(parms, vct);
 
 	dvb_log("|- #channels        %d", vct->num_channels_in_section);
 	dvb_log("|\\  channel_id");
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/7] libdvbv5: fix asprintf compile warning in dvbv5-scan
  2014-04-09 22:26 [PATCH 1/7] libdvbv5: reunite atsc_table_header and dvb_table_header André Roth
@ 2014-04-09 22:26 ` André Roth
  2014-04-09 22:26 ` [PATCH 3/7] libdvbv5: make crc32 public André Roth
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: André Roth @ 2014-04-09 22:26 UTC (permalink / raw)
  To: linux-media; +Cc: André Roth

Signed-off-by: André Roth <neolynx@gmail.com>
---
 utils/dvb/dvbv5-scan.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/utils/dvb/dvbv5-scan.c b/utils/dvb/dvbv5-scan.c
index 501b332..7eb3bf5 100644
--- a/utils/dvb/dvbv5-scan.c
+++ b/utils/dvb/dvbv5-scan.c
@@ -407,6 +407,7 @@ int main(int argc, char **argv)
 {
 	struct arguments args;
 	int err, lnb = -1,idx = -1;
+	int r;
 	const struct argp argp = {
 		.options = options,
 		.parser = parse_opt,
@@ -459,8 +460,12 @@ int main(int argc, char **argv)
 		return -1;
 	}
 
-	asprintf(&args.demux_dev,
+	r = asprintf(&args.demux_dev,
 		 "/dev/dvb/adapter%i/demux%i", args.adapter_dmx, args.demux);
+	if (r < 0) {
+		fprintf(stderr, "asprintf error\n" );
+		return -1;
+	}
 
 	if (verbose)
 		fprintf(stderr, "using demux '%s'\n", args.demux_dev);
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/7] libdvbv5: make crc32 public
  2014-04-09 22:26 [PATCH 1/7] libdvbv5: reunite atsc_table_header and dvb_table_header André Roth
  2014-04-09 22:26 ` [PATCH 2/7] libdvbv5: fix asprintf compile warning in dvbv5-scan André Roth
@ 2014-04-09 22:26 ` André Roth
  2014-04-09 22:26 ` [PATCH 4/7] libdvbv5: make dvb_table_filter_free public André Roth
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: André Roth @ 2014-04-09 22:26 UTC (permalink / raw)
  To: linux-media; +Cc: André Roth

applications reading dvb files might want to
check crc, therefore provide the crc32 function
in the header files.

Signed-off-by: André Roth <neolynx@gmail.com>
---
 lib/{ => include}/libdvbv5/crc32.h |    0
 lib/libdvbv5/Makefile.am           |    1 +
 lib/libdvbv5/crc32.c               |    2 +-
 lib/libdvbv5/dvb-scan.c            |    2 +-
 4 files changed, 3 insertions(+), 2 deletions(-)
 rename lib/{ => include}/libdvbv5/crc32.h (100%)

diff --git a/lib/libdvbv5/crc32.h b/lib/include/libdvbv5/crc32.h
similarity index 100%
rename from lib/libdvbv5/crc32.h
rename to lib/include/libdvbv5/crc32.h
diff --git a/lib/libdvbv5/Makefile.am b/lib/libdvbv5/Makefile.am
index df67544..ce3f806 100644
--- a/lib/libdvbv5/Makefile.am
+++ b/lib/libdvbv5/Makefile.am
@@ -6,6 +6,7 @@ otherinclude_HEADERS = \
 	../include/libdvbv5/dvb-demux.h \
 	../include/libdvbv5/dvb-v5-std.h \
 	../include/libdvbv5/dvb-file.h \
+	../include/libdvbv5/crc32.h \
 	../include/libdvbv5/dvb-frontend.h \
 	../include/libdvbv5/dvb-fe.h \
 	../include/libdvbv5/dvb-sat.h \
diff --git a/lib/libdvbv5/crc32.c b/lib/libdvbv5/crc32.c
index f14dbe1..69d0be3 100644
--- a/lib/libdvbv5/crc32.c
+++ b/lib/libdvbv5/crc32.c
@@ -19,7 +19,7 @@
  *
  */
 
-#include "crc32.h"
+#include <libdvbv5/crc32.h>
 
 static uint32_t crctab[256] = {
   0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
diff --git a/lib/libdvbv5/dvb-scan.c b/lib/libdvbv5/dvb-scan.c
index b0636b9..e522225 100644
--- a/lib/libdvbv5/dvb-scan.c
+++ b/lib/libdvbv5/dvb-scan.c
@@ -42,7 +42,7 @@
 #include <libdvbv5/dvb-frontend.h>
 #include <libdvbv5/descriptors.h>
 #include "parse_string.h"
-#include "crc32.h"
+#include <libdvbv5/crc32.h>
 #include <libdvbv5/dvb-fe.h>
 #include <libdvbv5/dvb-file.h>
 #include <libdvbv5/dvb-scan.h>
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 4/7] libdvbv5: make dvb_table_filter_free public
  2014-04-09 22:26 [PATCH 1/7] libdvbv5: reunite atsc_table_header and dvb_table_header André Roth
  2014-04-09 22:26 ` [PATCH 2/7] libdvbv5: fix asprintf compile warning in dvbv5-scan André Roth
  2014-04-09 22:26 ` [PATCH 3/7] libdvbv5: make crc32 public André Roth
@ 2014-04-09 22:26 ` André Roth
  2014-04-09 22:26 ` [PATCH 5/7] libdvbv5: cleanup table parsers André Roth
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: André Roth @ 2014-04-09 22:26 UTC (permalink / raw)
  To: linux-media; +Cc: André Roth

make dvb_table_filter_free public so it can be used by
applications.
fix potential double free.

Signed-off-by: André Roth <neolynx@gmail.com>
---
 lib/include/libdvbv5/dvb-scan.h |    2 ++
 lib/libdvbv5/dvb-scan.c         |   10 ++++++----
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/lib/include/libdvbv5/dvb-scan.h b/lib/include/libdvbv5/dvb-scan.h
index 206d409..f0af9d7 100644
--- a/lib/include/libdvbv5/dvb-scan.h
+++ b/lib/include/libdvbv5/dvb-scan.h
@@ -74,6 +74,8 @@ struct dvb_table_filter {
 	void *priv;
 };
 
+void dvb_table_filter_free(struct dvb_table_filter *sect);
+
 int dvb_read_section(struct dvb_v5_fe_parms *parms, int dmx_fd, unsigned char tid, uint16_t pid, void **table,
 		unsigned timeout);
 
diff --git a/lib/libdvbv5/dvb-scan.c b/lib/libdvbv5/dvb-scan.c
index e522225..d8b3953 100644
--- a/lib/libdvbv5/dvb-scan.c
+++ b/lib/libdvbv5/dvb-scan.c
@@ -158,10 +158,12 @@ static int dvb_parse_section_alloc(struct dvb_v5_fe_parms *parms,
 	return 0;
 }
 
-static void dvb_parse_section_free(struct dvb_table_filter *sect)
+void dvb_table_filter_free(struct dvb_table_filter *sect)
 {
-	if (sect->priv)
+	if (sect->priv) {
 		free(sect->priv);
+		sect->priv = NULL;
+	}
 }
 
 static int dvb_parse_section(struct dvb_v5_fe_parms *parms,
@@ -280,7 +282,7 @@ int dvb_read_sections(struct dvb_v5_fe_parms *parms, int dmx_fd,
 	if (!buf) {
 		dvb_perror("Out of memory");
 		dvb_dmx_stop(dmx_fd);
-		dvb_parse_section_free(sect);
+		dvb_table_filter_free(sect);
 		return -1;
 	}
 
@@ -327,7 +329,7 @@ int dvb_read_sections(struct dvb_v5_fe_parms *parms, int dmx_fd,
 	} while (!ret);
 	free(buf);
 	dvb_dmx_stop(dmx_fd);
-	dvb_parse_section_free(sect);
+	dvb_table_filter_free(sect);
 
 	if (ret > 0)
 		ret = 0;
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 5/7] libdvbv5: cleanup table parsers
  2014-04-09 22:26 [PATCH 1/7] libdvbv5: reunite atsc_table_header and dvb_table_header André Roth
                   ` (2 preceding siblings ...)
  2014-04-09 22:26 ` [PATCH 4/7] libdvbv5: make dvb_table_filter_free public André Roth
@ 2014-04-09 22:26 ` André Roth
  2014-04-09 22:26 ` [PATCH 6/7] libdvbv5: cleanup printing of tables and descriptors André Roth
  2014-04-09 22:27 ` [PATCH 7/7] libdvbv5: rename descriptor functions André Roth
  5 siblings, 0 replies; 7+ messages in thread
From: André Roth @ 2014-04-09 22:26 UTC (permalink / raw)
  To: linux-media; +Cc: André Roth

- make the code look similar
- check for correct table ID
- ignore null packets with ID 0x1fff
- return table length, or:
- return error code on error
- update / fix Copyrights

Signed-off-by: André Roth <neolynx@gmail.com>
---
 lib/include/libdvbv5/atsc_eit.h     |    1 -
 lib/include/libdvbv5/descriptors.h  |    1 +
 lib/include/libdvbv5/eit.h          |    3 +-
 lib/include/libdvbv5/mgt.h          |    1 -
 lib/include/libdvbv5/nit.h          |    2 +-
 lib/include/libdvbv5/pat.h          |    4 +-
 lib/include/libdvbv5/sdt.h          |    5 +-
 lib/include/libdvbv5/vct.h          |    1 -
 lib/libdvbv5/descriptors.c          |    9 +++-
 lib/libdvbv5/descriptors/atsc_eit.c |   35 +++++++------
 lib/libdvbv5/descriptors/cat.c      |   53 +++++++++++++------
 lib/libdvbv5/descriptors/eit.c      |   90 +++++++++++++++++++++------------
 lib/libdvbv5/descriptors/mgt.c      |   43 +++++++++-------
 lib/libdvbv5/descriptors/nit.c      |   71 ++++++++++++++------------
 lib/libdvbv5/descriptors/pat.c      |   73 ++++++++++++++++-----------
 lib/libdvbv5/descriptors/pmt.c      |   95 ++++++++++++++++++++++-------------
 lib/libdvbv5/descriptors/sdt.c      |   68 ++++++++++++++++++-------
 lib/libdvbv5/descriptors/vct.c      |   35 +++++++++----
 18 files changed, 374 insertions(+), 216 deletions(-)

diff --git a/lib/include/libdvbv5/atsc_eit.h b/lib/include/libdvbv5/atsc_eit.h
index 8b093de..93d9304 100644
--- a/lib/include/libdvbv5/atsc_eit.h
+++ b/lib/include/libdvbv5/atsc_eit.h
@@ -26,7 +26,6 @@
 #include <time.h>
 
 #include <libdvbv5/atsc_header.h>
-#include <libdvbv5/descriptors.h>
 
 #define ATSC_TABLE_EIT        0xCB
 
diff --git a/lib/include/libdvbv5/descriptors.h b/lib/include/libdvbv5/descriptors.h
index e81a05d..d08ab3e 100644
--- a/lib/include/libdvbv5/descriptors.h
+++ b/lib/include/libdvbv5/descriptors.h
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2011-2012 - Mauro Carvalho Chehab
+ * Copyright (c) 2012-2014 - 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
diff --git a/lib/include/libdvbv5/eit.h b/lib/include/libdvbv5/eit.h
index fb5ce33..c959537 100644
--- a/lib/include/libdvbv5/eit.h
+++ b/lib/include/libdvbv5/eit.h
@@ -27,7 +27,6 @@
 #include <time.h>
 
 #include <libdvbv5/header.h>
-#include <libdvbv5/descriptors.h>
 
 #define DVB_TABLE_EIT        0x4E
 #define DVB_TABLE_EIT_OTHER  0x4F
@@ -47,7 +46,7 @@ struct dvb_table_eit_event {
 	union {
 		uint16_t bitfield2;
 		struct {
-			uint16_t section_length:12;
+			uint16_t desc_length:12;
 			uint16_t free_CA_mode:1;
 			uint16_t running_status:3;
 		} __attribute__((packed));
diff --git a/lib/include/libdvbv5/mgt.h b/lib/include/libdvbv5/mgt.h
index cb8d63a..d67ad33 100644
--- a/lib/include/libdvbv5/mgt.h
+++ b/lib/include/libdvbv5/mgt.h
@@ -25,7 +25,6 @@
 #include <unistd.h> /* ssize_t */
 
 #include <libdvbv5/atsc_header.h>
-#include <libdvbv5/descriptors.h>
 
 #define ATSC_TABLE_MGT 0xC7
 
diff --git a/lib/include/libdvbv5/nit.h b/lib/include/libdvbv5/nit.h
index 7477bd6..fdea7a7 100644
--- a/lib/include/libdvbv5/nit.h
+++ b/lib/include/libdvbv5/nit.h
@@ -46,7 +46,7 @@ struct dvb_table_nit_transport {
 	union {
 		uint16_t bitfield;
 		struct {
-			uint16_t section_length:12;
+			uint16_t desc_length:12;
 			uint16_t reserved:4;
 		} __attribute__((packed));
 	} __attribute__((packed));
diff --git a/lib/include/libdvbv5/pat.h b/lib/include/libdvbv5/pat.h
index cd99d3e..eb4aeef 100644
--- a/lib/include/libdvbv5/pat.h
+++ b/lib/include/libdvbv5/pat.h
@@ -27,8 +27,8 @@
 
 #include <libdvbv5/header.h>
 
-#define DVB_TABLE_PAT      0
-#define DVB_TABLE_PAT_PID  0
+#define DVB_TABLE_PAT      0x00
+#define DVB_TABLE_PAT_PID  0x0000
 
 struct dvb_table_pat_program {
 	uint16_t service_id;
diff --git a/lib/include/libdvbv5/sdt.h b/lib/include/libdvbv5/sdt.h
index f1503ea..9684fbc 100644
--- a/lib/include/libdvbv5/sdt.h
+++ b/lib/include/libdvbv5/sdt.h
@@ -26,11 +26,10 @@
 #include <unistd.h> /* ssize_t */
 
 #include <libdvbv5/header.h>
-#include <libdvbv5/descriptors.h>
 
 #define DVB_TABLE_SDT      0x42
 #define DVB_TABLE_SDT2     0x46
-#define DVB_TABLE_SDT_PID  0x11
+#define DVB_TABLE_SDT_PID  0x0011
 
 struct dvb_table_sdt_service {
 	uint16_t service_id;
@@ -40,7 +39,7 @@ struct dvb_table_sdt_service {
 	union {
 		uint16_t bitfield;
 		struct {
-			uint16_t section_length:12;
+			uint16_t desc_length:12;
 			uint16_t free_CA_mode:1;
 			uint16_t running_status:3;
 		} __attribute__((packed));
diff --git a/lib/include/libdvbv5/vct.h b/lib/include/libdvbv5/vct.h
index 83bad06..10ac301 100644
--- a/lib/include/libdvbv5/vct.h
+++ b/lib/include/libdvbv5/vct.h
@@ -26,7 +26,6 @@
 #include <unistd.h> /* ssize_t */
 
 #include <libdvbv5/atsc_header.h>
-#include <libdvbv5/descriptors.h>
 
 #define ATSC_TABLE_TVCT     0xc8
 #define ATSC_TABLE_CVCT     0xc9
diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
index 6fd8691..54ce933 100644
--- a/lib/libdvbv5/descriptors.c
+++ b/lib/libdvbv5/descriptors.c
@@ -112,11 +112,16 @@ int dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		uint8_t desc_len  = ptr[1];
 		size_t size;
 
+		if (desc_type == 0xff ) {
+			dvb_logwarn("%s: stopping at invalid descriptor 0xff", __func__);
+			return 0;
+		}
+
 		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);
+			dvb_logerr("%s: short read of %zd/%d bytes parsing descriptor %#02x",
+				   __func__, endbuf - ptr, desc_len, desc_type);
 			return -1;
 		}
 
diff --git a/lib/libdvbv5/descriptors/atsc_eit.c b/lib/libdvbv5/descriptors/atsc_eit.c
index 286748c..2b446bb 100644
--- a/lib/libdvbv5/descriptors/atsc_eit.c
+++ b/lib/libdvbv5/descriptors/atsc_eit.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 - Andre Roth <neolynx@gmail.com>
+ * Copyright (c) 2013-2014 - 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
@@ -19,6 +19,7 @@
  */
 
 #include <libdvbv5/atsc_eit.h>
+#include <libdvbv5/descriptors.h>
 #include <libdvbv5/dvb-fe.h>
 
 ssize_t atsc_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
@@ -26,16 +27,22 @@ ssize_t atsc_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 {
 	const uint8_t *p = buf, *endbuf = buf + buflen - 4; /* minus CRC */;
 	struct atsc_table_eit_event **head;
+	size_t size;
 	int i = 0;
-	struct atsc_table_eit_event *last = NULL;
-	size_t size = offsetof(struct atsc_table_eit, event);
 
+	size = offsetof(struct atsc_table_eit, event);
 	if (p + size > endbuf) {
 		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
-			   size, endbuf - p);
+			   endbuf - p, size);
 		return -1;
 	}
 
+	if (buf[0] != ATSC_TABLE_EIT) {
+		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x",
+				__func__, buf[0], ATSC_TABLE_EIT);
+		return -2;
+	}
+
 	if (*table_length > 0) {
 		memcpy(eit, p, size);
 
@@ -45,7 +52,6 @@ ssize_t atsc_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 			head = &(*head)->next;
 	} else {
 		memcpy(eit, p, size);
-		*table_length = sizeof(struct atsc_table_eit);
 
 		eit->event = NULL;
 		head = &eit->event;
@@ -59,10 +65,14 @@ ssize_t atsc_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		size = offsetof(struct atsc_table_eit_event, descriptor);
 		if (p + size > endbuf) {
 			dvb_logerr("%s: short read %zd/%zd bytes", __func__,
-				   size, endbuf - p);
+				   endbuf - p, size);
 			return -2;
 		}
 		event = (struct atsc_table_eit_event *) malloc(sizeof(struct atsc_table_eit_event));
+		if (!event) {
+			dvb_logerr("%s: out of memory", __func__);
+			return -3;
+		}
 		memcpy(event, p, size);
 		p += size;
 
@@ -74,15 +84,13 @@ ssize_t atsc_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
                 atsc_time(event->start_time, &event->start);
 		event->source_id = eit->header.id;
 
-		if(!*head)
-			*head = event;
-		if(last)
-			last->next = event;
+		*head = event;
+		head = &(*head)->next;
 
 		size = event->title_length - 1;
 		if (p + size > endbuf) {
 			dvb_logerr("%s: short read %zd/%zd bytes", __func__,
-				   size, endbuf - p);
+				   endbuf - p, size);
 			return -3;
 		}
                 /* TODO: parse title */
@@ -92,7 +100,7 @@ ssize_t atsc_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		size = sizeof(union atsc_table_eit_desc_length);
 		if (p + size > endbuf) {
 			dvb_logerr("%s: short read %zd/%zd bytes", __func__,
-				   size, endbuf - p);
+				   endbuf - p, size);
 			return -4;
 		}
 		memcpy(&dl, p, size);
@@ -102,13 +110,12 @@ ssize_t atsc_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		size = dl.desc_length;
 		if (p + size > endbuf) {
 			dvb_logerr("%s: short read %zd/%zd bytes", __func__,
-				   size, endbuf - p);
+				   endbuf - p, size);
 			return -5;
 		}
 		dvb_parse_descriptors(parms, p, size, &event->descriptor);
 
 		p += size;
-		last = event;
 	}
 
 	*table_length = p - buf;
diff --git a/lib/libdvbv5/descriptors/cat.c b/lib/libdvbv5/descriptors/cat.c
index b7e51e2..04b9416 100644
--- a/lib/libdvbv5/descriptors/cat.c
+++ b/lib/libdvbv5/descriptors/cat.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 - Andre Roth <neolynx@gmail.com>
+ * Copyright (c) 2013-2014 - 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
@@ -23,37 +23,58 @@
 #include <libdvbv5/dvb-fe.h>
 
 ssize_t dvb_table_cat_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
-			ssize_t buflen, struct dvb_table_cat *cat, ssize_t *table_length)
+		ssize_t buflen, struct dvb_table_cat *cat, ssize_t *table_length)
 {
-	struct dvb_desc **head_desc = &cat->descriptor;
 	const uint8_t *p = buf, *endbuf = buf + buflen - 4;
+	struct dvb_desc **head_desc;
 	size_t size;
 
-	if (buf[0] != DVB_TABLE_CAT) {
-		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x", __func__, buf[0], DVB_TABLE_CAT);
-		*table_length = 0;
+	size = offsetof(struct dvb_table_cat, descriptor);
+	if (p + size > endbuf) {
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - p, size);
 		return -1;
 	}
 
+	if (buf[0] != DVB_TABLE_CAT) {
+		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x",
+				__func__, buf[0], DVB_TABLE_CAT);
+		return -2;
+	}
+
 	if (*table_length > 0) {
 		/* find end of current lists */
+		head_desc = &cat->descriptor;
 		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 -2;
+	} else {
+		head_desc = &cat->descriptor;
 	}
 
 	memcpy(cat, p, size);
 	p += size;
-	*table_length = sizeof(struct dvb_table_cat);
 
-	size = endbuf - p;
-	dvb_parse_descriptors(parms, p, size, head_desc);
+	size = cat->header.section_length + 3 - 4; /* plus header, minus CRC */
+	if (buf + size > endbuf) {
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - buf, size);
+		return -3;
+	}
+	endbuf = buf + size;
+
+	/* parse the descriptors */
+	if (endbuf > p) {
+		uint16_t desc_length = endbuf - p;
+		if (dvb_parse_descriptors(parms, p, desc_length,
+				      head_desc) != 0) {
+			return -4;
+		}
+		p += desc_length;
+	}
+
+	if (endbuf - p)
+		dvb_logwarn("%s: %zu spurious bytes at the end",
+			   __func__, endbuf - p);
 
 	*table_length = p - buf;
 	return p - buf;
diff --git a/lib/libdvbv5/descriptors/eit.c b/lib/libdvbv5/descriptors/eit.c
index 86e2905..5197491 100644
--- a/lib/libdvbv5/descriptors/eit.c
+++ b/lib/libdvbv5/descriptors/eit.c
@@ -1,6 +1,5 @@
 /*
- * Copyright (c) 2011-2012 - Mauro Carvalho Chehab
- * Copyright (c) 2012 - Andre Roth <neolynx@gmail.com>
+ * Copyright (c) 2012-2014 - 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
@@ -20,12 +19,32 @@
  */
 
 #include <libdvbv5/eit.h>
+#include <libdvbv5/descriptors.h>
 #include <libdvbv5/dvb-fe.h>
 
-ssize_t dvb_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ssize_t buflen, struct dvb_table_eit *eit, ssize_t *table_length)
+ssize_t dvb_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
+		ssize_t buflen, struct dvb_table_eit *eit, ssize_t *table_length)
 {
-	const uint8_t *p = buf;
+	const uint8_t *p = buf, *endbuf = buf + buflen - 4; /* minus CRC */
 	struct dvb_table_eit_event **head;
+	size_t size;
+
+	size = offsetof(struct dvb_table_eit, event);
+	if (p + size > endbuf) {
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - p, size);
+		return -1;
+	}
+
+	if ((buf[0] != DVB_TABLE_EIT && buf[0] != DVB_TABLE_EIT_OTHER) &&
+		!(buf[0] >= DVB_TABLE_EIT_SCHEDULE && buf[0] <= DVB_TABLE_EIT_SCHEDULE + 0xF) &&
+		!(buf[0] >= DVB_TABLE_EIT_SCHEDULE_OTHER && buf[0] <= DVB_TABLE_EIT_SCHEDULE_OTHER + 0xF)) {
+		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x, 0x%02x or between 0x%02x and 0x%02x or 0x%02x and 0x%02x",
+				__func__, buf[0], DVB_TABLE_EIT, DVB_TABLE_EIT_OTHER,
+				DVB_TABLE_EIT_SCHEDULE, DVB_TABLE_EIT_SCHEDULE + 0xF,
+				DVB_TABLE_EIT_SCHEDULE_OTHER, DVB_TABLE_EIT_SCHEDULE_OTHER + 0xF);
+		return -2;
+	}
 
 	if (*table_length > 0) {
 		memcpy(eit, p, sizeof(struct dvb_table_eit) - sizeof(eit->event));
@@ -39,7 +58,6 @@ ssize_t dvb_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ss
 			head = &(*head)->next;
 	} else {
 		memcpy(eit, p, sizeof(struct dvb_table_eit) - sizeof(eit->event));
-		*table_length = sizeof(struct dvb_table_eit);
 
 		bswap16(eit->transport_id);
 		bswap16(eit->network_id);
@@ -47,23 +65,20 @@ ssize_t dvb_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ss
 		eit->event = NULL;
 		head = &eit->event;
 	}
-	p += sizeof(struct dvb_table_eit) - sizeof(eit->event);
-
-	struct dvb_table_eit_event *last = NULL;
-	while ((uint8_t *) p < buf + buflen - 4) {
-		struct dvb_table_eit_event *event = (struct dvb_table_eit_event *) malloc(sizeof(struct dvb_table_eit_event));
-		memcpy(event, p, sizeof(struct dvb_table_eit_event) -
-				 sizeof(event->descriptor) -
-				 sizeof(event->next) -
-				 sizeof(event->start) -
-				 sizeof(event->duration) -
-				 sizeof(event->service_id));
-		p += sizeof(struct dvb_table_eit_event) -
-		     sizeof(event->descriptor) -
-		     sizeof(event->next) -
-		     sizeof(event->start) -
-		     sizeof(event->duration) -
-		     sizeof(event->service_id);
+	p += size;
+
+	/* get the event entries */
+	size = offsetof(struct dvb_table_eit_event, descriptor);
+	while (p + size <= endbuf) {
+		struct dvb_table_eit_event *event;
+
+		event = malloc(sizeof(struct dvb_table_eit_event));
+		if (!event) {
+			dvb_logerr("%s: out of memory", __func__);
+			return -3;
+		}
+		memcpy(event, p, size);
+		p += size;
 
 		bswap16(event->event_id);
 		bswap16(event->bitfield1);
@@ -77,18 +92,27 @@ ssize_t dvb_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ss
 
 		event->service_id = eit->header.id;
 
-		if(!*head)
-			*head = event;
-		if(last)
-			last->next = event;
-
-		/* get the descriptors for each program */
-		struct dvb_desc **head_desc = &event->descriptor;
-		dvb_parse_descriptors(parms, p, event->section_length, head_desc);
-
-		p += event->section_length;
-		last = event;
+		*head = event;
+		head = &(*head)->next;
+
+		/* parse the descriptors */
+		if (event->desc_length > 0) {
+			uint16_t desc_length = event->desc_length;
+			if (p + desc_length > endbuf) {
+				dvb_logwarn("%s: decsriptors short read %zd/%d bytes", __func__,
+					   endbuf - p, desc_length);
+				desc_length = endbuf - p;
+			}
+			if (dvb_parse_descriptors(parms, p, desc_length,
+					      &event->descriptor) != 0) {
+				return -4;
+			}
+			p += desc_length;
+		}
 	}
+	if (p < endbuf)
+		dvb_logwarn("%s: %zu spurious bytes at the end",
+			   __func__, endbuf - p);
 	*table_length = p - buf;
 	return p - buf;
 }
diff --git a/lib/libdvbv5/descriptors/mgt.c b/lib/libdvbv5/descriptors/mgt.c
index 4d34740..b12d586 100644
--- a/lib/libdvbv5/descriptors/mgt.c
+++ b/lib/libdvbv5/descriptors/mgt.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 - Andre Roth <neolynx@gmail.com>
+ * Copyright (c) 2013-2014 - 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
@@ -19,25 +19,36 @@
  */
 
 #include <libdvbv5/mgt.h>
+#include <libdvbv5/descriptors.h>
 #include <libdvbv5/dvb-fe.h>
 
 ssize_t atsc_table_mgt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		ssize_t buflen, struct atsc_table_mgt *mgt, ssize_t *table_length)
 {
 	const uint8_t *p = buf, *endbuf = buf + buflen - 4; /* minus CRC */
-	struct dvb_desc **head_desc;
 	struct atsc_table_mgt_table **head;
+	struct dvb_desc **head_desc;
+	size_t size;
 	int i = 0;
-	struct atsc_table_mgt_table *last = NULL;
-	size_t size = offsetof(struct atsc_table_mgt, table);
 
+	size = offsetof(struct atsc_table_mgt, table);
 	if (p + size > endbuf) {
 		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
-			   size, endbuf - p);
+			   endbuf - p, size);
 		return -1;
 	}
 
+	if (buf[0] != ATSC_TABLE_MGT) {
+		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x",
+				__func__, buf[0], ATSC_TABLE_MGT);
+		return -2;
+	}
+
 	if (*table_length > 0) {
+		memcpy(mgt, p, size);
+
+		bswap16(mgt->tables);
+
 		/* find end of curent lists */
 		head_desc = &mgt->descriptor;
 		while (*head_desc != NULL)
@@ -45,11 +56,8 @@ ssize_t atsc_table_mgt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		head = &mgt->table;
 		while (*head != NULL)
 			head = &(*head)->next;
-
-		/* FIXME: read current mgt->tables for loop below */
 	} else {
 		memcpy(mgt, p, size);
-		*table_length = sizeof(struct atsc_table_mgt);
 
 		bswap16(mgt->tables);
 
@@ -66,10 +74,14 @@ ssize_t atsc_table_mgt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		size = offsetof(struct atsc_table_mgt_table, descriptor);
 		if (p + size > endbuf) {
 			dvb_logerr("%s: short read %zd/%zd bytes", __func__,
-				   size, endbuf - p);
+				   endbuf - p, size);
 			return -2;
 		}
 		table = (struct atsc_table_mgt_table *) malloc(sizeof(struct atsc_table_mgt_table));
+		if (!table) {
+			dvb_logerr("%s: out of memory", __func__);
+			return -3;
+		}
 		memcpy(table, p, size);
 		p += size;
 
@@ -80,22 +92,19 @@ ssize_t atsc_table_mgt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		table->descriptor = NULL;
 		table->next = NULL;
 
-		if(!*head)
-			*head = table;
-		if(last)
-			last->next = table;
+		*head = table;
+		head = &(*head)->next;
 
 		/* get the descriptors for each table */
 		size = table->desc_length;
 		if (p + size > endbuf) {
 			dvb_logerr("%s: short read %zd/%zd bytes", __func__,
-				   size, endbuf - p);
+				   endbuf - p, size);
 			return -3;
 		}
 		dvb_parse_descriptors(parms, p, size, &table->descriptor);
 
 		p += size;
-		last = table;
 	}
 
 	/* TODO: parse MGT descriptors here into head_desc */
@@ -109,7 +118,7 @@ void atsc_table_mgt_free(struct atsc_table_mgt *mgt)
 	struct atsc_table_mgt_table *table = mgt->table;
 
 	dvb_free_descriptors((struct dvb_desc **) &mgt->descriptor);
-	while(table) {
+	while (table) {
 		struct atsc_table_mgt_table *tmp = table;
 
 		dvb_free_descriptors((struct dvb_desc **) &table->descriptor);
@@ -127,7 +136,7 @@ void atsc_table_mgt_print(struct dvb_v5_fe_parms *parms, struct atsc_table_mgt *
 	dvb_log("MGT");
 	ATSC_TABLE_HEADER_PRINT(parms, mgt);
 	dvb_log("| tables           %d", mgt->tables);
-	while(table) {
+	while (table) {
                 dvb_log("|- type %04x    %d", table->type, table->pid);
                 dvb_log("|  one          %d", table->one);
                 dvb_log("|  one2         %d", table->one2);
diff --git a/lib/libdvbv5/descriptors/nit.c b/lib/libdvbv5/descriptors/nit.c
index 7749ee1..aadebc0 100644
--- a/lib/libdvbv5/descriptors/nit.c
+++ b/lib/libdvbv5/descriptors/nit.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2011-2012 - Mauro Carvalho Chehab
- * Copyright (c) 2012 - Andre Roth <neolynx@gmail.com>
+ * Copyright (c) 2012-2014 - 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
@@ -26,50 +26,55 @@ ssize_t dvb_table_nit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 			ssize_t buflen, struct dvb_table_nit *nit, ssize_t *table_length)
 {
 	const uint8_t *p = buf, *endbuf = buf + buflen - 4;
-	struct dvb_desc **head_desc = &nit->descriptor;
-	struct dvb_table_nit_transport **head = &nit->transport;
+	struct dvb_table_nit_transport **head;
+	struct dvb_desc **head_desc;
 	size_t size;
 
+	size = offsetof(struct dvb_table_nit, descriptor);
+	if (p + size > endbuf) {
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - p, size);
+		return -1;
+	}
+
+	if (buf[0] != DVB_TABLE_NIT) {
+		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x",
+				__func__, buf[0], DVB_TABLE_NIT);
+		return -2;
+	}
+
 	if (*table_length > 0) {
 		struct dvb_table_nit *t;
 
 		/* find end of current lists */
+		head_desc = &nit->descriptor;
 		while (*head_desc != NULL)
 			head_desc = &(*head_desc)->next;
+		head = &nit->transport;
 		while (*head != NULL)
 			head = &(*head)->next;
 
-		size = offsetof(struct dvb_table_nit, descriptor);
-		if (p + size > endbuf) {
-			dvb_logerr("NIT table (cont) was truncated");
-			return -1;
-		}
 		p += size;
 		t = (struct dvb_table_nit *)buf;
 
 		bswap16(t->bitfield);
 		size = t->desc_length;
 	} else {
-		size = offsetof(struct dvb_table_nit, descriptor);
-		if (p + size > endbuf) {
-			dvb_logerr("NIT table was truncated while filling dvb_table_nit. Need %zu bytes, but has only %zu.",
-				   size, buflen);
-			return -2;
-		}
 		memcpy(nit, p, size);
 		p += size;
 
-		*table_length = sizeof(struct dvb_table_nit);
+		head = &nit->transport;
 
 		nit->descriptor = NULL;
 		nit->transport = NULL;
 
 		bswap16(nit->bitfield);
 		size = nit->desc_length;
+		head_desc = &nit->descriptor;
 	}
 	if (p + size > endbuf) {
-		dvb_logerr("NIT table was truncated while getting NIT descriptors. Need %zu bytes, but has only %zu.",
-			   size, endbuf - p);
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - p, size);
 		return -3;
 	}
 	dvb_parse_descriptors(parms, p, size, head_desc);
@@ -77,8 +82,8 @@ ssize_t dvb_table_nit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 
 	size = sizeof(union dvb_table_nit_transport_header);
 	if (p + size > endbuf) {
-		dvb_logerr("NIT table was truncated while getting NIT transports. Need %zu bytes, but has only %zu.",
-			   size, endbuf - p);
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - p, size);
 		return -4;
 	}
 	p += size;
@@ -89,7 +94,7 @@ ssize_t dvb_table_nit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 
 		transport = malloc(sizeof(struct dvb_table_nit_transport));
 		if (!transport) {
-			dvb_perror(__func__);
+			dvb_logerr("%s: out of memory", __func__);
 			return -5;
 		}
 		memcpy(transport, p, size);
@@ -104,20 +109,24 @@ ssize_t dvb_table_nit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		*head = transport;
 		head = &(*head)->next;
 
-		/* get the descriptors for each transport */
-		head_desc = &transport->descriptor;
-
-		if (p + transport->section_length > endbuf) {
-			dvb_logerr("NIT table was truncated while getting NIT transport descriptors. Need %u bytes, but has only %zu.",
-				   transport->section_length, endbuf - p);
-			return -6;
+		/* parse the descriptors */
+		if (transport->desc_length > 0) {
+			uint16_t desc_length = transport->desc_length;
+			if (p + desc_length > endbuf) {
+				dvb_logwarn("%s: decsriptors short read %zd/%d bytes", __func__,
+					   endbuf - p, desc_length);
+				desc_length = endbuf - p;
+			}
+			if (dvb_parse_descriptors(parms, p, desc_length,
+					      &transport->descriptor) != 0) {
+				return -6;
+			}
+			p += desc_length;
 		}
-		dvb_parse_descriptors(parms, p, transport->section_length, head_desc);
-		p += transport->section_length;
 	}
 	if (endbuf - p)
-		dvb_logerr("NIT table has %zu spurious bytes at the end.",
-			   endbuf - p);
+		dvb_logwarn("%s: %zu spurious bytes at the end",
+			   __func__, endbuf - p);
 	*table_length = p - buf;
 	return p - buf;
 }
diff --git a/lib/libdvbv5/descriptors/pat.c b/lib/libdvbv5/descriptors/pat.c
index 1bb7781..efa6811 100644
--- a/lib/libdvbv5/descriptors/pat.c
+++ b/lib/libdvbv5/descriptors/pat.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2011-2012 - Mauro Carvalho Chehab
- * Copyright (c) 2012 - Andre Roth <neolynx@gmail.com>
+ * Copyright (c) 2012-2014 - 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
@@ -26,64 +26,77 @@
 ssize_t dvb_table_pat_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 			ssize_t buflen, struct dvb_table_pat *pat, ssize_t *table_length)
 {
-	struct dvb_table_pat_program **head = &pat->program;
 	const uint8_t *p = buf, *endbuf = buf + buflen - 4;
+	struct dvb_table_pat_program **head;
 	size_t size;
 
+	size = offsetof(struct dvb_table_pat, programs);
+	if (p + size > endbuf) {
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - p, size);
+		return -1;
+	}
+
+	if (buf[0] != DVB_TABLE_PAT) {
+		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x",
+				__func__, buf[0], DVB_TABLE_PAT);
+		return -2;
+	}
+
 	if (*table_length > 0) {
 		/* find end of current list */
+		head = &pat->program;
 		while (*head != NULL)
 			head = &(*head)->next;
 	} else {
-		size = offsetof(struct dvb_table_pat, programs);
-		if (p + size > endbuf) {
-			dvb_logerr("PAT table was truncated. Need %zu bytes, but has only %zu.",
-					size, buflen);
-			return -1;
-		}
 		memcpy(pat, buf, size);
 		p += size;
 		pat->programs = 0;
 		pat->program = NULL;
+		head = &pat->program;
 	}
-	*table_length = sizeof(struct dvb_table_pat_program);
 
 	size = offsetof(struct dvb_table_pat_program, next);
 	while (p + size <= endbuf) {
-		struct dvb_table_pat_program *pgm;
+		struct dvb_table_pat_program *prog;
 
-		pgm = malloc(sizeof(struct dvb_table_pat_program));
-		if (!pgm) {
+		prog = malloc(sizeof(struct dvb_table_pat_program));
+		if (!prog) {
 			dvb_perror("Out of memory");
-			return -2;
+			return -3;
 		}
 
-		memcpy(pgm, p, size);
+		memcpy(prog, p, size);
 		p += size;
 
-		bswap16(pgm->service_id);
-		bswap16(pgm->bitfield);
+		bswap16(prog->service_id);
+
+		if (prog->pid == 0x1fff) { /* ignore null packets */
+			free(prog);
+			break;
+		}
+		bswap16(prog->bitfield);
 		pat->programs++;
 
-		pgm->next = NULL;
+		prog->next = NULL;
 
-		*head = pgm;
+		*head = prog;
 		head = &(*head)->next;
 	}
 	if (endbuf - p)
-		dvb_logerr("PAT table has %zu spurious bytes at the end.",
-			   endbuf - p);
+		dvb_logwarn("%s: %zu spurious bytes at the end",
+			   __func__, endbuf - p);
 	*table_length = p - buf;
 	return p - buf;
 }
 
 void dvb_table_pat_free(struct dvb_table_pat *pat)
 {
-	struct dvb_table_pat_program *pgm = pat->program;
+	struct dvb_table_pat_program *prog = pat->program;
 
-	while (pgm) {
-		struct dvb_table_pat_program *tmp = pgm;
-		pgm = pgm->next;
+	while (prog) {
+		struct dvb_table_pat_program *tmp = prog;
+		prog = prog->next;
 		free(tmp);
 	}
 	free(pat);
@@ -91,15 +104,15 @@ void dvb_table_pat_free(struct dvb_table_pat *pat)
 
 void dvb_table_pat_print(struct dvb_v5_fe_parms *parms, struct dvb_table_pat *pat)
 {
-	struct dvb_table_pat_program *pgm = pat->program;
+	struct dvb_table_pat_program *prog = pat->program;
 
-	dvb_log("PAT");
+	dvb_loginfo("PAT");
 	dvb_table_header_print(parms, &pat->header);
-	dvb_log("|\\ %d program%s", pat->programs, pat->programs != 1 ? "s" : "");
+	dvb_loginfo("|\\ %d program pid%s", pat->programs, pat->programs != 1 ? "s" : "");
 
-	while (pgm) {
-		dvb_log("|- program 0x%04x  ->  service 0x%04x", pgm->pid, pgm->service_id);
-		pgm = pgm->next;
+	while (prog) {
+		dvb_loginfo("|  pid 0x%04x: service 0x%04x", prog->pid, prog->service_id);
+		prog = prog->next;
 	}
 }
 
diff --git a/lib/libdvbv5/descriptors/pmt.c b/lib/libdvbv5/descriptors/pmt.c
index 52bfa29..e1f07f8 100644
--- a/lib/libdvbv5/descriptors/pmt.c
+++ b/lib/libdvbv5/descriptors/pmt.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2011-2012 - Mauro Carvalho Chehab
- * Copyright (c) 2012-2013 - Andre Roth <neolynx@gmail.com>
+ * Copyright (c) 2012-2014 - 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
@@ -29,46 +29,69 @@ ssize_t 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)
 {
 	const uint8_t *p = buf, *endbuf = buf + buflen - 4;
-	struct dvb_table_pmt_stream **head = &pmt->stream;
+	struct dvb_table_pmt_stream **head;
+	struct dvb_desc **head_desc;
 	size_t size;
 
-	if (buf[0] != DVB_TABLE_PMT) {
-		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x", __func__, buf[0], DVB_TABLE_PMT);
-		*table_length = 0;
+	size = offsetof(struct dvb_table_pmt, dvb_pmt_field_last);
+	if (p + size > endbuf) {
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - p, size);
 		return -1;
 	}
 
+	if (buf[0] != DVB_TABLE_PMT) {
+		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x",
+				__func__, buf[0], DVB_TABLE_PMT);
+		return -2;
+	}
+
 	if (*table_length > 0) {
+		memcpy(pmt, p, size);
+		bswap16(pmt->bitfield);
+		bswap16(pmt->bitfield2);
+
 		/* find end of current list */
+		head = &pmt->stream;
 		while (*head != NULL)
 			head = &(*head)->next;
+		head_desc = &pmt->descriptor;
+		while (*head_desc != NULL)
+			head_desc = &(*head_desc)->next;
 	} else {
-		size = offsetof(struct dvb_table_pmt, dvb_pmt_field_last);
-		if (p + size > endbuf) {
-			dvb_logerr("%s: short read %zd/%zd bytes", __func__,
-				   size, endbuf - p);
-			return -2;
-		}
 		memcpy(pmt, p, size);
-		p += size;
-
 		bswap16(pmt->bitfield);
 		bswap16(pmt->bitfield2);
+
 		pmt->descriptor = NULL;
 		pmt->stream = NULL;
 
-		/* parse the descriptors */
-		if (pmt->desc_length > 0 ) {
-			size = pmt->desc_length;
-			if (p + size > endbuf) {
-				dvb_logwarn("%s: decsriptors short read %zd/%zd bytes", __func__,
-					   size, endbuf - p);
-				size = endbuf - p;
-			}
-			dvb_parse_descriptors(parms, p, size,
-					      &pmt->descriptor);
-			p += size;
+		head = &pmt->stream;
+		head_desc = &pmt->descriptor;
+	}
+	p += size;
+
+	size = pmt->header.section_length + 3 - 4; /* plus header, minus CRC */
+	if (buf + size > endbuf) {
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - buf, size);
+		return -3;
+	}
+	endbuf = buf + size;
+
+	/* parse the descriptors */
+	if (pmt->desc_length > 0 ) {
+		uint16_t desc_length = pmt->desc_length;
+		if (p + desc_length > endbuf) {
+			dvb_logwarn("%s: decsriptors short read %d/%zd bytes", __func__,
+				   desc_length, endbuf - p);
+			desc_length = endbuf - p;
 		}
+		if (dvb_parse_descriptors(parms, p, desc_length,
+				      head_desc) != 0) {
+			return -3;
+		}
+		p += desc_length;
 	}
 
 	/* get the stream entries */
@@ -77,7 +100,10 @@ ssize_t dvb_table_pmt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		struct dvb_table_pmt_stream *stream;
 
 		stream = malloc(sizeof(struct dvb_table_pmt_stream));
-
+		if (!stream) {
+			dvb_logerr("%s: out of memory", __func__);
+			return -3;
+		}
 		memcpy(stream, p, size);
 		p += size;
 
@@ -91,16 +117,17 @@ ssize_t dvb_table_pmt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 
 		/* parse the descriptors */
 		if (stream->desc_length > 0) {
-			size = stream->desc_length;
-			if (p + size > endbuf) {
-				dvb_logwarn("%s: decsriptors short read %zd/%zd bytes", __func__,
-					   size, endbuf - p);
-				size = endbuf - p;
+			uint16_t desc_length = stream->desc_length;
+			if (p + desc_length > endbuf) {
+				dvb_logwarn("%s: decsriptors short read %zd/%d bytes", __func__,
+					   endbuf - p, desc_length);
+				desc_length = endbuf - p;
 			}
-			dvb_parse_descriptors(parms, p, size,
-					      &stream->descriptor);
-
-			p += size;
+			if (dvb_parse_descriptors(parms, p, desc_length,
+					      &stream->descriptor) != 0) {
+				return -4;
+			}
+			p += desc_length;
 		}
 	}
 	if (p < endbuf)
diff --git a/lib/libdvbv5/descriptors/sdt.c b/lib/libdvbv5/descriptors/sdt.c
index 4fb6826..8cee315 100644
--- a/lib/libdvbv5/descriptors/sdt.c
+++ b/lib/libdvbv5/descriptors/sdt.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2011-2012 - Mauro Carvalho Chehab
- * Copyright (c) 2012 - Andre Roth <neolynx@gmail.com>
+ * Copyright (c) 2012-2014 - 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
@@ -20,40 +20,64 @@
  */
 
 #include <libdvbv5/sdt.h>
+#include <libdvbv5/descriptors.h>
 #include <libdvbv5/dvb-fe.h>
 
 ssize_t dvb_table_sdt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 			ssize_t buflen, struct dvb_table_sdt *sdt, ssize_t *table_length)
 {
 	const uint8_t *p = buf, *endbuf = buf + buflen - 4;
-	struct dvb_table_sdt_service **head = &sdt->service;
-	size_t size = offsetof(struct dvb_table_sdt, service);
+	struct dvb_table_sdt_service **head;
+	size_t size;
+
+	size = offsetof(struct dvb_table_sdt, service);
+	if (p + size > endbuf) {
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - p, size);
+		return -1;
+	}
+
+	if (buf[0] != DVB_TABLE_SDT && buf[0] != DVB_TABLE_SDT2) {
+		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x or 0x%02x",
+				__func__, buf[0], DVB_TABLE_SDT, DVB_TABLE_SDT2);
+		return -2;
+	}
 
 	if (*table_length > 0) {
+		memcpy(sdt, p, size);
+		bswap16(sdt->network_id);
+
 		/* find end of curent list */
+		head = &sdt->service;
 		while (*head != NULL)
 			head = &(*head)->next;
 	} else {
-		if (p + size > endbuf) {
-			dvb_logerr("SDT table was truncated. Need %zu bytes, but has only %zu.",
-					size, buflen);
-			return -1;
-		}
 		memcpy(sdt, p, size);
-		*table_length = sizeof(struct dvb_table_sdt);
-
 		bswap16(sdt->network_id);
 
 		sdt->service = NULL;
+		head = &sdt->service;
 	}
 	p += size;
 
+	size = sdt->header.section_length + 3 - 4; /* plus header, minus CRC */
+	if (buf + size > endbuf) {
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - buf, size);
+		return -3;
+	}
+	endbuf = buf + size;
+
+	/* get the event entries */
 	size = offsetof(struct dvb_table_sdt_service, descriptor);
 	while (p + size <= endbuf) {
 		struct dvb_table_sdt_service *service;
 
 		service = malloc(sizeof(struct dvb_table_sdt_service));
-
+		if (!service) {
+			dvb_logerr("%s: out of memory", __func__);
+			return -5;
+		}
 		memcpy(service, p, size);
 		p += size;
 
@@ -65,15 +89,25 @@ ssize_t dvb_table_sdt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		*head = service;
 		head = &(*head)->next;
 
-		/* get the descriptors for each program */
-		dvb_parse_descriptors(parms, p, service->section_length,
-				      &service->descriptor);
+		/* parse the descriptors */
+		if (service->desc_length > 0) {
+			uint16_t desc_length = service->desc_length;
+			if (p + desc_length > endbuf) {
+				dvb_logwarn("%s: decsriptors short read %zd/%d bytes", __func__,
+					   endbuf - p, desc_length);
+				desc_length = endbuf - p;
+			}
+			if (dvb_parse_descriptors(parms, p, desc_length,
+					      &service->descriptor) != 0) {
+				return -4;
+			}
+			p += desc_length;
+		}
 
-		p += service->section_length;
 	}
 	if (endbuf - p)
-		dvb_logerr("SDT table has %zu spurious bytes at the end.",
-			   endbuf - p);
+		dvb_logwarn("%s: %zu spurious bytes at the end",
+			   __func__, endbuf - p);
 
 	*table_length = p - buf;
 	return p - buf;
diff --git a/lib/libdvbv5/descriptors/vct.c b/lib/libdvbv5/descriptors/vct.c
index c0d531a..39d44f4 100644
--- a/lib/libdvbv5/descriptors/vct.c
+++ b/lib/libdvbv5/descriptors/vct.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2013 - Mauro Carvalho Chehab <m.chehab@samsung.com>
- * Copyright (c) 2013 - Andre Roth <neolynx@gmail.com>
+ * Copyright (c) 2013-2014 - 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
@@ -20,6 +20,7 @@
  */
 
 #include <libdvbv5/vct.h>
+#include <libdvbv5/descriptors.h>
 #include <libdvbv5/dvb-fe.h>
 #include <parse_string.h>
 
@@ -27,27 +28,35 @@ ssize_t atsc_table_vct_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 			ssize_t buflen, struct atsc_table_vct *vct, ssize_t *table_length)
 {
 	const uint8_t *p = buf, *endbuf = buf + buflen - 4;
-	struct atsc_table_vct_channel **head = &vct->channel;
+	struct atsc_table_vct_channel **head;
+	size_t size;
 	int i, n;
-	size_t size = offsetof(struct atsc_table_vct, channel);
 
+	size = offsetof(struct atsc_table_vct, channel);
 	if (p + size > endbuf) {
-		dvb_logerr("VCT table was truncated. Need %zu bytes, but has only %zu.",
-			   size, buflen);
+		dvb_logerr("%s: short read %zd/%zd bytes", __func__,
+			   endbuf - p, size);
 		return -1;
 	}
 
+	if (buf[0] != ATSC_TABLE_TVCT && buf[0] != ATSC_TABLE_CVCT) {
+		dvb_logerr("%s: invalid marker 0x%02x, sould be 0x%02x or 0x%02x",
+				__func__, buf[0], ATSC_TABLE_TVCT, ATSC_TABLE_CVCT);
+		return -2;
+	}
+
 	if (*table_length > 0) {
 		/* find end of curent list */
+		head = &vct->channel;
 		while (*head != NULL)
 			head = &(*head)->next;
 	} else {
 		memcpy(vct, p, size);
 
-		*table_length = sizeof(struct atsc_table_vct);
-
 		vct->channel = NULL;
 		vct->descriptor = NULL;
+
+		head = &vct->channel;
 	}
 	p += size;
 
@@ -56,13 +65,17 @@ ssize_t atsc_table_vct_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		struct atsc_table_vct_channel *channel;
 
 		if (p + size > endbuf) {
-			dvb_logerr("VCT channel table is missing %d elements",
-				   vct->num_channels_in_section - n + 1);
+			dvb_logerr("%s: channel table is missing %d elements",
+				   __func__, vct->num_channels_in_section - n + 1);
 			vct->num_channels_in_section = n;
 			break;
 		}
 
 		channel = malloc(sizeof(struct atsc_table_vct_channel));
+		if (!channel) {
+			dvb_logerr("%s: out of memory", __func__);
+			return -3;
+		}
 
 		memcpy(channel, p, size);
 		p += size;
@@ -123,8 +136,8 @@ ssize_t atsc_table_vct_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 				      &vct->descriptor);
 	}
 	if (endbuf - p)
-		dvb_logerr("VCT table has %zu spurious bytes at the end.",
-			   endbuf - p);
+		dvb_logwarn("%s: %zu spurious bytes at the end",
+			   __func__, endbuf - p);
 	*table_length = p - buf;
 	return p - buf;
 }
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 6/7] libdvbv5: cleanup printing of tables and descriptors
  2014-04-09 22:26 [PATCH 1/7] libdvbv5: reunite atsc_table_header and dvb_table_header André Roth
                   ` (3 preceding siblings ...)
  2014-04-09 22:26 ` [PATCH 5/7] libdvbv5: cleanup table parsers André Roth
@ 2014-04-09 22:26 ` André Roth
  2014-04-09 22:27 ` [PATCH 7/7] libdvbv5: rename descriptor functions André Roth
  5 siblings, 0 replies; 7+ messages in thread
From: André Roth @ 2014-04-09 22:26 UTC (permalink / raw)
  To: linux-media; +Cc: André Roth

- use log info for table and descpritor printing
- cleanup 'out of memory' logs
- fix error condition in desc_ts_info

Signed-off-by: André Roth <neolynx@gmail.com>
---
 lib/include/libdvbv5/atsc_header.h                 |    2 +-
 lib/libdvbv5/descriptors.c                         |    4 +-
 lib/libdvbv5/descriptors/atsc_eit.c                |   18 ++++----
 lib/libdvbv5/descriptors/cat.c                     |    2 +-
 .../descriptors/desc_atsc_service_location.c       |   12 +++---
 lib/libdvbv5/descriptors/desc_ca.c                 |    6 +--
 lib/libdvbv5/descriptors/desc_ca_identifier.c      |    2 +-
 lib/libdvbv5/descriptors/desc_cable_delivery.c     |   12 +++---
 lib/libdvbv5/descriptors/desc_event_extended.c     |    2 +-
 lib/libdvbv5/descriptors/desc_event_short.c        |    6 +--
 lib/libdvbv5/descriptors/desc_extension.c          |    4 +-
 lib/libdvbv5/descriptors/desc_frequency_list.c     |    4 +-
 lib/libdvbv5/descriptors/desc_hierarchy.c          |    8 ++--
 lib/libdvbv5/descriptors/desc_isdbt_delivery.c     |    8 ++--
 lib/libdvbv5/descriptors/desc_language.c           |    2 +-
 lib/libdvbv5/descriptors/desc_logical_channel.c    |    8 ++--
 lib/libdvbv5/descriptors/desc_network_name.c       |    2 +-
 lib/libdvbv5/descriptors/desc_partial_reception.c  |    4 +-
 lib/libdvbv5/descriptors/desc_sat.c                |   14 +++---
 lib/libdvbv5/descriptors/desc_service.c            |    6 +--
 lib/libdvbv5/descriptors/desc_service_list.c       |    4 +-
 lib/libdvbv5/descriptors/desc_service_location.c   |    8 ++--
 lib/libdvbv5/descriptors/desc_t2_delivery.c        |   28 ++++++------
 .../descriptors/desc_terrestrial_delivery.c        |   26 +++++------
 lib/libdvbv5/descriptors/desc_ts_info.c            |   16 ++++---
 lib/libdvbv5/descriptors/eit.c                     |   26 +++++------
 lib/libdvbv5/descriptors/header.c                  |   22 +++++-----
 lib/libdvbv5/descriptors/mgt.c                     |   22 +++++-----
 lib/libdvbv5/descriptors/mpeg_es.c                 |   30 ++++++-------
 lib/libdvbv5/descriptors/mpeg_pes.c                |    2 +-
 lib/libdvbv5/descriptors/mpeg_ts.c                 |   38 ++++++++---------
 lib/libdvbv5/descriptors/nit.c                     |   17 ++++----
 lib/libdvbv5/descriptors/pat.c                     |    2 +-
 lib/libdvbv5/descriptors/sdt.c                     |   22 +++++-----
 lib/libdvbv5/descriptors/vct.c                     |   45 ++++++++++----------
 lib/libdvbv5/dvb-scan.c                            |    4 +-
 36 files changed, 222 insertions(+), 216 deletions(-)

diff --git a/lib/include/libdvbv5/atsc_header.h b/lib/include/libdvbv5/atsc_header.h
index 12e7379..96bfc11 100644
--- a/lib/include/libdvbv5/atsc_header.h
+++ b/lib/include/libdvbv5/atsc_header.h
@@ -34,7 +34,7 @@
 
 #define ATSC_TABLE_HEADER_PRINT(_parms, _table) \
 	dvb_table_header_print(_parms, &_table->header); \
-	dvb_log("| protocol_version %d", _table->protocol_version); \
+	dvb_loginfo("| protocol_version %d", _table->protocol_version); \
 
 
 #endif
diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
index 54ce933..539f824 100644
--- a/lib/libdvbv5/descriptors.c
+++ b/lib/libdvbv5/descriptors.c
@@ -178,7 +178,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);
+		dvb_loginfo("|        0x%02x: %s", desc->type, dvb_descriptors[desc->type].name);
 		print(parms, desc);
 		desc = desc->next;
 	}
@@ -1374,6 +1374,6 @@ void hexdump(struct dvb_v5_fe_parms *parms, const char *prefix, const unsigned c
 		for (i = strlen(hex); i < 49; i++)
 			strncat(spaces, " ", sizeof(spaces));
 		ascii[j] = '\0';
-		dvb_log("%s%s %s %s", prefix, hex, spaces, ascii);
+		dvb_loginfo("%s%s %s %s", prefix, hex, spaces, ascii);
 	}
 }
diff --git a/lib/libdvbv5/descriptors/atsc_eit.c b/lib/libdvbv5/descriptors/atsc_eit.c
index 2b446bb..985b055 100644
--- a/lib/libdvbv5/descriptors/atsc_eit.c
+++ b/lib/libdvbv5/descriptors/atsc_eit.c
@@ -138,7 +138,7 @@ void atsc_table_eit_free(struct atsc_table_eit *eit)
 
 void atsc_table_eit_print(struct dvb_v5_fe_parms *parms, struct atsc_table_eit *eit)
 {
-	dvb_log("EIT");
+	dvb_loginfo("EIT");
 	ATSC_TABLE_HEADER_PRINT(parms, eit);
 	const struct atsc_table_eit_event *event = eit->event;
 	uint16_t events = 0;
@@ -147,18 +147,18 @@ void atsc_table_eit_print(struct dvb_v5_fe_parms *parms, struct atsc_table_eit *
 		char start[255];
 
 		strftime(start, sizeof(start), "%F %T", &event->start);
-		dvb_log("|-  event %7d", event->event_id);
-		dvb_log("|   Source                %d", event->source_id);
-		dvb_log("|   Starttime             %d", event->start_time);
-		dvb_log("|   Start                 %s UTC", start);
-		dvb_log("|   Duration              %dh %dm %ds", event->duration / 3600, (event->duration % 3600) / 60, event->duration % 60);
-		dvb_log("|   ETM                   %d", event->etm);
-		dvb_log("|   title length          %d", event->title_length);
+		dvb_loginfo("|-  event %7d", event->event_id);
+		dvb_loginfo("|   Source                %d", event->source_id);
+		dvb_loginfo("|   Starttime             %d", event->start_time);
+		dvb_loginfo("|   Start                 %s UTC", start);
+		dvb_loginfo("|   Duration              %dh %dm %ds", event->duration / 3600, (event->duration % 3600) / 60, event->duration % 60);
+		dvb_loginfo("|   ETM                   %d", event->etm);
+		dvb_loginfo("|   title length          %d", event->title_length);
 		dvb_print_descriptors(parms, event->descriptor);
 		event = event->next;
 		events++;
 	}
-	dvb_log("|_  %d events", events);
+	dvb_loginfo("|_  %d events", events);
 }
 
 void atsc_time(const uint32_t start_time, struct tm *tm)
diff --git a/lib/libdvbv5/descriptors/cat.c b/lib/libdvbv5/descriptors/cat.c
index 04b9416..a8fb00b 100644
--- a/lib/libdvbv5/descriptors/cat.c
+++ b/lib/libdvbv5/descriptors/cat.c
@@ -88,7 +88,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_loginfo("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 a654adc..3f19e72 100644
--- a/lib/libdvbv5/descriptors/desc_atsc_service_location.c
+++ b/lib/libdvbv5/descriptors/desc_atsc_service_location.c
@@ -64,13 +64,13 @@ 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("|           pcr PID               %d", s_loc->pcr_pid);
-	dvb_log("|\\ elementary service - %d elementaries", s_loc->number_elements);
+	dvb_loginfo("|           pcr PID               %d", s_loc->pcr_pid);
+	dvb_loginfo("|\\ elementary service - %d elementaries", s_loc->number_elements);
 	for (i = 0; i < s_loc->number_elements; i++) {
-		dvb_log("|-  elementary %d", i);
-		dvb_log("|-      | stream type 0x%02x", el[i].stream_type);
-		dvb_log("|-      | PID         %d", el[i].elementary_pid);
-		dvb_log("|-      | Language    %c%c%c",
+		dvb_loginfo("|-  elementary %d", i);
+		dvb_loginfo("|-      | stream type 0x%02x", el[i].stream_type);
+		dvb_loginfo("|-      | PID         %d", el[i].elementary_pid);
+		dvb_loginfo("|-      | Language    %c%c%c",
 			el[i].ISO_639_language_code[0],
 			el[i].ISO_639_language_code[1],
 			el[i].ISO_639_language_code[2]);
diff --git a/lib/libdvbv5/descriptors/desc_ca.c b/lib/libdvbv5/descriptors/desc_ca.c
index 791bda2..fa18814 100644
--- a/lib/libdvbv5/descriptors/desc_ca.c
+++ b/lib/libdvbv5/descriptors/desc_ca.c
@@ -48,9 +48,9 @@ int dvb_desc_ca_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct d
 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             0x%04x", d->ca_id);
-	dvb_log("|           ca_pid            0x%04x", d->ca_pid);
-	dvb_log("|           privdata length   %d", d->privdata_len);
+	dvb_loginfo("|           ca_id             0x%04x", d->ca_id);
+	dvb_loginfo("|           ca_pid            0x%04x", d->ca_pid);
+	dvb_loginfo("|           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 3102d01..23c8e89 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            0x%04x", i, d->caids[i]);
+		dvb_loginfo("|           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 2ba0ce6..852c79e 100644
--- a/lib/libdvbv5/descriptors/desc_cable_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_cable_delivery.c
@@ -41,12 +41,12 @@ int dvb_desc_cable_delivery_init(struct dvb_v5_fe_parms *parms, const uint8_t *b
 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("|           length            %d", cable->length);
-	dvb_log("|           frequency         %d", cable->frequency);
-	dvb_log("|           fec outer         %d", cable->fec_outer);
-	dvb_log("|           modulation        %d", cable->modulation);
-	dvb_log("|           symbol_rate       %d", cable->symbol_rate);
-	dvb_log("|           fec inner         %d", cable->fec_inner);
+	dvb_loginfo("|           length            %d", cable->length);
+	dvb_loginfo("|           frequency         %d", cable->frequency);
+	dvb_loginfo("|           fec outer         %d", cable->fec_outer);
+	dvb_loginfo("|           modulation        %d", cable->modulation);
+	dvb_loginfo("|           symbol_rate       %d", cable->symbol_rate);
+	dvb_loginfo("|           fec inner         %d", cable->fec_inner);
 }
 
 const unsigned dvbc_fec_table[] = {
diff --git a/lib/libdvbv5/descriptors/desc_event_extended.c b/lib/libdvbv5/descriptors/desc_event_extended.c
index 346a71c..d0865f9 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("|           '%s'", event->text);
+	dvb_loginfo("|           '%s'", event->text);
 }
 
diff --git a/lib/libdvbv5/descriptors/desc_event_short.c b/lib/libdvbv5/descriptors/desc_event_short.c
index e9d7bd7..535e656 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("|           sescription   '%s'", event->text);
+	dvb_loginfo("|           name          '%s'", event->name);
+	dvb_loginfo("|           language      '%s'", event->language);
+	dvb_loginfo("|           sescription   '%s'", event->text);
 }
 
diff --git a/lib/libdvbv5/descriptors/desc_extension.c b/lib/libdvbv5/descriptors/desc_extension.c
index 0aaeba8..7d9337c 100644
--- a/lib/libdvbv5/descriptors/desc_extension.c
+++ b/lib/libdvbv5/descriptors/desc_extension.c
@@ -138,7 +138,7 @@ int extension_descriptor_init(struct dvb_v5_fe_parms *parms,
 			break;
 		/* fall through */
 	case 3:
-		dvb_log("%sextension descriptor %s type 0x%02x, size %d",
+		dvb_logwarn("%sextension descriptor %s type 0x%02x, size %d",
 			dvb_ext_descriptors[desc_type].init ? "" : "Not handled ",
 			dvb_ext_descriptors[desc_type].name, desc_type, desc_len);
 		hexdump(parms, "content: ", p, desc_len);
@@ -180,7 +180,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("|           descriptor %s type 0x%02x",
+	dvb_loginfo("|           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 a9a3b9e..5b235d4 100644
--- a/lib/libdvbv5/descriptors/desc_frequency_list.c
+++ b/lib/libdvbv5/descriptors/desc_frequency_list.c
@@ -59,11 +59,11 @@ int dvb_desc_frequency_list_init(struct dvb_v5_fe_parms *parms, const uint8_t *b
 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("|           type: %d", d->freq_type);
+	dvb_loginfo("|           type: %d", d->freq_type);
 	int i = 0;
 
 	for (i = 0; i < d->frequencies; i++) {
-		dvb_log("|           frequency : %u", d->frequency[i]);
+		dvb_loginfo("|           frequency : %u", d->frequency[i]);
 	}
 }
 
diff --git a/lib/libdvbv5/descriptors/desc_hierarchy.c b/lib/libdvbv5/descriptors/desc_hierarchy.c
index 17b3699..773068f 100644
--- a/lib/libdvbv5/descriptors/desc_hierarchy.c
+++ b/lib/libdvbv5/descriptors/desc_hierarchy.c
@@ -35,9 +35,9 @@ int dvb_desc_hierarchy_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, s
 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("|           type           %d", hierarchy->hierarchy_type);
-	dvb_log("|           layer          %d", hierarchy->layer);
-	dvb_log("|           embedded_layer %d", hierarchy->embedded_layer);
-	dvb_log("|           channel        %d", hierarchy->channel);
+	dvb_loginfo("|           type           %d", hierarchy->hierarchy_type);
+	dvb_loginfo("|           layer          %d", hierarchy->layer);
+	dvb_loginfo("|           embedded_layer %d", hierarchy->embedded_layer);
+	dvb_loginfo("|           channel        %d", hierarchy->channel);
 }
 
diff --git a/lib/libdvbv5/descriptors/desc_isdbt_delivery.c b/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
index 336ca85..e25ce46 100644
--- a/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_isdbt_delivery.c
@@ -83,14 +83,14 @@ 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("|           transmission mode %s (%d)",
+	dvb_loginfo("|           transmission mode %s (%d)",
 		tm_name[d->transmission_mode], d->transmission_mode);
-	dvb_log("|           guard interval    %s (%d)",
+	dvb_loginfo("|           guard interval    %s (%d)",
 		interval_name[d->guard_interval], d->guard_interval);
-	dvb_log("|           area code         %d", d->area_code);
+	dvb_loginfo("|           area code         %d", d->area_code);
 
 	for (i = 0; i < d->num_freqs; i++) {
-		dvb_log("|           frequency[%d]      %ld Hz", i, d->frequency[i] * 1000000l / 7);
+		dvb_loginfo("|           frequency[%d]      %ld Hz", i, d->frequency[i] * 1000000l / 7);
 	}
 }
 
diff --git a/lib/libdvbv5/descriptors/desc_language.c b/lib/libdvbv5/descriptors/desc_language.c
index 7504dd5..617fcc7 100644
--- a/lib/libdvbv5/descriptors/desc_language.c
+++ b/lib/libdvbv5/descriptors/desc_language.c
@@ -37,6 +37,6 @@ int dvb_desc_language_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, st
 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_loginfo("|           lang: %s (type: %d)", lang->language, lang->audio_type);
 }
 
diff --git a/lib/libdvbv5/descriptors/desc_logical_channel.c b/lib/libdvbv5/descriptors/desc_logical_channel.c
index 7137c57..99a4507 100644
--- a/lib/libdvbv5/descriptors/desc_logical_channel.c
+++ b/lib/libdvbv5/descriptors/desc_logical_channel.c
@@ -36,7 +36,7 @@ int dvb_desc_logical_channel_init(struct dvb_v5_fe_parms *parms,
 
 	d->lcn = malloc(d->length);
 	if (!d->lcn) {
-		dvb_perror("Out of memory!");
+		dvb_logerr("%s: out of memory", __func__);
 		return -1;
 	}
 
@@ -60,9 +60,9 @@ void dvb_desc_logical_channel_print(struct dvb_v5_fe_parms *parms, const struct
 	len = d->length / sizeof(d->lcn);
 
 	for (i = 0; i < len; i++) {
-		dvb_log("|           service ID[%d]     %d", i, d->lcn[i].service_id);
-		dvb_log("|           LCN             %d", d->lcn[i].logical_channel_number);
-		dvb_log("|           visible service %d", d->lcn[i].visible_service_flag);
+		dvb_loginfo("|           service ID[%d]     %d", i, d->lcn[i].service_id);
+		dvb_loginfo("|           LCN             %d", d->lcn[i].logical_channel_number);
+		dvb_loginfo("|           visible service %d", d->lcn[i].visible_service_flag);
 	}
 }
 
diff --git a/lib/libdvbv5/descriptors/desc_network_name.c b/lib/libdvbv5/descriptors/desc_network_name.c
index 0fa456f..a34a27f 100644
--- a/lib/libdvbv5/descriptors/desc_network_name.c
+++ b/lib/libdvbv5/descriptors/desc_network_name.c
@@ -42,7 +42,7 @@ void dvb_desc_network_name_print(struct dvb_v5_fe_parms *parms, const struct dvb
 {
 	const struct dvb_desc_network_name *net = (const struct dvb_desc_network_name *) desc;
 
-	dvb_log("|           network name: '%s'", net->network_name);
+	dvb_loginfo("|           network name: '%s'", net->network_name);
 }
 
 void dvb_desc_network_name_free(struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_partial_reception.c b/lib/libdvbv5/descriptors/desc_partial_reception.c
index 0e4d25c..390080c 100644
--- a/lib/libdvbv5/descriptors/desc_partial_reception.c
+++ b/lib/libdvbv5/descriptors/desc_partial_reception.c
@@ -33,7 +33,7 @@ int 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!");
+		dvb_logerr("%s: out of memory", __func__);
 		return -1;
 	}
 
@@ -62,6 +62,6 @@ void isdb_desc_partial_reception_print(struct dvb_v5_fe_parms *parms, const stru
 	len = d->length / sizeof(d->partial_reception);
 
 	for (i = 0; i < len; i++) {
-		dvb_log("|           service ID[%d]     %d", i, d->partial_reception[i].service_id);
+		dvb_loginfo("|           service ID[%d]     %d", i, d->partial_reception[i].service_id);
 	}
 }
diff --git a/lib/libdvbv5/descriptors/desc_sat.c b/lib/libdvbv5/descriptors/desc_sat.c
index 5494799..f7fb8f1 100644
--- a/lib/libdvbv5/descriptors/desc_sat.c
+++ b/lib/libdvbv5/descriptors/desc_sat.c
@@ -57,13 +57,13 @@ void dvb_desc_sat_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *de
 			pol = 'R';
 			break;
 	}
-	dvb_log("|           modulation_system %s", sat->modulation_system ? "DVB-S2" : "DVB-S");
-	dvb_log("|           frequency         %d %c", sat->frequency, pol);
-	dvb_log("|           symbol_rate       %d", sat->symbol_rate);
-	dvb_log("|           fec               %d", sat->fec);
-	dvb_log("|           modulation_type   %d", sat->modulation_type);
-	dvb_log("|           roll_off          %d", sat->roll_off);
-	dvb_log("|           orbit             %.1f %c", (float) sat->orbit / 10.0, sat->west_east ? 'E' : 'W');
+	dvb_loginfo("|           modulation_system %s", sat->modulation_system ? "DVB-S2" : "DVB-S");
+	dvb_loginfo("|           frequency         %d %c", sat->frequency, pol);
+	dvb_loginfo("|           symbol_rate       %d", sat->symbol_rate);
+	dvb_loginfo("|           fec               %d", sat->fec);
+	dvb_loginfo("|           modulation_type   %d", sat->modulation_type);
+	dvb_loginfo("|           roll_off          %d", sat->roll_off);
+	dvb_loginfo("|           orbit             %.1f %c", (float) sat->orbit / 10.0, sat->west_east ? 'E' : 'W');
 }
 
 const unsigned dvbs_dvbc_dvbs_freq_inner[] = {
diff --git a/lib/libdvbv5/descriptors/desc_service.c b/lib/libdvbv5/descriptors/desc_service.c
index 7289219..069317a 100644
--- a/lib/libdvbv5/descriptors/desc_service.c
+++ b/lib/libdvbv5/descriptors/desc_service.c
@@ -62,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_loginfo("|           service type  %d", service->service_type);
+	dvb_loginfo("|           provider      '%s'", service->provider);
+	dvb_loginfo("|           name          '%s'", service->name);
 }
 
diff --git a/lib/libdvbv5/descriptors/desc_service_list.c b/lib/libdvbv5/descriptors/desc_service_list.c
index 3e7e603..4cd4018 100644
--- a/lib/libdvbv5/descriptors/desc_service_list.c
+++ b/lib/libdvbv5/descriptors/desc_service_list.c
@@ -48,8 +48,8 @@ void dvb_desc_service_list_print(struct dvb_v5_fe_parms *parms, const struct dvb
 	/*const struct dvb_desc_service_list *slist = (const struct dvb_desc_service_list *) desc;*/
 	/*int i = 0;*/
 	/*while(slist->services[i].service_id != 0) {*/
-		/*dvb_log("|           service id   : '%d'", slist->services[i].service_id);*/
-		/*dvb_log("|           service type : '%d'", slist->services[i].service_type);*/
+		/*dvb_loginfo("|           service id   : '%d'", slist->services[i].service_id);*/
+		/*dvb_loginfo("|           service type : '%d'", slist->services[i].service_type);*/
 		/*++i;*/
 	/*}*/
 }
diff --git a/lib/libdvbv5/descriptors/desc_service_location.c b/lib/libdvbv5/descriptors/desc_service_location.c
index 3a571fd..95cb342 100644
--- a/lib/libdvbv5/descriptors/desc_service_location.c
+++ b/lib/libdvbv5/descriptors/desc_service_location.c
@@ -65,11 +65,11 @@ void dvb_desc_service_location_print(struct dvb_v5_fe_parms *parms, const struct
 	struct dvb_desc_service_location_element *element = service_location->element;
 	int i;
 
-	dvb_log("|    pcr pid      %d", service_location->pcr_pid);
-	dvb_log("|    streams:");
+	dvb_loginfo("|    pcr pid      %d", service_location->pcr_pid);
+	dvb_loginfo("|    streams:");
 	for (i = 0; i < service_location->elements; i++)
-		dvb_log("|      pid %d, type %d: %s", element[i].elementary_pid, element[i].stream_type, element[i].language);
-	dvb_log("| 	%d elements", service_location->elements);
+		dvb_loginfo("|      pid %d, type %d: %s", element[i].elementary_pid, element[i].stream_type, element[i].language);
+	dvb_loginfo("| 	%d elements", service_location->elements);
 }
 
 void dvb_desc_service_location_free(struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/desc_t2_delivery.c b/lib/libdvbv5/descriptors/desc_t2_delivery.c
index 0d5cab6..498c707 100644
--- a/lib/libdvbv5/descriptors/desc_t2_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_t2_delivery.c
@@ -66,7 +66,7 @@ int dvb_desc_t2_delivery_init(struct dvb_v5_fe_parms *parms,
 	d->centre_frequency = calloc(d->frequency_loop_length,
 				     sizeof(*d->centre_frequency));
 	if (!d->centre_frequency) {
-		dvb_perror("Out of memory");
+		dvb_logerr("%s: out of memory", __func__);
 		return -3;
 	}
 
@@ -81,7 +81,7 @@ int 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");
+		dvb_logerr("%s: out of memory", __func__);
 		return -4;
 	}
 	memcpy(d->subcell, p, sizeof(*d->subcell) * d->subcel_info_loop_length);
@@ -98,26 +98,26 @@ void dvb_desc_t2_delivery_print(struct dvb_v5_fe_parms *parms,
 	const struct dvb_desc_t2_delivery *d = desc;
 	int i;
 
-	dvb_log("|           plp_id                    %d", d->plp_id);
-	dvb_log("|           system_id                 %d", d->system_id);
+	dvb_loginfo("|           plp_id                    %d", d->plp_id);
+	dvb_loginfo("|           system_id                 %d", d->system_id);
 
 	if (ext->length - 1 <= 4)
 		return;
 
-	dvb_log("|           tfs_flag                  %d", d->tfs_flag);
-	dvb_log("|           other_frequency_flag      %d", d->other_frequency_flag);
-	dvb_log("|           transmission_mode         %d", d->transmission_mode);
-	dvb_log("|           guard_interval            %d", d->guard_interval);
-	dvb_log("|           reserved                  %d", d->reserved);
-	dvb_log("|           bandwidth                 %d", d->bandwidth);
-	dvb_log("|           SISO MISO                 %d", d->SISO_MISO);
+	dvb_loginfo("|           tfs_flag                  %d", d->tfs_flag);
+	dvb_loginfo("|           other_frequency_flag      %d", d->other_frequency_flag);
+	dvb_loginfo("|           transmission_mode         %d", d->transmission_mode);
+	dvb_loginfo("|           guard_interval            %d", d->guard_interval);
+	dvb_loginfo("|           reserved                  %d", d->reserved);
+	dvb_loginfo("|           bandwidth                 %d", d->bandwidth);
+	dvb_loginfo("|           SISO MISO                 %d", d->SISO_MISO);
 
 	for (i = 0; i < d->frequency_loop_length; i++)
-		dvb_log("|           centre frequency[%d]   %d", i, d->centre_frequency[i]);
+		dvb_loginfo("|           centre frequency[%d]   %d", i, d->centre_frequency[i]);
 
 	for (i = 0; i < d->subcel_info_loop_length; i++) {
-		dvb_log("|           cell_id_extension[%d]  %d", i, d->subcell[i].cell_id_extension);
-		dvb_log("|           transposer frequency   %d", d->subcell[i].transposer_frequency);
+		dvb_loginfo("|           cell_id_extension[%d]  %d", i, d->subcell[i].cell_id_extension);
+		dvb_loginfo("|           transposer frequency   %d", d->subcell[i].transposer_frequency);
 	}
 }
 
diff --git a/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c b/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
index 8b6a92d..8df1a53 100644
--- a/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
+++ b/lib/libdvbv5/descriptors/desc_terrestrial_delivery.c
@@ -39,19 +39,19 @@ int dvb_desc_terrestrial_delivery_init(struct dvb_v5_fe_parms *parms, const uint
 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("|           length                %d", tdel->length);
-	dvb_log("|           centre frequency      %d", tdel->centre_frequency * 10);
-	dvb_log("|           mpe_fec_indicator     %d", tdel->mpe_fec_indicator);
-	dvb_log("|           time_slice_indicator  %d", tdel->time_slice_indicator);
-	dvb_log("|           priority              %d", tdel->priority);
-	dvb_log("|           bandwidth             %d", tdel->bandwidth);
-	dvb_log("|           code_rate_hp_stream   %d", tdel->code_rate_hp_stream);
-	dvb_log("|           hierarchy_information %d", tdel->hierarchy_information);
-	dvb_log("|           constellation         %d", tdel->constellation);
-	dvb_log("|           other_frequency_flag  %d", tdel->other_frequency_flag);
-	dvb_log("|           transmission_mode     %d", tdel->transmission_mode);
-	dvb_log("|           guard_interval        %d", tdel->guard_interval);
-	dvb_log("|           code_rate_lp_stream   %d", tdel->code_rate_lp_stream);
+	dvb_loginfo("|           length                %d", tdel->length);
+	dvb_loginfo("|           centre frequency      %d", tdel->centre_frequency * 10);
+	dvb_loginfo("|           mpe_fec_indicator     %d", tdel->mpe_fec_indicator);
+	dvb_loginfo("|           time_slice_indicator  %d", tdel->time_slice_indicator);
+	dvb_loginfo("|           priority              %d", tdel->priority);
+	dvb_loginfo("|           bandwidth             %d", tdel->bandwidth);
+	dvb_loginfo("|           code_rate_hp_stream   %d", tdel->code_rate_hp_stream);
+	dvb_loginfo("|           hierarchy_information %d", tdel->hierarchy_information);
+	dvb_loginfo("|           constellation         %d", tdel->constellation);
+	dvb_loginfo("|           other_frequency_flag  %d", tdel->other_frequency_flag);
+	dvb_loginfo("|           transmission_mode     %d", tdel->transmission_mode);
+	dvb_loginfo("|           guard_interval        %d", tdel->guard_interval);
+	dvb_loginfo("|           code_rate_lp_stream   %d", tdel->code_rate_lp_stream);
 }
 
 const unsigned dvbt_bw[] = {
diff --git a/lib/libdvbv5/descriptors/desc_ts_info.c b/lib/libdvbv5/descriptors/desc_ts_info.c
index 7a6e520..75501af 100644
--- a/lib/libdvbv5/descriptors/desc_ts_info.c
+++ b/lib/libdvbv5/descriptors/desc_ts_info.c
@@ -49,8 +49,10 @@ int dvb_desc_ts_info_init(struct dvb_v5_fe_parms *parms,
 	t = &d->transmission_type;
 
 	d->service_id = malloc(sizeof(*d->service_id) * t->num_of_service);
-	if (!d->service_id)
-		dvb_perror("Out of memory!");
+	if (!d->service_id) {
+		dvb_logerr("%s: out of memory", __func__);
+		return -1;
+	}
 
 	memcpy(d->service_id, p, sizeof(*d->service_id) * t->num_of_service);
 
@@ -69,13 +71,13 @@ void dvb_desc_ts_info_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc
 
 	t = &d->transmission_type;
 
-	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);
-	dvb_log("|           transmission type %s", d->ts_name_emph);
+	dvb_loginfo("|           remote key ID     %d", d->remote_control_key_id);
+	dvb_loginfo("|           name              %s", d->ts_name);
+	dvb_loginfo("|           emphasis name     %s", d->ts_name_emph);
+	dvb_loginfo("|           transmission type %s", d->ts_name_emph);
 
 	for (i = 0; i < t->num_of_service; i++)
-		dvb_log("|           service ID[%d]     %d", i, d->service_id[i]);
+		dvb_loginfo("|           service ID[%d]     %d", i, d->service_id[i]);
 }
 
 void dvb_desc_ts_info_free(struct dvb_desc *desc)
diff --git a/lib/libdvbv5/descriptors/eit.c b/lib/libdvbv5/descriptors/eit.c
index 5197491..d66d492 100644
--- a/lib/libdvbv5/descriptors/eit.c
+++ b/lib/libdvbv5/descriptors/eit.c
@@ -131,29 +131,29 @@ void dvb_table_eit_free(struct dvb_table_eit *eit)
 
 void dvb_table_eit_print(struct dvb_v5_fe_parms *parms, struct dvb_table_eit *eit)
 {
-	dvb_log("EIT");
+	dvb_loginfo("EIT");
 	dvb_table_header_print(parms, &eit->header);
-	dvb_log("|- transport_id       %d", eit->transport_id);
-	dvb_log("|- network_id         %d", eit->network_id);
-	dvb_log("|- last segment       %d", eit->last_segment);
-	dvb_log("|- last table         %d", eit->last_table_id);
-	dvb_log("|\\  event_id");
+	dvb_loginfo("|- transport_id       %d", eit->transport_id);
+	dvb_loginfo("|- network_id         %d", eit->network_id);
+	dvb_loginfo("|- last segment       %d", eit->last_segment);
+	dvb_loginfo("|- last table         %d", eit->last_table_id);
+	dvb_loginfo("|\\  event_id");
 	const struct dvb_table_eit_event *event = eit->event;
 	uint16_t events = 0;
 	while (event) {
 		char start[255];
 		strftime(start, sizeof(start), "%F %T", &event->start);
-		dvb_log("|- %7d", event->event_id);
-		dvb_log("|   Service               %d", event->service_id);
-		dvb_log("|   Start                 %s UTC", start);
-		dvb_log("|   Duration              %dh %dm %ds", event->duration / 3600, (event->duration % 3600) / 60, event->duration % 60);
-		dvb_log("|   free CA mode          %d", event->free_CA_mode);
-		dvb_log("|   running status        %d: %s", event->running_status, dvb_eit_running_status_name[event->running_status] );
+		dvb_loginfo("|- %7d", event->event_id);
+		dvb_loginfo("|   Service               %d", event->service_id);
+		dvb_loginfo("|   Start                 %s UTC", start);
+		dvb_loginfo("|   Duration              %dh %dm %ds", event->duration / 3600, (event->duration % 3600) / 60, event->duration % 60);
+		dvb_loginfo("|   free CA mode          %d", event->free_CA_mode);
+		dvb_loginfo("|   running status        %d: %s", event->running_status, dvb_eit_running_status_name[event->running_status] );
 		dvb_print_descriptors(parms, event->descriptor);
 		event = event->next;
 		events++;
 	}
-	dvb_log("|_  %d events", events);
+	dvb_loginfo("|_  %d events", events);
 }
 
 void dvb_time(const uint8_t data[5], struct tm *tm)
diff --git a/lib/libdvbv5/descriptors/header.c b/lib/libdvbv5/descriptors/header.c
index 3df73af..883283f 100644
--- a/lib/libdvbv5/descriptors/header.c
+++ b/lib/libdvbv5/descriptors/header.c
@@ -32,16 +32,16 @@ int dvb_table_header_init(struct dvb_table_header *t)
 
 void dvb_table_header_print(struct dvb_v5_fe_parms *parms, const struct dvb_table_header *t)
 {
-	dvb_log("| table_id            %d", t->table_id);
-	dvb_log("| section_length      %d", t->section_length);
-	dvb_log("| one                 %d", t->one);
-	dvb_log("| zero                %d", t->zero);
-	dvb_log("| syntax              %d", t->syntax);
-	dvb_log("| transport_stream_id %d", t->id);
-	dvb_log("| current_next        %d", t->current_next);
-	dvb_log("| version             %d", t->version);
-	dvb_log("| one2                %d", t->one2);
-	dvb_log("| section_number      %d", t->section_id);
-	dvb_log("| last_section_number %d", t->last_section);
+	dvb_loginfo("| table_id         0x%02x", t->table_id);
+	dvb_loginfo("| section_length      %d", t->section_length);
+	dvb_loginfo("| one                 %d", t->one);
+	dvb_loginfo("| zero                %d", t->zero);
+	dvb_loginfo("| syntax              %d", t->syntax);
+	dvb_loginfo("| transport_stream_id %d", t->id);
+	dvb_loginfo("| current_next        %d", t->current_next);
+	dvb_loginfo("| version             %d", t->version);
+	dvb_loginfo("| one2                %d", t->one2);
+	dvb_loginfo("| section_number      %d", t->section_id);
+	dvb_loginfo("| last_section_number %d", t->last_section);
 }
 
diff --git a/lib/libdvbv5/descriptors/mgt.c b/lib/libdvbv5/descriptors/mgt.c
index b12d586..29172c3 100644
--- a/lib/libdvbv5/descriptors/mgt.c
+++ b/lib/libdvbv5/descriptors/mgt.c
@@ -95,7 +95,7 @@ ssize_t atsc_table_mgt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		*head = table;
 		head = &(*head)->next;
 
-		/* get the descriptors for each table */
+		/* parse the descriptors */
 		size = table->desc_length;
 		if (p + size > endbuf) {
 			dvb_logerr("%s: short read %zd/%zd bytes", __func__,
@@ -133,21 +133,21 @@ void atsc_table_mgt_print(struct dvb_v5_fe_parms *parms, struct atsc_table_mgt *
 	const struct atsc_table_mgt_table *table = mgt->table;
 	uint16_t tables = 0;
 
-	dvb_log("MGT");
+	dvb_loginfo("MGT");
 	ATSC_TABLE_HEADER_PRINT(parms, mgt);
-	dvb_log("| tables           %d", mgt->tables);
+	dvb_loginfo("| tables           %d", mgt->tables);
 	while (table) {
-                dvb_log("|- type %04x    %d", table->type, table->pid);
-                dvb_log("|  one          %d", table->one);
-                dvb_log("|  one2         %d", table->one2);
-                dvb_log("|  type version %d", table->type_version);
-                dvb_log("|  size         %d", table->size);
-                dvb_log("|  one3         %d", table->one3);
-                dvb_log("|  desc_length  %d", table->desc_length);
+                dvb_loginfo("|- type %04x    %d", table->type, table->pid);
+                dvb_loginfo("|  one          %d", table->one);
+                dvb_loginfo("|  one2         %d", table->one2);
+                dvb_loginfo("|  type version %d", table->type_version);
+                dvb_loginfo("|  size         %d", table->size);
+                dvb_loginfo("|  one3         %d", table->one3);
+                dvb_loginfo("|  desc_length  %d", table->desc_length);
 		dvb_print_descriptors(parms, table->descriptor);
 		table = table->next;
 		tables++;
 	}
-	dvb_log("|_  %d tables", tables);
+	dvb_loginfo("|_  %d tables", tables);
 }
 
diff --git a/lib/libdvbv5/descriptors/mpeg_es.c b/lib/libdvbv5/descriptors/mpeg_es.c
index f9cfbd7..e7d750f 100644
--- a/lib/libdvbv5/descriptors/mpeg_es.c
+++ b/lib/libdvbv5/descriptors/mpeg_es.c
@@ -35,17 +35,17 @@ int dvb_mpeg_es_seq_start_init(const uint8_t *buf, ssize_t buflen, struct dvb_mp
 
 void dvb_mpeg_es_seq_start_print(struct dvb_v5_fe_parms *parms, struct dvb_mpeg_es_seq_start *seq_start)
 {
-	dvb_log("MPEG ES SEQ START");
-        dvb_log(" - width       %d", seq_start->width);
-        dvb_log(" - height      %d", seq_start->height);
-        dvb_log(" - aspect      %d", seq_start->aspect);
-        dvb_log(" - framerate   %d", seq_start->framerate);
-        dvb_log(" - bitrate     %d", seq_start->bitrate);
-        dvb_log(" - one         %d", seq_start->one);
-        dvb_log(" - vbv         %d", seq_start->vbv);
-        dvb_log(" - constrained %d", seq_start->constrained);
-        dvb_log(" - qm_intra    %d", seq_start->qm_intra);
-        dvb_log(" - qm_nonintra %d", seq_start->qm_nonintra);
+	dvb_loginfo("MPEG ES SEQ START");
+        dvb_loginfo(" - width       %d", seq_start->width);
+        dvb_loginfo(" - height      %d", seq_start->height);
+        dvb_loginfo(" - aspect      %d", seq_start->aspect);
+        dvb_loginfo(" - framerate   %d", seq_start->framerate);
+        dvb_loginfo(" - bitrate     %d", seq_start->bitrate);
+        dvb_loginfo(" - one         %d", seq_start->one);
+        dvb_loginfo(" - vbv         %d", seq_start->vbv);
+        dvb_loginfo(" - constrained %d", seq_start->constrained);
+        dvb_loginfo(" - qm_intra    %d", seq_start->qm_intra);
+        dvb_loginfo(" - qm_nonintra %d", seq_start->qm_nonintra);
 }
 
 const char *dvb_mpeg_es_frame_names[5] = {
@@ -68,8 +68,8 @@ int dvb_mpeg_es_pic_start_init(const uint8_t *buf, ssize_t buflen, struct dvb_mp
 
 void dvb_mpeg_es_pic_start_print(struct dvb_v5_fe_parms *parms, struct dvb_mpeg_es_pic_start *pic_start)
 {
-	dvb_log("MPEG ES PIC START");
-        dvb_log(" - temporal_ref %d", pic_start->temporal_ref);
-        dvb_log(" - coding_type  %d (%s-frame)", pic_start->coding_type, dvb_mpeg_es_frame_names[pic_start->coding_type]);
-        dvb_log(" - vbv_delay    %d", pic_start->vbv_delay);
+	dvb_loginfo("MPEG ES PIC START");
+        dvb_loginfo(" - temporal_ref %d", pic_start->temporal_ref);
+        dvb_loginfo(" - coding_type  %d (%s-frame)", pic_start->coding_type, dvb_mpeg_es_frame_names[pic_start->coding_type]);
+        dvb_loginfo(" - vbv_delay    %d", pic_start->vbv_delay);
 }
diff --git a/lib/libdvbv5/descriptors/mpeg_pes.c b/lib/libdvbv5/descriptors/mpeg_pes.c
index 43a12d8..939c53c 100644
--- a/lib/libdvbv5/descriptors/mpeg_pes.c
+++ b/lib/libdvbv5/descriptors/mpeg_pes.c
@@ -109,7 +109,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 0x%04x", pes->stream_id);
+		dvb_logwarn("  mpeg pes unsupported stream type 0x%04x", pes->stream_id);
 	} else {
 		dvb_loginfo("  mpeg pes optional");
 		dvb_loginfo("   - two                      %d", pes->optional->two);
diff --git a/lib/libdvbv5/descriptors/mpeg_ts.c b/lib/libdvbv5/descriptors/mpeg_ts.c
index e846b3e..df32484 100644
--- a/lib/libdvbv5/descriptors/mpeg_ts.c
+++ b/lib/libdvbv5/descriptors/mpeg_ts.c
@@ -55,25 +55,25 @@ 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        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              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);
+	dvb_loginfo("MPEG TS");
+	dvb_loginfo(" - sync            0x%02x", ts->sync_byte);
+	dvb_loginfo(" - tei                %d", ts->tei);
+	dvb_loginfo(" - payload_start      %d", ts->payload_start);
+	dvb_loginfo(" - priority           %d", ts->priority);
+	dvb_loginfo(" - pid           0x%04x", ts->pid);
+	dvb_loginfo(" - scrambling         %d", ts->scrambling);
+	dvb_loginfo(" - adaptation_field   %d", ts->adaptation_field);
+	dvb_loginfo(" - continuity_counter %d", ts->continuity_counter);
 	if (ts->adaptation_field & 0x2) {
-		dvb_log(" Adaption Field");
-                dvb_log("   - length         %d", ts->adaption->length);
-                dvb_log("   - discontinued   %d", ts->adaption->discontinued);
-                dvb_log("   - random_access  %d", ts->adaption->random_access);
-                dvb_log("   - priority       %d", ts->adaption->priority);
-                dvb_log("   - PCR            %d", ts->adaption->PCR);
-                dvb_log("   - OPCR           %d", ts->adaption->OPCR);
-                dvb_log("   - splicing_point %d", ts->adaption->splicing_point);
-                dvb_log("   - private_data   %d", ts->adaption->private_data);
-                dvb_log("   - extension      %d", ts->adaption->extension);
+		dvb_loginfo(" Adaption Field");
+                dvb_loginfo("   - length         %d", ts->adaption->length);
+                dvb_loginfo("   - discontinued   %d", ts->adaption->discontinued);
+                dvb_loginfo("   - random_access  %d", ts->adaption->random_access);
+                dvb_loginfo("   - priority       %d", ts->adaption->priority);
+                dvb_loginfo("   - PCR            %d", ts->adaption->PCR);
+                dvb_loginfo("   - OPCR           %d", ts->adaption->OPCR);
+                dvb_loginfo("   - splicing_point %d", ts->adaption->splicing_point);
+                dvb_loginfo("   - private_data   %d", ts->adaption->private_data);
+                dvb_loginfo("   - extension      %d", ts->adaption->extension);
 	}
 }
diff --git a/lib/libdvbv5/descriptors/nit.c b/lib/libdvbv5/descriptors/nit.c
index aadebc0..c2c55a4 100644
--- a/lib/libdvbv5/descriptors/nit.c
+++ b/lib/libdvbv5/descriptors/nit.c
@@ -135,7 +135,7 @@ void dvb_table_nit_free(struct dvb_table_nit *nit)
 {
 	struct dvb_table_nit_transport *transport = nit->transport;
 	dvb_free_descriptors((struct dvb_desc **) &nit->descriptor);
-	while(transport) {
+	while (transport) {
 		dvb_free_descriptors((struct dvb_desc **) &transport->descriptor);
 		struct dvb_table_nit_transport *tmp = transport;
 		transport = transport->next;
@@ -146,19 +146,20 @@ void dvb_table_nit_free(struct dvb_table_nit *nit)
 
 void dvb_table_nit_print(struct dvb_v5_fe_parms *parms, struct dvb_table_nit *nit)
 {
-	dvb_log("NIT");
-	dvb_table_header_print(parms, &nit->header);
-	dvb_log("| desc_length   %d", nit->desc_length);
-	dvb_print_descriptors(parms, nit->descriptor);
 	const struct dvb_table_nit_transport *transport = nit->transport;
 	uint16_t transports = 0;
-	while(transport) {
-		dvb_log("|- transport %04x network %04x", transport->transport_id, transport->network_id);
+
+	dvb_loginfo("NIT");
+	dvb_table_header_print(parms, &nit->header);
+	dvb_loginfo("| desc_length   %d", nit->desc_length);
+	dvb_print_descriptors(parms, nit->descriptor);
+	while (transport) {
+		dvb_loginfo("|- transport %04x network %04x", transport->transport_id, transport->network_id);
 		dvb_print_descriptors(parms, transport->descriptor);
 		transport = transport->next;
 		transports++;
 	}
-	dvb_log("|_  %d transports", transports);
+	dvb_loginfo("|_  %d transports", transports);
 }
 
 void nit_descriptor_handler(struct dvb_v5_fe_parms *parms,
diff --git a/lib/libdvbv5/descriptors/pat.c b/lib/libdvbv5/descriptors/pat.c
index efa6811..1a79bca 100644
--- a/lib/libdvbv5/descriptors/pat.c
+++ b/lib/libdvbv5/descriptors/pat.c
@@ -62,7 +62,7 @@ ssize_t dvb_table_pat_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 
 		prog = malloc(sizeof(struct dvb_table_pat_program));
 		if (!prog) {
-			dvb_perror("Out of memory");
+			dvb_logerr("%s: out of memory", __func__);
 			return -3;
 		}
 
diff --git a/lib/libdvbv5/descriptors/sdt.c b/lib/libdvbv5/descriptors/sdt.c
index 8cee315..c0d32e4 100644
--- a/lib/libdvbv5/descriptors/sdt.c
+++ b/lib/libdvbv5/descriptors/sdt.c
@@ -127,22 +127,24 @@ void dvb_table_sdt_free(struct dvb_table_sdt *sdt)
 
 void dvb_table_sdt_print(struct dvb_v5_fe_parms *parms, struct dvb_table_sdt *sdt)
 {
-	dvb_log("SDT");
+	dvb_loginfo("SDT");
 	dvb_table_header_print(parms, &sdt->header);
-	dvb_log("|- network_id         %d", sdt->network_id);
-	dvb_log("|\\");
+	dvb_loginfo("| network_id          %d", sdt->network_id);
+	dvb_loginfo("| reserved            %d", sdt->reserved);
+	dvb_loginfo("|\\");
 	const struct dvb_table_sdt_service *service = sdt->service;
 	uint16_t services = 0;
-	while(service) {
-		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);
-		dvb_log("|   running status        %d", service->running_status);
+	while (service) {
+		dvb_loginfo("|- service 0x%04x", service->service_id);
+		dvb_loginfo("|   EIT schedule          %d", service->EIT_schedule);
+		dvb_loginfo("|   EIT present following %d", service->EIT_present_following);
+		dvb_loginfo("|   free CA mode          %d", service->free_CA_mode);
+		dvb_loginfo("|   running status        %d", service->running_status);
+		dvb_loginfo("|   descriptor length     %d", service->desc_length);
 		dvb_print_descriptors(parms, service->descriptor);
 		service = service->next;
 		services++;
 	}
-	dvb_log("|_  %d services", services);
+	dvb_loginfo("|_  %d services", services);
 }
 
diff --git a/lib/libdvbv5/descriptors/vct.c b/lib/libdvbv5/descriptors/vct.c
index 39d44f4..6b64144 100644
--- a/lib/libdvbv5/descriptors/vct.c
+++ b/lib/libdvbv5/descriptors/vct.c
@@ -145,7 +145,7 @@ ssize_t atsc_table_vct_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 void atsc_table_vct_free(struct atsc_table_vct *vct)
 {
 	struct atsc_table_vct_channel *channel = vct->channel;
-	while(channel) {
+	while (channel) {
 		dvb_free_descriptors((struct dvb_desc **) &channel->descriptor);
 		struct atsc_table_vct_channel *tmp = channel;
 		channel = channel->next;
@@ -158,42 +158,43 @@ void atsc_table_vct_free(struct atsc_table_vct *vct)
 
 void atsc_table_vct_print(struct dvb_v5_fe_parms *parms, struct atsc_table_vct *vct)
 {
+	const struct atsc_table_vct_channel *channel = vct->channel;
+	uint16_t channels = 0;
+
 	if (vct->header.table_id == ATSC_TABLE_CVCT)
-		dvb_log("CVCT");
+		dvb_loginfo("CVCT");
 	else
-		dvb_log("TVCT");
+		dvb_loginfo("TVCT");
 
 	ATSC_TABLE_HEADER_PRINT(parms, vct);
 
-	dvb_log("|- #channels        %d", vct->num_channels_in_section);
-	dvb_log("|\\  channel_id");
-	const struct atsc_table_vct_channel *channel = vct->channel;
-	uint16_t channels = 0;
-	while(channel) {
-		dvb_log("|- Channel                %d.%d: %s",
+	dvb_loginfo("|- #channels        %d", vct->num_channels_in_section);
+	dvb_loginfo("|\\  channel_id");
+	while (channel) {
+		dvb_loginfo("|- Channel                %d.%d: %s",
 			channel->major_channel_number,
 			channel->minor_channel_number,
 			channel->short_name);
-		dvb_log("|   modulation mode       %d", channel->modulation_mode);
-		dvb_log("|   carrier frequency     %d", channel->carrier_frequency);
-		dvb_log("|   TS ID                 %d", channel->channel_tsid);
-		dvb_log("|   program number        %d", channel->program_number);
+		dvb_loginfo("|   modulation mode       %d", channel->modulation_mode);
+		dvb_loginfo("|   carrier frequency     %d", channel->carrier_frequency);
+		dvb_loginfo("|   TS ID                 %d", channel->channel_tsid);
+		dvb_loginfo("|   program number        %d", channel->program_number);
 
-		dvb_log("|   ETM location          %d", channel->ETM_location);
-		dvb_log("|   access controlled     %d", channel->access_controlled);
-		dvb_log("|   hidden                %d", channel->hidden);
+		dvb_loginfo("|   ETM location          %d", channel->ETM_location);
+		dvb_loginfo("|   access controlled     %d", channel->access_controlled);
+		dvb_loginfo("|   hidden                %d", channel->hidden);
 
 		if (vct->header.table_id == ATSC_TABLE_CVCT) {
-			dvb_log("|   path select           %d", channel->path_select);
-			dvb_log("|   out of band           %d", channel->out_of_band);
+			dvb_loginfo("|   path select           %d", channel->path_select);
+			dvb_loginfo("|   out of band           %d", channel->out_of_band);
 		}
-		dvb_log("|   hide guide            %d", channel->hide_guide);
-		dvb_log("|   service type          %d", channel->service_type);
-		dvb_log("|   source id            %d", channel->source_id);
+		dvb_loginfo("|   hide guide            %d", channel->hide_guide);
+		dvb_loginfo("|   service type          %d", channel->service_type);
+		dvb_loginfo("|   source id            %d", channel->source_id);
 
 		dvb_print_descriptors(parms, channel->descriptor);
 		channel = channel->next;
 		channels++;
 	}
-	dvb_log("|_  %d channels", channels);
+	dvb_loginfo("|_  %d channels", channels);
 }
diff --git a/lib/libdvbv5/dvb-scan.c b/lib/libdvbv5/dvb-scan.c
index d8b3953..4fbd6d2 100644
--- a/lib/libdvbv5/dvb-scan.c
+++ b/lib/libdvbv5/dvb-scan.c
@@ -147,7 +147,7 @@ static int dvb_parse_section_alloc(struct dvb_v5_fe_parms *parms,
 	*sect->table = NULL;
 	priv = calloc(sizeof(struct dvb_table_filter_priv), 1);
 	if (!priv) {
-		dvb_perror("Out of memory");
+		dvb_logerr("%s: out of memory", __func__);
 		return -1;
 	}
 	priv->last_section = -1;
@@ -280,7 +280,7 @@ int dvb_read_sections(struct dvb_v5_fe_parms *parms, int dmx_fd,
 
 	buf = calloc(DVB_MAX_PAYLOAD_PACKET_SIZE, 1);
 	if (!buf) {
-		dvb_perror("Out of memory");
+		dvb_logerr("%s: out of memory", __func__);
 		dvb_dmx_stop(dmx_fd);
 		dvb_table_filter_free(sect);
 		return -1;
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 7/7] libdvbv5: rename descriptor functions
  2014-04-09 22:26 [PATCH 1/7] libdvbv5: reunite atsc_table_header and dvb_table_header André Roth
                   ` (4 preceding siblings ...)
  2014-04-09 22:26 ` [PATCH 6/7] libdvbv5: cleanup printing of tables and descriptors André Roth
@ 2014-04-09 22:27 ` André Roth
  5 siblings, 0 replies; 7+ messages in thread
From: André Roth @ 2014-04-09 22:27 UTC (permalink / raw)
  To: linux-media; +Cc: André Roth

prefix the descriptor functions with dvb_desc
for a nice API and code completion support

Signed-off-by: André Roth <neolynx@gmail.com>
---
 lib/include/libdvbv5/descriptors.h  |    6 +++---
 lib/libdvbv5/descriptors.c          |    6 +++---
 lib/libdvbv5/descriptors/atsc_eit.c |    6 +++---
 lib/libdvbv5/descriptors/cat.c      |    6 +++---
 lib/libdvbv5/descriptors/eit.c      |    6 +++---
 lib/libdvbv5/descriptors/mgt.c      |    8 ++++----
 lib/libdvbv5/descriptors/nit.c      |   12 ++++++------
 lib/libdvbv5/descriptors/pmt.c      |   12 ++++++------
 lib/libdvbv5/descriptors/sdt.c      |    6 +++---
 lib/libdvbv5/descriptors/vct.c      |   10 +++++-----
 10 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/lib/include/libdvbv5/descriptors.h b/lib/include/libdvbv5/descriptors.h
index d08ab3e..8b38977 100644
--- a/lib/include/libdvbv5/descriptors.h
+++ b/lib/include/libdvbv5/descriptors.h
@@ -82,9 +82,9 @@ uint32_t bcd(uint32_t bcd);
 
 void hexdump(struct dvb_v5_fe_parms *parms, const char *prefix, const unsigned char *buf, int len);
 
-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);
+int  dvb_desc_parse(struct dvb_v5_fe_parms *parms, const uint8_t *buf, uint16_t section_length, struct dvb_desc **head_desc);
+void dvb_desc_free (struct dvb_desc **list);
+void dvb_desc_print(struct dvb_v5_fe_parms *parms, struct dvb_desc *desc);
 
 #ifdef __cplusplus
 }
diff --git a/lib/libdvbv5/descriptors.c b/lib/libdvbv5/descriptors.c
index 539f824..c2b0293 100644
--- a/lib/libdvbv5/descriptors.c
+++ b/lib/libdvbv5/descriptors.c
@@ -98,7 +98,7 @@ const struct dvb_table_init dvb_table_initializers[] = {
 char *default_charset = "iso-8859-1";
 char *output_charset = "utf-8";
 
-int dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
+int dvb_desc_parse(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;
@@ -172,7 +172,7 @@ int dvb_parse_descriptors(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 	return 0;
 }
 
-void dvb_print_descriptors(struct dvb_v5_fe_parms *parms, struct dvb_desc *desc)
+void dvb_desc_print(struct dvb_v5_fe_parms *parms, struct dvb_desc *desc)
 {
 	while (desc) {
 		dvb_desc_print_func print = dvb_descriptors[desc->type].print;
@@ -184,7 +184,7 @@ void dvb_print_descriptors(struct dvb_v5_fe_parms *parms, struct dvb_desc *desc)
 	}
 }
 
-void dvb_free_descriptors(struct dvb_desc **list)
+void dvb_desc_free(struct dvb_desc **list)
 {
 	struct dvb_desc *desc = *list;
 	while (desc) {
diff --git a/lib/libdvbv5/descriptors/atsc_eit.c b/lib/libdvbv5/descriptors/atsc_eit.c
index 985b055..38f3810 100644
--- a/lib/libdvbv5/descriptors/atsc_eit.c
+++ b/lib/libdvbv5/descriptors/atsc_eit.c
@@ -113,7 +113,7 @@ ssize_t atsc_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 				   endbuf - p, size);
 			return -5;
 		}
-		dvb_parse_descriptors(parms, p, size, &event->descriptor);
+		dvb_desc_parse(parms, p, size, &event->descriptor);
 
 		p += size;
 	}
@@ -129,7 +129,7 @@ void atsc_table_eit_free(struct atsc_table_eit *eit)
 	while (event) {
 		struct atsc_table_eit_event *tmp = event;
 
-		dvb_free_descriptors((struct dvb_desc **) &event->descriptor);
+		dvb_desc_free((struct dvb_desc **) &event->descriptor);
 		event = event->next;
 		free(tmp);
 	}
@@ -154,7 +154,7 @@ void atsc_table_eit_print(struct dvb_v5_fe_parms *parms, struct atsc_table_eit *
 		dvb_loginfo("|   Duration              %dh %dm %ds", event->duration / 3600, (event->duration % 3600) / 60, event->duration % 60);
 		dvb_loginfo("|   ETM                   %d", event->etm);
 		dvb_loginfo("|   title length          %d", event->title_length);
-		dvb_print_descriptors(parms, event->descriptor);
+		dvb_desc_print(parms, event->descriptor);
 		event = event->next;
 		events++;
 	}
diff --git a/lib/libdvbv5/descriptors/cat.c b/lib/libdvbv5/descriptors/cat.c
index a8fb00b..5acc88e 100644
--- a/lib/libdvbv5/descriptors/cat.c
+++ b/lib/libdvbv5/descriptors/cat.c
@@ -65,7 +65,7 @@ ssize_t dvb_table_cat_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 	/* parse the descriptors */
 	if (endbuf > p) {
 		uint16_t desc_length = endbuf - p;
-		if (dvb_parse_descriptors(parms, p, desc_length,
+		if (dvb_desc_parse(parms, p, desc_length,
 				      head_desc) != 0) {
 			return -4;
 		}
@@ -82,7 +82,7 @@ ssize_t dvb_table_cat_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 
 void dvb_table_cat_free(struct dvb_table_cat *cat)
 {
-	dvb_free_descriptors((struct dvb_desc **) &cat->descriptor);
+	dvb_desc_free((struct dvb_desc **) &cat->descriptor);
 	free(cat);
 }
 
@@ -90,6 +90,6 @@ void dvb_table_cat_print(struct dvb_v5_fe_parms *parms, struct dvb_table_cat *ca
 {
 	dvb_loginfo("CAT");
 	dvb_table_header_print(parms, &cat->header);
-	dvb_print_descriptors(parms, cat->descriptor);
+	dvb_desc_print(parms, cat->descriptor);
 }
 
diff --git a/lib/libdvbv5/descriptors/eit.c b/lib/libdvbv5/descriptors/eit.c
index d66d492..21f7897 100644
--- a/lib/libdvbv5/descriptors/eit.c
+++ b/lib/libdvbv5/descriptors/eit.c
@@ -103,7 +103,7 @@ ssize_t dvb_table_eit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 					   endbuf - p, desc_length);
 				desc_length = endbuf - p;
 			}
-			if (dvb_parse_descriptors(parms, p, desc_length,
+			if (dvb_desc_parse(parms, p, desc_length,
 					      &event->descriptor) != 0) {
 				return -4;
 			}
@@ -121,7 +121,7 @@ void dvb_table_eit_free(struct dvb_table_eit *eit)
 {
 	struct dvb_table_eit_event *event = eit->event;
 	while (event) {
-		dvb_free_descriptors((struct dvb_desc **) &event->descriptor);
+		dvb_desc_free((struct dvb_desc **) &event->descriptor);
 		struct dvb_table_eit_event *tmp = event;
 		event = event->next;
 		free(tmp);
@@ -149,7 +149,7 @@ void dvb_table_eit_print(struct dvb_v5_fe_parms *parms, struct dvb_table_eit *ei
 		dvb_loginfo("|   Duration              %dh %dm %ds", event->duration / 3600, (event->duration % 3600) / 60, event->duration % 60);
 		dvb_loginfo("|   free CA mode          %d", event->free_CA_mode);
 		dvb_loginfo("|   running status        %d: %s", event->running_status, dvb_eit_running_status_name[event->running_status] );
-		dvb_print_descriptors(parms, event->descriptor);
+		dvb_desc_print(parms, event->descriptor);
 		event = event->next;
 		events++;
 	}
diff --git a/lib/libdvbv5/descriptors/mgt.c b/lib/libdvbv5/descriptors/mgt.c
index 29172c3..f32bc2d 100644
--- a/lib/libdvbv5/descriptors/mgt.c
+++ b/lib/libdvbv5/descriptors/mgt.c
@@ -102,7 +102,7 @@ ssize_t atsc_table_mgt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 				   endbuf - p, size);
 			return -3;
 		}
-		dvb_parse_descriptors(parms, p, size, &table->descriptor);
+		dvb_desc_parse(parms, p, size, &table->descriptor);
 
 		p += size;
 	}
@@ -117,11 +117,11 @@ void atsc_table_mgt_free(struct atsc_table_mgt *mgt)
 {
 	struct atsc_table_mgt_table *table = mgt->table;
 
-	dvb_free_descriptors((struct dvb_desc **) &mgt->descriptor);
+	dvb_desc_free((struct dvb_desc **) &mgt->descriptor);
 	while (table) {
 		struct atsc_table_mgt_table *tmp = table;
 
-		dvb_free_descriptors((struct dvb_desc **) &table->descriptor);
+		dvb_desc_free((struct dvb_desc **) &table->descriptor);
 		table = table->next;
 		free(tmp);
 	}
@@ -144,7 +144,7 @@ void atsc_table_mgt_print(struct dvb_v5_fe_parms *parms, struct atsc_table_mgt *
                 dvb_loginfo("|  size         %d", table->size);
                 dvb_loginfo("|  one3         %d", table->one3);
                 dvb_loginfo("|  desc_length  %d", table->desc_length);
-		dvb_print_descriptors(parms, table->descriptor);
+		dvb_desc_print(parms, table->descriptor);
 		table = table->next;
 		tables++;
 	}
diff --git a/lib/libdvbv5/descriptors/nit.c b/lib/libdvbv5/descriptors/nit.c
index c2c55a4..644a861 100644
--- a/lib/libdvbv5/descriptors/nit.c
+++ b/lib/libdvbv5/descriptors/nit.c
@@ -77,7 +77,7 @@ ssize_t dvb_table_nit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 			   endbuf - p, size);
 		return -3;
 	}
-	dvb_parse_descriptors(parms, p, size, head_desc);
+	dvb_desc_parse(parms, p, size, head_desc);
 	p += size;
 
 	size = sizeof(union dvb_table_nit_transport_header);
@@ -117,7 +117,7 @@ ssize_t dvb_table_nit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 					   endbuf - p, desc_length);
 				desc_length = endbuf - p;
 			}
-			if (dvb_parse_descriptors(parms, p, desc_length,
+			if (dvb_desc_parse(parms, p, desc_length,
 					      &transport->descriptor) != 0) {
 				return -6;
 			}
@@ -134,9 +134,9 @@ ssize_t dvb_table_nit_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 void dvb_table_nit_free(struct dvb_table_nit *nit)
 {
 	struct dvb_table_nit_transport *transport = nit->transport;
-	dvb_free_descriptors((struct dvb_desc **) &nit->descriptor);
+	dvb_desc_free((struct dvb_desc **) &nit->descriptor);
 	while (transport) {
-		dvb_free_descriptors((struct dvb_desc **) &transport->descriptor);
+		dvb_desc_free((struct dvb_desc **) &transport->descriptor);
 		struct dvb_table_nit_transport *tmp = transport;
 		transport = transport->next;
 		free(tmp);
@@ -152,10 +152,10 @@ void dvb_table_nit_print(struct dvb_v5_fe_parms *parms, struct dvb_table_nit *ni
 	dvb_loginfo("NIT");
 	dvb_table_header_print(parms, &nit->header);
 	dvb_loginfo("| desc_length   %d", nit->desc_length);
-	dvb_print_descriptors(parms, nit->descriptor);
+	dvb_desc_print(parms, nit->descriptor);
 	while (transport) {
 		dvb_loginfo("|- transport %04x network %04x", transport->transport_id, transport->network_id);
-		dvb_print_descriptors(parms, transport->descriptor);
+		dvb_desc_print(parms, transport->descriptor);
 		transport = transport->next;
 		transports++;
 	}
diff --git a/lib/libdvbv5/descriptors/pmt.c b/lib/libdvbv5/descriptors/pmt.c
index e1f07f8..426c3dc 100644
--- a/lib/libdvbv5/descriptors/pmt.c
+++ b/lib/libdvbv5/descriptors/pmt.c
@@ -87,7 +87,7 @@ ssize_t dvb_table_pmt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 				   desc_length, endbuf - p);
 			desc_length = endbuf - p;
 		}
-		if (dvb_parse_descriptors(parms, p, desc_length,
+		if (dvb_desc_parse(parms, p, desc_length,
 				      head_desc) != 0) {
 			return -3;
 		}
@@ -123,7 +123,7 @@ ssize_t dvb_table_pmt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 					   endbuf - p, desc_length);
 				desc_length = endbuf - p;
 			}
-			if (dvb_parse_descriptors(parms, p, desc_length,
+			if (dvb_desc_parse(parms, p, desc_length,
 					      &stream->descriptor) != 0) {
 				return -4;
 			}
@@ -142,12 +142,12 @@ void dvb_table_pmt_free(struct dvb_table_pmt *pmt)
 {
 	struct dvb_table_pmt_stream *stream = pmt->stream;
 	while(stream) {
-		dvb_free_descriptors((struct dvb_desc **) &stream->descriptor);
+		dvb_desc_free((struct dvb_desc **) &stream->descriptor);
 		struct dvb_table_pmt_stream *tmp = stream;
 		stream = stream->next;
 		free(tmp);
 	}
-	dvb_free_descriptors((struct dvb_desc **) &pmt->descriptor);
+	dvb_desc_free((struct dvb_desc **) &pmt->descriptor);
 	free(pmt);
 }
 
@@ -160,7 +160,7 @@ void dvb_table_pmt_print(struct dvb_v5_fe_parms *parms, const struct dvb_table_p
 	dvb_loginfo("|  descriptor length   %d", pmt->desc_length);
 	dvb_loginfo("|  zero3               %d", pmt->zero3);
 	dvb_loginfo("|  reserved3          %d", pmt->reserved3);
-	dvb_print_descriptors(parms, pmt->descriptor);
+	dvb_desc_print(parms, pmt->descriptor);
 	dvb_loginfo("|\\");
 	const struct dvb_table_pmt_stream *stream = pmt->stream;
 	uint16_t streams = 0;
@@ -168,7 +168,7 @@ void dvb_table_pmt_print(struct dvb_v5_fe_parms *parms, const struct dvb_table_p
 		dvb_loginfo("|- stream 0x%04x: %s (%x)", stream->elementary_pid,
 				pmt_stream_name[stream->type], stream->type);
 		dvb_loginfo("|    descriptor length   %d", stream->desc_length);
-		dvb_print_descriptors(parms, stream->descriptor);
+		dvb_desc_print(parms, stream->descriptor);
 		stream = stream->next;
 		streams++;
 	}
diff --git a/lib/libdvbv5/descriptors/sdt.c b/lib/libdvbv5/descriptors/sdt.c
index c0d32e4..561ec66 100644
--- a/lib/libdvbv5/descriptors/sdt.c
+++ b/lib/libdvbv5/descriptors/sdt.c
@@ -97,7 +97,7 @@ ssize_t dvb_table_sdt_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 					   endbuf - p, desc_length);
 				desc_length = endbuf - p;
 			}
-			if (dvb_parse_descriptors(parms, p, desc_length,
+			if (dvb_desc_parse(parms, p, desc_length,
 					      &service->descriptor) != 0) {
 				return -4;
 			}
@@ -117,7 +117,7 @@ void dvb_table_sdt_free(struct dvb_table_sdt *sdt)
 {
 	struct dvb_table_sdt_service *service = sdt->service;
 	while(service) {
-		dvb_free_descriptors((struct dvb_desc **) &service->descriptor);
+		dvb_desc_free((struct dvb_desc **) &service->descriptor);
 		struct dvb_table_sdt_service *tmp = service;
 		service = service->next;
 		free(tmp);
@@ -141,7 +141,7 @@ void dvb_table_sdt_print(struct dvb_v5_fe_parms *parms, struct dvb_table_sdt *sd
 		dvb_loginfo("|   free CA mode          %d", service->free_CA_mode);
 		dvb_loginfo("|   running status        %d", service->running_status);
 		dvb_loginfo("|   descriptor length     %d", service->desc_length);
-		dvb_print_descriptors(parms, service->descriptor);
+		dvb_desc_print(parms, service->descriptor);
 		service = service->next;
 		services++;
 	}
diff --git a/lib/libdvbv5/descriptors/vct.c b/lib/libdvbv5/descriptors/vct.c
index 6b64144..387c6e8 100644
--- a/lib/libdvbv5/descriptors/vct.c
+++ b/lib/libdvbv5/descriptors/vct.c
@@ -115,7 +115,7 @@ ssize_t atsc_table_vct_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 		}
 
 		/* get the descriptors for each program */
-		dvb_parse_descriptors(parms, p, channel->descriptors_length,
+		dvb_desc_parse(parms, p, channel->descriptors_length,
 				      &channel->descriptor);
 
 		p += channel->descriptors_length;
@@ -132,7 +132,7 @@ ssize_t atsc_table_vct_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf,
 				   d->descriptor_length, endbuf - p);
 			return -3;
 		}
-		dvb_parse_descriptors(parms, p, d->descriptor_length,
+		dvb_desc_parse(parms, p, d->descriptor_length,
 				      &vct->descriptor);
 	}
 	if (endbuf - p)
@@ -146,12 +146,12 @@ void atsc_table_vct_free(struct atsc_table_vct *vct)
 {
 	struct atsc_table_vct_channel *channel = vct->channel;
 	while (channel) {
-		dvb_free_descriptors((struct dvb_desc **) &channel->descriptor);
+		dvb_desc_free((struct dvb_desc **) &channel->descriptor);
 		struct atsc_table_vct_channel *tmp = channel;
 		channel = channel->next;
 		free(tmp);
 	}
-	dvb_free_descriptors((struct dvb_desc **) &vct->descriptor);
+	dvb_desc_free((struct dvb_desc **) &vct->descriptor);
 
 	free(vct);
 }
@@ -192,7 +192,7 @@ void atsc_table_vct_print(struct dvb_v5_fe_parms *parms, struct atsc_table_vct *
 		dvb_loginfo("|   service type          %d", channel->service_type);
 		dvb_loginfo("|   source id            %d", channel->source_id);
 
-		dvb_print_descriptors(parms, channel->descriptor);
+		dvb_desc_print(parms, channel->descriptor);
 		channel = channel->next;
 		channels++;
 	}
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-04-09 22:27 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-09 22:26 [PATCH 1/7] libdvbv5: reunite atsc_table_header and dvb_table_header André Roth
2014-04-09 22:26 ` [PATCH 2/7] libdvbv5: fix asprintf compile warning in dvbv5-scan André Roth
2014-04-09 22:26 ` [PATCH 3/7] libdvbv5: make crc32 public André Roth
2014-04-09 22:26 ` [PATCH 4/7] libdvbv5: make dvb_table_filter_free public André Roth
2014-04-09 22:26 ` [PATCH 5/7] libdvbv5: cleanup table parsers André Roth
2014-04-09 22:26 ` [PATCH 6/7] libdvbv5: cleanup printing of tables and descriptors André Roth
2014-04-09 22:27 ` [PATCH 7/7] libdvbv5: rename descriptor functions André Roth

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.