diff mbox

New utility program atsc_epg added to dvb-apps utility suite.

Message ID 1245714220.14686.16.camel@core2duo.localdomain (mailing list archive)
State Not Applicable
Headers show

Commit Message

Yufei Yuan June 22, 2009, 11:43 p.m. UTC
I sent out a new patch yesterday under a different subject line, but it 
looks like it did not make through it. Is this list a moderated one?
 
Anyway, please ignore yesterday's patch if you have not had a chance to 
look at it. Please use this following patch, which is against 1283. It 
contains: 

1. atsc_epg bug fix: when ETM message gets longer than 256 characters, 
the last character was chopped, due to incorrect calling to snprintf(). 
2. atsc_epg code cleanup:
  - error report function re-factored.
  - white space added after keywords;
  - hard wrap around column 80 removed;
  - one-line conditional statement now w/o brackets.
3. scan Makefile workaround for building in gcc4.4/kernel 2.6.30 was not 
picked up yet, include again.

Regards,

Signed-off-by: Yufei Yuan <yfyuan@gmail.com>



--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

hermann pitton June 23, 2009, 12:52 a.m. UTC | #1
Hi,

Am Montag, den 22.06.2009, 18:43 -0500 schrieb Yufei Yuan:
> I sent out a new patch yesterday under a different subject line, but it 
> looks like it did not make through it. Is this list a moderated one?
>  
> Anyway, please ignore yesterday's patch if you have not had a chance to 
> look at it. Please use this following patch, which is against 1283. It 
> contains: 

your patch from yesterday arrived, but the mirrors don't work reliable I
guess.

You are on the right list, but it is obviously not moderated enough, if
you look at what others also do with mail footers ;)

> _________________________________________________________________
> > Hotmail® has ever-growing storage! Don’t worry about storage limits.
> > http://windowslive.com/Tutorial/Hotmail/Storage?ocid=TXT_TAGLM_WL_HM_Tutorial_Storage_062009--
> > To unsubscribe from this list: send the line "unsubscribe linux-media" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> 
> _________________________________________________________________
> Bingâ„¢  brings you maps, menus, and reviews organized in one place.   Try it now.
> http://www.bing.com/search?q=restaurants&form=MLOGEN&publ=WLHMTAG&crea=TEXT_MLOGEN_Core_tagline_local_1x1--
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
Lauren found her dream laptop. Find the PC that’s right for you.
http://www.microsoft.com/windows/choosepc/?ocid=ftp_val_wl_290--
To unsubscribe from this list: send the line "unsubscribe linux-media"
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

:)

Cheers,
Hermann

> 1. atsc_epg bug fix: when ETM message gets longer than 256 characters, 
> the last character was chopped, due to incorrect calling to snprintf(). 
> 2. atsc_epg code cleanup:
>   - error report function re-factored.
>   - white space added after keywords;
>   - hard wrap around column 80 removed;
>   - one-line conditional statement now w/o brackets.
> 3. scan Makefile workaround for building in gcc4.4/kernel 2.6.30 was not 
> picked up yet, include again.
> 
> Regards,
> 
> Signed-off-by: Yufei Yuan <yfyuan@gmail.com>
> 
> diff -upr dvb-apps/util/atsc_epg/atsc_epg.c dvb-apps_local/util/atsc_epg/atsc_epg.c
> --- dvb-apps/util/atsc_epg/atsc_epg.c	2009-06-22 12:13:04.136925772 -0500
> +++ dvb-apps_local/util/atsc_epg/atsc_epg.c	2009-06-22 13:17:15.287986505 -0500
> @@ -20,6 +20,7 @@
>  
>  #include <stdio.h>
>  #include <stdlib.h>
> +#include <stdarg.h>
>  #include <unistd.h>
>  #include <string.h>
>  #include <time.h>
> @@ -46,6 +47,18 @@
>  #define MAX_NUM_CHANNELS		16
>  #define MAX_NUM_EVENTS_PER_CHANNEL	(4 * 24 * 7)
>  
> +static inline void print_error(const char *s, const char *f, ...)
> +{
> +	va_list ap;
> +
> +	va_start(ap, f);
> +	fprintf(stderr, "%s(): ", s);
> +	vfprintf(stderr, f, ap);
> +	fprintf(stderr, "\n");
> +}
> +
> +#define error_msg(format, ...) print_error(__FUNCTION__, format, ## __VA_ARGS__)
> +
>  static int atsc_scan_table(int dmxfd, uint16_t pid, enum atsc_section_tag tag,
>  	void **table_section);
>  
> @@ -168,9 +181,8 @@ void *(*table_callback[16])(struct atsc_
>  
>  static void int_handler(int sig_num)
>  {
> -	if(SIGINT != sig_num) {
> +	if (SIGINT != sig_num)
>  		return;
> -	}
>  	ctrl_c = 1;
>  }
>  
> @@ -219,8 +231,9 @@ static void help(void)
>  
>  static int close_frontend(struct dvbfe_handle *fe)
>  {
> -	if(NULL == fe) {
> -		fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__);
> +	if (NULL == fe) {
> +		error_msg("NULL pointer detected");
> +		return -1;
>  	}
>  
>  	dvbfe_close(fe);
> @@ -232,24 +245,21 @@ static int open_frontend(struct dvbfe_ha
>  {
>  	struct dvbfe_info fe_info;
>  
> -	if(NULL == (*fe = dvbfe_open(adapter, 0, 0))) {
> -		fprintf(stderr, "%s(): error calling dvbfe_open()\n",
> -			__FUNCTION__);
> +	if (NULL == (*fe = dvbfe_open(adapter, 0, 0))) {
> +		error_msg("error calling dvbfe_open()");
>  		return -1;
>  	}
>  	dvbfe_get_info(*fe, 0, &fe_info, DVBFE_INFO_QUERYTYPE_IMMEDIATE, 0);
> -	if(DVBFE_TYPE_ATSC != fe_info.type) {
> -		fprintf(stderr, "%s(): only ATSC frontend supported currently\n",
> -			__FUNCTION__);
> +	if (DVBFE_TYPE_ATSC != fe_info.type) {
> +		error_msg("only ATSC frontend supported currently");
>  		return -1;
>  	}
>  	fe_info.feparams.frequency = frequency;
>  	fe_info.feparams.inversion = DVBFE_INVERSION_AUTO;
>  	fe_info.feparams.u.atsc.modulation = DVBFE_ATSC_MOD_VSB_8;
>  	fprintf(stdout, "tuning to %d Hz, please wait...\n", frequency);
> -	if(dvbfe_set(*fe, &fe_info.feparams, TIMEOUT * 1000)) {
> -		fprintf(stderr, "%s(): cannot lock to %d Hz in %d seconds\n",
> -			__FUNCTION__, frequency, TIMEOUT);
> +	if (dvbfe_set(*fe, &fe_info.feparams, TIMEOUT * 1000)) {
> +		error_msg("cannot lock to %d Hz in %d seconds", frequency, TIMEOUT);
>  		return -1;
>  	}
>  	fprintf(stdout, "tuner locked.\n");
> @@ -257,7 +267,7 @@ static int open_frontend(struct dvbfe_ha
>  	return 0;
>  }
>  
> -#if ENABLE_RRT
> +#ifdef ENABLE_RRT
>  /* this is untested as since this part of the library is broken */
>  static int parse_rrt(int dmxfd)
>  {
> @@ -270,20 +280,18 @@ static int parse_rrt(int dmxfd)
>  	i = 0;
>  	fprintf(stdout, "waiting for RRT: ");
>  	fflush(stdout);
> -	while(i < RRT_TIMEOUT) {
> +	while (i < RRT_TIMEOUT) {
>  		ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&rrt);
> -		if(0 > ret) {
> -			fprintf(stderr, "%s(): error calling atsc_scan_table()\n",
> -				__FUNCTION__);
> +		if (0 > ret) {
> +			error_msg("error calling atsc_scan_table()");
>  			return -1;
>  		}
> -		if(0 == ret) {
> -			if(RRT_TIMEOUT > i) {
> +		if (0 == ret) {
> +			if (RRT_TIMEOUT > i) {
>  				fprintf(stdout, ".");
>  				fflush(stdout);
>  			} else {
> -				fprintf(stdout, "\nno RRT in %d seconds\n",
> -					RRT_TIMEOUT);
> +				fprintf(stdout, "\nno RRT in %d seconds\n", RRT_TIMEOUT);
>  				return 0;
>  			}
>  			i += TIMEOUT;
> @@ -301,14 +309,13 @@ static int parse_rrt(int dmxfd)
>  		atsc_text_string_segments_for_each(atsc_str, seg, j) {
>  			const char *c;
>  			int k;
> -			if(seg->mode < 0x3E) {
> -				fprintf(stderr, "%s(): text mode of 0x%02X "
> -					"not supported yet\n",
> -					__FUNCTION__, seg->mode);
> +
> +			if (seg->mode < 0x3E) {
> +				error_msg("text mode of 0x%02X not supported yet", seg->mode);
>  				return -1;
>  			}
>  			c = (const char *)atsc_text_string_segment_bytes(seg);
> -			for(k = 0; k < seg->number_bytes; k++) {
> +			for (k = 0; k < seg->number_bytes; k++) {
>  				fprintf(stdout, "%c", c[k]);
>  			}
>  		}
> @@ -327,12 +334,11 @@ static int parse_stt(int dmxfd)
>  	int ret;
>  
>  	ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&stt);
> -	if(0 > ret) {
> -		fprintf(stderr, "%s(): error calling atsc_scan_table()\n",
> -			__FUNCTION__);
> +	if (0 > ret) {
> +		error_msg("error calling atsc_scan_table()");
>  		return -1;
>  	}
> -	if(0 == ret) {
> +	if (0 == ret) {
>  		fprintf(stdout, "no STT in %d seconds\n", TIMEOUT);
>  		return 0;
>  	}
> @@ -360,99 +366,86 @@ static int parse_tvct(int dmxfd)
>  
>  	do {
>  		ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&tvct);
> -		if(0 > ret) {
> -			fprintf(stderr, "%s(): error calling atsc_scan_table()\n",
> -			__FUNCTION__);
> +		if (0 > ret) {
> +			error_msg("error calling atsc_scan_table()");
>  			return -1;
>  		}
> -		if(0 == ret) {
> +		if (0 == ret) {
>  			fprintf(stdout, "no TVCT in %d seconds\n", TIMEOUT);
>  			return 0;
>  		}
>  
> -		if(-1 == num_sections) {
> +		if (-1 == num_sections) {
>  			num_sections = 1 + tvct->head.ext_head.last_section_number;
> -			if(32 < num_sections) {
> -				fprintf(stderr, "%s(): no support yet for "
> -					"tables having more than 32 sections\n",
> -					__FUNCTION__);
> +			if (32 < num_sections) {
> +				error_msg("no support yet for tables having more than 32 sections");
>  				return -1;
>  			}
>  		} else {
> -			if(num_sections !=
> +			if (num_sections !=
>  				1 + tvct->head.ext_head.last_section_number) {
> -				fprintf(stderr,
> -					"%s(): last section number does not match\n",
> -					__FUNCTION__);
> +				error_msg("last section number does not match");
>  				return -1;
>  			}
>  		}
> -		if(section_pattern & (1 << tvct->head.ext_head.section_number)) {
> +		if (section_pattern & (1 << tvct->head.ext_head.section_number))
>  			continue;
> -		}
> +
>  		section_pattern |= 1 << tvct->head.ext_head.section_number;
>  
> -		if(MAX_NUM_CHANNELS < guide.num_channels +
> +		if (MAX_NUM_CHANNELS < guide.num_channels +
>  			tvct->num_channels_in_section) {
> -			fprintf(stderr, "%s(): no support for more than %d "
> -				"virtual channels in a pyhsical channel\n",
> -				__FUNCTION__, MAX_NUM_CHANNELS);
> +			error_msg("no support for more than %d virtual channels in a pyhsical channel", MAX_NUM_CHANNELS);
>  			return -1;
>  		}
>  		curr_info = &guide.ch[guide.num_channels];
>  		guide.num_channels += tvct->num_channels_in_section;
>  
> -	atsc_tvct_section_channels_for_each(tvct, ch, i) {
> -		/* initialize the curr_info structure */
> -		/* each EIT covers 3 hours */
> -		curr_info->num_eits = (period / 3) + !!(period % 3);
> -		while (curr_info->num_eits &&
> -			(0xFFFF == guide.eit_pid[curr_info->num_eits - 1])) {
> -			curr_info->num_eits -= 1;
> -		}
> -		if(curr_info->eit) {
> -			fprintf(stderr, "%s(): non-NULL pointer detected "
> -				"during initialization", __FUNCTION__);
> -			return -1;
> -		}
> -		if(NULL == (curr_info->eit = calloc(curr_info->num_eits,
> -			sizeof(struct atsc_eit_info)))) {
> -			fprintf(stderr, "%s(): error calling calloc()\n",
> -				__FUNCTION__);
> -			return -1;
> -		}
> -		if(NULL == (curr_info->title_buf.string = calloc(TITLE_BUFFER_LEN,
> -			sizeof(char)))) {
> -			fprintf(stderr, "%s(): error calling calloc()\n",
> -				__FUNCTION__);
> -			return -1;
> -		}
> -		curr_info->title_buf.buf_len = TITLE_BUFFER_LEN;
> -		curr_info->title_buf.buf_pos = 0;
> +		atsc_tvct_section_channels_for_each(tvct, ch, i) {
> +			/* initialize the curr_info structure */
> +			/* each EIT covers 3 hours */
> +			curr_info->num_eits = (period / 3) + !!(period % 3);
> +			while (curr_info->num_eits &&
> +				(0xFFFF == guide.eit_pid[curr_info->num_eits - 1])) {
> +				curr_info->num_eits -= 1;
> +			}
> +			if (curr_info->eit) {
> +				error_msg("non-NULL pointer detected during initialization");
> +				return -1;
> +			}
> +			curr_info->eit = calloc(curr_info->num_eits, sizeof(struct atsc_eit_info));
> +			if (NULL == curr_info->eit) {
> +				error_msg("error calling calloc()");
> +				return -1;
> +			}
> +			curr_info->title_buf.string = calloc(TITLE_BUFFER_LEN, sizeof(char));
> +			if (NULL == curr_info->title_buf.string) {
> +				error_msg("error calling calloc()");
> +				return -1;
> +			}
> +			curr_info->title_buf.buf_len = TITLE_BUFFER_LEN;
> +			curr_info->title_buf.buf_pos = 0;
>  
> -		if(NULL == (curr_info->msg_buf.string = calloc(MESSAGE_BUFFER_LEN,
> -			sizeof(char)))) {
> -			fprintf(stderr, "%s(): error calling calloc()\n",
> -				__FUNCTION__);
> -			return -1;
> -		}
> -		curr_info->msg_buf.buf_len = MESSAGE_BUFFER_LEN;
> -		curr_info->msg_buf.buf_pos = 0;
> +			curr_info->msg_buf.string = calloc(MESSAGE_BUFFER_LEN, sizeof(char));
> +			if (NULL == curr_info->msg_buf.string) {
> +				error_msg("error calling calloc()");
> +				return -1;
> +			}
> +			curr_info->msg_buf.buf_len = MESSAGE_BUFFER_LEN;
> +			curr_info->msg_buf.buf_pos = 0;
>  
> -		for(k = 0; k < 7; k++) {
> -			curr_info->short_name[k] =
> -				get_bits((const uint8_t *)ch->short_name,
> -				k * 16, 16);
> -		}
> -		curr_info->service_type = ch->service_type;
> -		curr_info->major_num = ch->major_channel_number;
> -		curr_info->minor_num = ch->minor_channel_number;
> -		curr_info->tsid = ch->channel_TSID;
> -		curr_info->prog_num = ch->program_number;
> -		curr_info->src_id = ch->source_id;
> -		curr_info++;
> +			for (k = 0; k < 7; k++)
> +				curr_info->short_name[k] =
> +					get_bits((const uint8_t *)ch->short_name, k * 16, 16);
> +			curr_info->service_type = ch->service_type;
> +			curr_info->major_num = ch->major_channel_number;
> +			curr_info->minor_num = ch->minor_channel_number;
> +			curr_info->tsid = ch->channel_TSID;
> +			curr_info->prog_num = ch->program_number;
> +			curr_info->src_id = ch->source_id;
> +			curr_info++;
>  		}
> -	} while(section_pattern != (uint32_t)((1 << num_sections) - 1));
> +	} while (section_pattern != (uint32_t)((1 << num_sections) - 1));
>  
>  	return 0;
>  }
> @@ -463,22 +456,21 @@ static int match_event(struct atsc_eit_i
>  	int j, k;
>  	struct atsc_eit_section_info *section;
>  
> -	if(NULL == eit || NULL == event || NULL == curr_index) {
> -		fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__);
> +	if (NULL == eit || NULL == event || NULL == curr_index) {
> +		error_msg("NULL pointer detected");
>  		return -1;
>  	}
>  
> -	for(j = 0; j < eit->num_eit_sections; j++) {
> +	for (j = 0; j < eit->num_eit_sections; j++) {
>  		section = &eit->section[j];
>  
> -		for(k = 0; k < section->num_events; k++) {
> -			if(section->events[k] && section->events[k]->id ==
> -				event_id) {
> +		for (k = 0; k < section->num_events; k++) {
> +			if (section->events[k] && section->events[k]->id == event_id) {
>  				*event = section->events[k];
>  				break;
>  			}
>  		}
> -		if(*event) {
> +		if (*event) {
>  			*curr_index = j;
>  			break;
>  		}
> @@ -494,8 +486,8 @@ static int parse_message(struct atsc_cha
>  	struct atsc_text *text;
>  	struct atsc_text_string *str;
>  
> -	if(NULL == ett || NULL == event || NULL == channel) {
> -		fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__);
> +	if (NULL == ett || NULL == event || NULL == channel) {
> +		error_msg("NULL pointer detected");
>  		return -1;
>  	}
>  
> @@ -505,17 +497,11 @@ static int parse_message(struct atsc_cha
>  
>  		atsc_text_string_segments_for_each(str, seg, j) {
>  			event->msg_pos = channel->msg_buf.buf_pos;
> -			if(0 > atsc_text_segment_decode(seg,
> -				(uint8_t **)&channel->msg_buf.string,
> -				(size_t *)&channel->msg_buf.buf_len,
> -				(size_t *)&channel->msg_buf.buf_pos)) {
> -				fprintf(stderr, "%s(): error calling "
> -					"atsc_text_segment_decode()\n",
> -					__FUNCTION__);
> +			if (0 > atsc_text_segment_decode(seg, (uint8_t **)&channel->msg_buf.string, (size_t *)&channel->msg_buf.buf_len, (size_t *)&channel->msg_buf.buf_pos)) {
> +				error_msg("error calling atsc_text_segment_decode()");
>  				return -1;
>  			}
> -			event->msg_len = 1 + channel->msg_buf.buf_pos -
> -				event->msg_pos;
> +			event->msg_len = channel->msg_buf.buf_pos - event->msg_pos;
>  		}
>  	}
>  
> @@ -535,69 +521,58 @@ static int parse_ett(int dmxfd, int inde
>  	uint16_t source_id, event_id;
>  	int c, ret;
>  
> -	if(0xFFFF == guide.ett_pid[index]) {
> +	if (0xFFFF == guide.ett_pid[index])
>  		return 0;
> -	}
>  
> -	for(c = 0; c < guide.num_channels; c++) {
> +	for (c = 0; c < guide.num_channels; c++) {
>  		channel = &guide.ch[c];
>  		eit = &channel->eit[index];
>  
>  		section_pattern = 0;
> -		while(section_pattern !=
> -			(uint32_t)((1 << eit->num_eit_sections) - 1)) {
> -			if(ctrl_c) {
> +		while (section_pattern != (uint32_t)((1 << eit->num_eit_sections) - 1)) {
> +			if (ctrl_c)
>  				return 0;
> -			}
> +
>  			ret = atsc_scan_table(dmxfd, pid, tag, (void **)&ett);
>  			fprintf(stdout, ".");
>  			fflush(stdout);
> -			if(0 > ret) {
> -				fprintf(stderr, "%s(): error calling "
> -					"atsc_scan_table()\n", __FUNCTION__);
> +			if (0 > ret) {
> +				error_msg("error calling atsc_scan_table()");
>  				return -1;
>  			}
> -			if(0 == ret) {
> -				fprintf(stdout, "no ETT %d in %d seconds\n",
> -					index, TIMEOUT);
> +			if (0 == ret) {
> +				fprintf(stdout, "no ETT %d in %d seconds\n", index, TIMEOUT);
>  				return 0;
>  			}
>  
>  			source_id = ett->ETM_source_id;
>  			event_id = ett->ETM_sub_id;
> -			if(source_id != channel->src_id) {
> +			if (source_id != channel->src_id)
>  				continue;
> -			}
>  
>  			event = NULL;
> -			if(match_event(eit, event_id, &event, &curr_index)) {
> -				fprintf(stderr, "%s(): error calling "
> -					"match_event()\n", __FUNCTION__);
> +			if (match_event(eit, event_id, &event, &curr_index)) {
> +				error_msg("error calling match_event()");
>  				return -1;
>  			}
> -			if(NULL == event) {
> +			if (NULL == event)
>  				continue;
> -			}
> -			if(section_pattern & (1 << curr_index)) {
> -				/* the section has been filled, so skip,
> -				 * not consider version yet
> -				 */
> +
> +			/* the section has been filled, so skip, not consider version yet */
> +			if (section_pattern & (1 << curr_index))
>  				continue;
> -			}
> -			if(event->msg_len) {
> -				/* the message has been filled */
> +
> +			/* the message has been filled */
> +			if (event->msg_len)
>  				continue;
> -			}
>  
> -			if(parse_message(channel, ett, event)) {
> -				fprintf(stderr, "%s(): error calling "
> -					"parse_message()\n", __FUNCTION__);
> +			if (parse_message(channel, ett, event)) {
> +				error_msg("error calling parse_message()");
>  				return -1;
>  			}
>  			section = &eit->section[curr_index];
> -			if(++section->num_received_etms == section->num_etms) {
> +			if (++section->num_received_etms == section->num_etms)
>  				section_pattern |= 1 << curr_index;
> -			}
>  		}
>  	}
>  
> @@ -611,23 +586,20 @@ static int parse_events(struct atsc_chan
>  	struct atsc_eit_event *e;
>  	time_t start_time, end_time;
>  
> -	if(NULL == curr_info || NULL == eit) {
> -		fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__);
> +	if (NULL == curr_info || NULL == eit) {
> +		error_msg("NULL pointer detected");
>  		return -1;
>  	}
>  
>  	atsc_eit_section_events_for_each(eit, e, i) {
>  		struct atsc_text *title;
>  		struct atsc_text_string *str;
> -		struct atsc_event_info *e_info =
> -			&curr_info->e[curr_info->event_info_index];
> +		struct atsc_event_info *e_info = &curr_info->e[curr_info->event_info_index];
>  
> -		if(0 == i && curr_info->last_event) {
> -			if(e->event_id == curr_info->last_event->id) {
> +		if (0 == i && curr_info->last_event) {
> +			if (e->event_id == curr_info->last_event->id) {
>  				section->events[i] = NULL;
> -				/* skip if it's the same event spanning
> -				 * over sections
> -				 */
> +				/* skip if it's the same event spanning over sections */
>  				continue;
>  			}
>  		}
> @@ -638,10 +610,9 @@ static int parse_events(struct atsc_chan
>  		end_time = start_time + e->length_in_seconds;
>  		localtime_r(&start_time, &e_info->start);
>  		localtime_r(&end_time, &e_info->end);
> -		if(0 != e->ETM_location && 3 != e->ETM_location) {
> -			/* FIXME assume 1 and 2 is interchangable as of now */
> +		/* FIXME assume 1 and 2 is interchangable as of now */
> +		if (0 != e->ETM_location && 3 != e->ETM_location)
>  			section->num_etms++;
> -		}
>  
>  		title = atsc_eit_event_name_title_text(e);
>  		atsc_text_strings_for_each(title, str, j) {
> @@ -649,17 +620,11 @@ static int parse_events(struct atsc_chan
>  
>  			atsc_text_string_segments_for_each(str, seg, k) {
>  				e_info->title_pos = curr_info->title_buf.buf_pos;
> -				if(0 > atsc_text_segment_decode(seg,
> -					(uint8_t **)&curr_info->title_buf.string,
> -					(size_t *)&curr_info->title_buf.buf_len,
> -					(size_t *)&curr_info->title_buf.buf_pos)) {
> -					fprintf(stderr, "%s(): error calling "
> -						"atsc_text_segment_decode()\n",
> -						__FUNCTION__);
> +				if (0 > atsc_text_segment_decode(seg, (uint8_t **)&curr_info->title_buf.string, (size_t *)&curr_info->title_buf.buf_len, (size_t *)&curr_info->title_buf.buf_pos)) {
> +					error_msg("error calling atsc_text_segment_decode()");
>  					return -1;
>  				}
> -				e_info->title_len = curr_info->title_buf.buf_pos -
> -					e_info->title_pos + 1;
> +				e_info->title_len = curr_info->title_buf.buf_pos - e_info->title_pos;
>  			}
>  		}
>  	}
> @@ -682,8 +647,7 @@ static int parse_eit(int dmxfd, int inde
>  	uint32_t eit_instance_pattern = 0;
>  	int i, k, ret;
>  
> -	while(eit_instance_pattern !=
> -		(uint32_t)((1 << guide.num_channels) - 1)) {
> +	while (eit_instance_pattern != (uint32_t)((1 << guide.num_channels) - 1)) {
>  		source_id = 0xFFFF;
>  		section_pattern = 0;
>  		num_sections = -1;
> @@ -692,102 +656,71 @@ static int parse_eit(int dmxfd, int inde
>  			ret = atsc_scan_table(dmxfd, pid, tag, (void **)&eit);
>  			fprintf(stdout, ".");
>  			fflush(stdout);
> -			if(0 > ret) {
> -				fprintf(stderr, "%s(): error calling "
> -					"atsc_scan_table()\n", __FUNCTION__);
> +			if (0 > ret) {
> +				error_msg("error calling atsc_scan_table()");
>  				return -1;
>  			}
> -			if(0 == ret) {
> -				fprintf(stdout, "no EIT %d in %d seconds\n",
> -					index, TIMEOUT);
> +			if (0 == ret) {
> +				fprintf(stdout, "no EIT %d in %d seconds\n", index, TIMEOUT);
>  				return 0;
>  			}
>  
> -			if(0xFFFF == source_id) {
> +			if (0xFFFF == source_id) {
>  			source_id = atsc_eit_section_source_id(eit);
> -			for(k = 0; k < guide.num_channels; k++) {
> -				if(source_id == guide.ch[k].src_id) {
> +			for (k = 0; k < guide.num_channels; k++) {
> +				if (source_id == guide.ch[k].src_id) {
>  					curr_info = &guide.ch[k];
>  					curr_channel_index = k;
> -					if(0 == index) {
> +					if (0 == index)
>  						curr_info->last_event = NULL;
> -					}
>  					break;
>  				}
>  			}
> -			if(k == guide.num_channels) {
> -				fprintf(stderr, "%s(): cannot find source_id "
> -					"0x%04X in the EIT\n",
> -					__FUNCTION__, source_id);
> +			if (k == guide.num_channels) {
> +				error_msg("cannot find source_id 0x%04X in the EIT", source_id);
>  				return -1;
>  			}
>  			} else {
> -				if(source_id !=
> -					atsc_eit_section_source_id(eit)) {
> +				if (source_id != atsc_eit_section_source_id(eit))
>  					continue;
> -				}
>  			}
> -			if(eit_instance_pattern & (1 << curr_channel_index)) {
> -				/* we have received this instance,
> -				 * so quit quick
> -				 */
> +			/* if we have received this instance, quit quick */
> +			if (eit_instance_pattern & (1 << curr_channel_index))
>  				break;
> -			}
>  
> -			if(-1 == num_sections) {
> -				num_sections = 1 +
> -					eit->head.ext_head.last_section_number;
> -				if(32 < num_sections) {
> -					fprintf(stderr,
> -						"%s(): no support yet for "
> -						"tables having more than "
> -						"32 sections\n", __FUNCTION__);
> +			if (-1 == num_sections) {
> +				num_sections = 1 + eit->head.ext_head.last_section_number;
> +				if (32 < num_sections) {
> +					error_msg("no support yet for tables having more than 32 sections");
>  					return -1;
>  				}
>  			} else {
> -				if(num_sections != 1 +
> -					eit->head.ext_head.last_section_number) {
> -					fprintf(stderr,
> -						"%s(): last section number "
> -						"does not match\n",
> -						__FUNCTION__);
> +				if (num_sections != 1 + eit->head.ext_head.last_section_number) {
> +					error_msg("last section number does not match");
>  					return -1;
>  				}
>  			}
> -			if(section_pattern &
> -				(1 << eit->head.ext_head.section_number)) {
> +			if (section_pattern & (1 << eit->head.ext_head.section_number))
>  				continue;
> -			}
>  			section_pattern |= 1 << eit->head.ext_head.section_number;
>  
>  			eit_info = &curr_info->eit[index];
> -			if(NULL == (eit_info->section =
> -				realloc(eit_info->section,
> -				(eit_info->num_eit_sections + 1) *
> -				sizeof(struct atsc_eit_section_info)))) {
> -				fprintf(stderr,
> -					"%s(): error calling realloc()\n",
> -					__FUNCTION__);
> +			eit_info->section = realloc(eit_info->section, (eit_info->num_eit_sections + 1) * sizeof(struct atsc_eit_section_info));
> +			if (NULL == eit_info->section) {
> +				error_msg("error calling realloc()");
>  				return -1;
>  			}
>  			section_num = eit->head.ext_head.section_number;
> -			if(0 == eit_info->num_eit_sections) {
> +			if (0 == eit_info->num_eit_sections) {
>  				eit_info->num_eit_sections = 1;
>  				section = eit_info->section;
>  			} else {
> -				/* have to sort it into section order
> -				 * (temporal order)
> -				 */
> -				for(i = 0; i < eit_info->num_eit_sections; i++) {
> -					if(eit_info->section[i].section_num >
> -						section_num) {
> +				/* have to sort it into section order (temporal order) */
> +				for (i = 0; i < eit_info->num_eit_sections; i++) {
> +					if (eit_info->section[i].section_num > section_num)
>  						break;
> -					}
>  				}
> -				memmove(&eit_info->section[i + 1],
> -					&eit_info->section[i],
> -					(eit_info->num_eit_sections - i) *
> -					sizeof(struct atsc_eit_section_info));
> +				memmove(&eit_info->section[i + 1], &eit_info->section[i], (eit_info->num_eit_sections - i) * sizeof(struct atsc_eit_section_info));
>  				section = &eit_info->section[i - 1];
>  				section = &eit_info->section[i];
>  				eit_info->num_eit_sections += 1;
> @@ -797,33 +730,31 @@ static int parse_eit(int dmxfd, int inde
>  			section->num_events = eit->num_events_in_section;
>  			section->num_etms = 0;
>  			section->num_received_etms = 0;
> -			if(NULL == (section->events = calloc(section->num_events,
> -				sizeof(struct atsc_event_info *)))) {
> -				fprintf(stderr, "%s(): error calling calloc()\n",
> -					__FUNCTION__);
> +			section->events = calloc(section->num_events, sizeof(struct atsc_event_info *));
> +			if (NULL == section->events) {
> +				error_msg("error calling calloc()");
>  				return -1;
>  			}
> -			if(parse_events(curr_info, eit, section)) {
> -				fprintf(stderr, "%s(): error calling "
> -					"parse_events()\n", __FUNCTION__);
> +			if (parse_events(curr_info, eit, section)) {
> +				error_msg("error calling parse_events()");
>  				return -1;
>  			}
> -		} while(section_pattern != (uint32_t)((1 << num_sections) - 1));
> +		} while (section_pattern != (uint32_t)((1 << num_sections) - 1));
>  		eit_instance_pattern |= 1 << curr_channel_index;
>  	}
>  
> -	for(i = 0; i < guide.num_channels; i++) {
> +	for (i = 0; i < guide.num_channels; i++) {
>  		struct atsc_channel_info *channel = &guide.ch[i];
>  		struct atsc_eit_info *ei = &channel->eit[index];
>  		struct atsc_eit_section_info *s;
>  
> -		if(0 == ei->num_eit_sections) {
> +		if (0 == ei->num_eit_sections) {
>  			channel->last_event = NULL;
>  			continue;
>  		}
>  		s = &ei->section[ei->num_eit_sections - 1];
>  		/* BUG: it's incorrect when last section has no event */
> -		if(0 == s->num_events) {
> +		if (0 == s->num_events) {
>  			channel->last_event = NULL;
>  			continue;
>  		}
> @@ -841,12 +772,11 @@ static int parse_mgt(int dmxfd)
>  	int i, j, ret;
>  
>  	ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&mgt);
> -	if(0 > ret) {
> -		fprintf(stderr, "%s(): error calling atsc_scan_table()\n",
> -			__FUNCTION__);
> +	if (0 > ret) {
> +		error_msg("error calling atsc_scan_table()");
>  		return -1;
>  	}
> -	if(0 == ret) {
> +	if (0 == ret) {
>  		fprintf(stdout, "no MGT in %d seconds\n", TIMEOUT);
>  		return 0;
>  	}
> @@ -855,31 +785,28 @@ static int parse_mgt(int dmxfd)
>  	atsc_mgt_section_tables_for_each(mgt, t, i) {
>  		struct mgt_table_name table;
>  
> -	for(j = 0; j < (int)(sizeof(mgt_tab_name_array) /
> -		sizeof(struct mgt_table_name)); j++) {
> -		if(t->table_type > mgt_tab_name_array[j].range) {
> -			continue;
> -		}
> -		table = mgt_tab_name_array[j];
> -		if(0 == j || mgt_tab_name_array[j - 1].range + 1 ==
> -			mgt_tab_name_array[j].range) {
> -			j = -1;
> -		} else {
> -			j = t->table_type - mgt_tab_name_array[j - 1].range - 1;
> -			if(0x017F == table.range) {
> -				guide.eit_pid[j] = t->table_type_PID;
> -			} else if (0x027F == table.range) {
> -				guide.ett_pid[j] = t->table_type_PID;
> +		for (j = 0; j < (int)(sizeof(mgt_tab_name_array) / sizeof(struct mgt_table_name)); j++) {
> +			if (t->table_type > mgt_tab_name_array[j].range)
> +				continue;
> +			table = mgt_tab_name_array[j];
> +			if (0 == j || mgt_tab_name_array[j - 1].range + 1 ==
> +				mgt_tab_name_array[j].range) {
> +				j = -1;
> +			} else {
> +				j = t->table_type - mgt_tab_name_array[j - 1].range - 1;
> +				if (0x017F == table.range) {
> +					guide.eit_pid[j] = t->table_type_PID;
> +				} else if (0x027F == table.range) {
> +					guide.ett_pid[j] = t->table_type_PID;
> +				}
>  			}
> +			break;
>  		}
> -		break;
> -	}
>  
>  		fprintf(stdout, "  %2d: type = 0x%04X, PID = 0x%04X, %s", i,
> -		    t->table_type, t->table_type_PID, table.string);
> -		if(-1 != j) {
> -		    fprintf(stdout, " %d", j);
> -		}
> +			t->table_type, t->table_type_PID, table.string);
> +		if (-1 != j)
> +			fprintf(stdout, " %d", j);
>  		fprintf(stdout, "\n");
>  	}
>  
> @@ -890,32 +817,24 @@ static int cleanup_guide(void)
>  {
>  	int i, j, k;
>  
> -	for(i = 0; i < guide.num_channels; i++) {
> +	for (i = 0; i < guide.num_channels; i++) {
>  		struct atsc_channel_info *channel = &guide.ch[i];
>  
> -		if(channel->title_buf.string) {
> +		if (channel->title_buf.string)
>  			free(channel->title_buf.string);
> -		}
> -		if(channel->msg_buf.string) {
> +		if (channel->msg_buf.string)
>  			free(channel->msg_buf.string);
> -		}
> -		for(j = 0; j < channel->num_eits; j++) {
> +		for (j = 0; j < channel->num_eits; j++) {
>  			struct atsc_eit_info *eit = &channel->eit[j];
>  
> -			for(k = 0; k < eit->num_eit_sections; k++) {
> -				struct atsc_eit_section_info *section =
> -					&eit->section[k];
> -				if(section->num_events) {
> +			for (k = 0; k < eit->num_eit_sections; k++) {
> +				struct atsc_eit_section_info *section = &eit->section[k];
> +				if (section->num_events)
>  					free(section->events);
> -				}
> -			}
> -			if(k) {
> -				free(eit->section);
>  			}
> +			if (k) free(eit->section);
>  		}
> -		if(j) {
> -			free(channel->eit);
> -		}
> +		if (j) free(channel->eit);
>  	}
>  
>  	return 0;
> @@ -927,38 +846,33 @@ static int print_events(struct atsc_chan
>  	int m;
>  	char line[256];
>  
> -	if(NULL == section) {
> -		fprintf(stderr, "%s(): NULL pointer detected", __FUNCTION__);
> +	if (NULL == section) {
> +		error_msg("NULL pointer detected");
>  		return -1;
>  	}
> -	for(m = 0; m < section->num_events; m++) {
> +	for (m = 0; m < section->num_events; m++) {
>  		struct atsc_event_info *event =
>  			section->events[m];
>  
> -		if(NULL == event) {
> +		if (NULL == event)
>  			continue;
> -		}
> -		fprintf(stdout, "|%02d:%02d--%02d:%02d| ",
> -			event->start.tm_hour, event->start.tm_min,
> -			event->end.tm_hour, event->end.tm_min);
> -		snprintf(line, event->title_len, "%s",
> -			&channel->title_buf.string[event->title_pos]);
> -		line[event->title_len] = '\0';
> +		fprintf(stdout, "|%02d:%02d--%02d:%02d| ", event->start.tm_hour, event->start.tm_min, event->end.tm_hour, event->end.tm_min);
> +		snprintf(line, event->title_len + 1, "%s", &channel->title_buf.string[event->title_pos]);
> +		/*line[event->title_len] = '\0';*/
>  		fprintf(stdout, "%s\n", line);
> -		if(event->msg_len) {
> +		if (event->msg_len) {
>  			int len = event->msg_len;
>  			int pos = event->msg_pos;
>  			size_t part;
>  
>  			do {
>  				part = len > 255 ? 255 : len;
> -				snprintf(line, part, "%s",
> -					&channel->msg_buf.string[pos]);
> -				line[part] = '\0';
> +				snprintf(line, part + 1, "%s", &channel->msg_buf.string[pos]);
> +				/*line[part] = '\0';*/
>  				fprintf(stdout, "%s", line);
>  				len -= part;
>  				pos += part;
> -			} while(0 < len);
> +			} while (0 < len);
>  			fprintf(stdout, "\n");
>  		}
>  	}
> @@ -970,20 +884,17 @@ static int print_guide(void)
>  	int i, j, k;
>  
>  	fprintf(stdout, "%s\n", separator);
> -	for(i = 0; i < guide.num_channels; i++) {
> +	for (i = 0; i < guide.num_channels; i++) {
>  		struct atsc_channel_info *channel = &guide.ch[i];
>  
> -		fprintf(stdout, "%d.%d  %s\n", channel->major_num,
> -			channel->minor_num, channel->short_name);
> -		for(j = 0; j < channel->num_eits; j++) {
> +		fprintf(stdout, "%d.%d  %s\n", channel->major_num, channel->minor_num, channel->short_name);
> +		for (j = 0; j < channel->num_eits; j++) {
>  			struct atsc_eit_info *eit = &channel->eit[j];
>  
> -			for(k = 0; k < eit->num_eit_sections; k++) {
> -				struct atsc_eit_section_info *section =
> -					&eit->section[k];
> -				if(print_events(channel, section)) {
> -					fprintf(stderr, "%s(): error calling "
> -						"print_events()\n", __FUNCTION__);
> +			for (k = 0; k < eit->num_eit_sections; k++) {
> +				struct atsc_eit_section_info *section = &eit->section[k];
> +				if (print_events(channel, section)) {
> +					error_msg("error calling print_events()");
>  					return -1;
>  				}
>  			}
> @@ -996,9 +907,8 @@ static int print_guide(void)
>  
>  static int open_demux(int *dmxfd)
>  {
> -	if((*dmxfd = dvbdemux_open_demux(adapter, 0, 0)) < 0) {
> -		fprintf(stderr, "%s(): error calling dvbdemux_open_demux()\n",
> -			__FUNCTION__);
> +	if ((*dmxfd = dvbdemux_open_demux(adapter, 0, 0)) < 0) {
> +		error_msg("error calling dvbdemux_open_demux()");
>  		return -1;
>  	}
>  	return 0;
> @@ -1006,9 +916,8 @@ static int open_demux(int *dmxfd)
>  
>  static int close_demux(int dmxfd)
>  {
> -	if(dvbdemux_stop(dmxfd)) {
> -		fprintf(stderr, "%s(): error calling dvbdemux_stop()\n",
> -			__FUNCTION__);
> +	if (dvbdemux_stop(dmxfd)) {
> +		error_msg("error calling dvbdemux_stop()");
>  		return -1;
>  	}
>  	return 0;
> @@ -1033,60 +942,52 @@ static int atsc_scan_table(int dmxfd, ui
>  	memset(mask, 0, sizeof(mask));
>  	filter[0] = tag;
>  	mask[0] = 0xFF;
> -	if(dvbdemux_set_section_filter(dmxfd, pid, filter, mask, 1, 1)) {
> -		fprintf(stderr, "%s(): error calling atsc_scan_table()\n",
> -			__FUNCTION__);
> +	if (dvbdemux_set_section_filter(dmxfd, pid, filter, mask, 1, 1)) {
> +		error_msg("error calling atsc_scan_table()");
>  		return -1;
>  	}
>  
>  	/* poll for data */
>  	pollfd.fd = dmxfd;
>  	pollfd.events = POLLIN | POLLERR |POLLPRI;
> -	if((ret = poll(&pollfd, 1, TIMEOUT * 1000)) < 0) {
> -		if(ctrl_c) {
> +	if ((ret = poll(&pollfd, 1, TIMEOUT * 1000)) < 0) {
> +		if (ctrl_c)
>  			return 0;
> -		}
> -		fprintf(stderr, "%s(): error calling poll()\n", __FUNCTION__);
> +		error_msg("error calling poll()");
>  		return -1;
>  	}
>  
> -	if(0 == ret) {
> +	if (0 == ret)
>  		return 0;
> -	}
>  
>  	/* read it */
> -	if((size = read(dmxfd, sibuf, sizeof(sibuf))) < 0) {
> -		fprintf(stderr, "%s(): error calling read()\n", __FUNCTION__);
> +	if ((size = read(dmxfd, sibuf, sizeof(sibuf))) < 0) {
> +		error_msg("error calling read()");
>  		return -1;
>  	}
>  
>  	/* parse section */
>  	section = section_codec(sibuf, size);
> -	if(NULL == section) {
> -		fprintf(stderr, "%s(): error calling section_codec()\n",
> -			__FUNCTION__);
> +	if (NULL == section) {
> +		error_msg("error calling section_codec()");
>  		return -1;
>  	}
>  
>  	section_ext = section_ext_decode(section, 0);
> -	if(NULL == section_ext) {
> -		fprintf(stderr, "%s(): error calling section_ext_decode()\n",
> -			__FUNCTION__);
> +	if (NULL == section_ext) {
> +		error_msg("error calling section_ext_decode()");
>  		return -1;
>  	}
>  
>  	psip = atsc_section_psip_decode(section_ext);
> -	if(NULL == psip) {
> -		fprintf(stderr,
> -			"%s(): error calling atsc_section_psip_decode()\n",
> -			__FUNCTION__);
> +	if (NULL == psip) {
> +		error_msg("error calling atsc_section_psip_decode()");
>  		return -1;
>  	}
>  
>  	*table_section = table_callback[tag & 0x0F](psip);
> -	if(NULL == *table_section) {
> -		fprintf(stderr, "%s(): error decode table section\n",
> -			__FUNCTION__);
> +	if (NULL == *table_section) {
> +		error_msg("error decode table section");
>  		return -1;
>  	}
>  
> @@ -1100,17 +1001,16 @@ int main(int argc, char *argv[])
>  
>  	program = argv[0];
>  
> -	if(1 == argc) {
> +	if (1 == argc) {
>  		usage();
>  		exit(-1);
>  	}
>  
> -	for( ; ; ) {
> +	for ( ; ; ) {
>  		char c;
>  
> -		if(-1 == (c = getopt(argc, argv, "a:f:p:m:th"))) {
> +		if (-1 == (c = getopt(argc, argv, "a:f:p:m:th")))
>  			break;
> -		}
>  
>  		switch(c) {
>  		case 'a':
> @@ -1124,9 +1024,8 @@ int main(int argc, char *argv[])
>  		case 'p':
>  			period = strtol(optarg, NULL, 0);
>  			/* each table covers 3 hours */
> -			if((3 * MAX_NUM_EVENT_TABLES) < period) {
> +			if ((3 * MAX_NUM_EVENT_TABLES) < period)
>  				period = 3 * MAX_NUM_EVENT_TABLES;
> -			}
>  			break;
>  
>  		case 'm':
> @@ -1154,94 +1053,81 @@ int main(int argc, char *argv[])
>  	memset(guide.eit_pid, 0xFF, MAX_NUM_EVENT_TABLES * sizeof(uint16_t));
>  	memset(guide.ett_pid, 0xFF, MAX_NUM_EVENT_TABLES * sizeof(uint16_t));
>  
> -	if(open_frontend(&fe)) {
> -		fprintf(stderr, "%s(): error calling open_frontend()\n",
> -			__FUNCTION__);
> +	if (open_frontend(&fe)) {
> +		error_msg("error calling open_frontend()");
>  		return -1;
>  	}
>  
> -	if(open_demux(&dmxfd)) {
> -		fprintf(stderr, "%s(): error calling open_demux()\n",
> -			__FUNCTION__);
> +	if (open_demux(&dmxfd)) {
> +		error_msg("error calling open_demux()");
>  		return -1;
>  	}
>  
> -	if(parse_stt(dmxfd)) {
> -		fprintf(stderr, "%s(): error calling parse_stt()\n",
> -			__FUNCTION__);
> +	if (parse_stt(dmxfd)) {
> +		error_msg("error calling parse_stt()");
>  		return -1;
>  	}
>  
> -	if(parse_mgt(dmxfd)) {
> -		fprintf(stderr, "%s(): error calling parse_mgt()\n",
> -			__FUNCTION__);
> +	if (parse_mgt(dmxfd)) {
> +		error_msg("error calling parse_mgt()");
>  		return -1;
>  	}
>  
> -	if(parse_tvct(dmxfd)) {
> -		fprintf(stderr, "%s(): error calling parse_tvct()\n",
> -			__FUNCTION__);
> +	if (parse_tvct(dmxfd)) {
> +		error_msg("error calling parse_tvct()");
>  		return -1;
>  	}
>  
>  #ifdef ENABLE_RRT
> -	if(parse_rrt(dmxfd)) {
> -		fprintf(stderr, "%s(): error calling parse_rrt()\n",
> -			__FUNCTION__);
> +	if (parse_rrt(dmxfd)) {
> +		error_msg("error calling parse_rrt()");
>  		return -1;
>  	}
>  #endif
>  
>  	fprintf(stdout, "receiving EIT ");
> -	for(i = 0; i < guide.ch[0].num_eits; i++) {
> -		if(parse_eit(dmxfd, i, guide.eit_pid[i])) {
> -			fprintf(stderr, "%s(): error calling parse_eit()\n",
> -				__FUNCTION__);
> +	for (i = 0; i < guide.ch[0].num_eits; i++) {
> +		if (parse_eit(dmxfd, i, guide.eit_pid[i])) {
> +			error_msg("error calling parse_eit()");
>  			return -1;
>  		}
>  	}
>  	fprintf(stdout, "\n");
>  
>  	old_handler = signal(SIGINT, int_handler);
> -	if(enable_ett) {
> +	if (enable_ett) {
>  		fprintf(stdout, "receiving ETT ");
> -		for(i = 0; i < guide.ch[0].num_eits; i++) {
> -			if(0xFFFF != guide.ett_pid[i]) {
> -				if(parse_ett(dmxfd, i, guide.ett_pid[i])) {
> -					fprintf(stderr, "%s(): error calling "
> -						"parse_eit()\n", __FUNCTION__);
> +		for (i = 0; i < guide.ch[0].num_eits; i++) {
> +			if (0xFFFF != guide.ett_pid[i]) {
> +				if (parse_ett(dmxfd, i, guide.ett_pid[i])) {
> +					error_msg("error calling parse_eit()");
>  					return -1;
>  				}
>  			}
> -			if(ctrl_c) {
> +			if (ctrl_c)
>  				break;
> -			}
>  		}
>  		fprintf(stdout, "\n");
>  	}
>  	signal(SIGINT, old_handler);
>  
> -	if(print_guide()) {
> -		fprintf(stderr, "%s(): error calling print_guide()\n",
> -			__FUNCTION__);
> +	if (print_guide()) {
> +		error_msg("error calling print_guide()");
>  		return -1;
>  	}
>  
> -	if(cleanup_guide()) {
> -		fprintf(stderr, "%s(): error calling cleanup_guide()\n",
> -			__FUNCTION__);
> +	if (cleanup_guide()) {
> +		error_msg("error calling cleanup_guide()");
>  		return -1;
>  	}
>  
> -	if(close_demux(dmxfd)) {
> -		fprintf(stderr, "%s(): error calling close_demux()\n",
> -			__FUNCTION__);
> +	if (close_demux(dmxfd)) {
> +		error_msg("error calling close_demux()");
>  		return -1;
>  	}
>  
> -	if(close_frontend(fe)) {
> -		fprintf(stderr, "%s(): error calling close_demux()\n",
> -			__FUNCTION__);
> +	if (close_frontend(fe)) {
> +		error_msg("error calling close_demux()");
>  		return -1;
>  	}
>  
> diff -upr dvb-apps/util/scan/Makefile dvb-apps_local/util/scan/Makefile
> --- dvb-apps/util/scan/Makefile	2009-06-22 12:13:04.171925478 -0500
> +++ dvb-apps_local/util/scan/Makefile	2009-06-22 12:17:48.000000000 -0500
> @@ -14,7 +14,7 @@ inst_bin = $(binaries)
>  
>  removing = atsc_psip_section.c atsc_psip_section.h
>  
> -CPPFLAGS += -DDATADIR=\"$(prefix)/share\"
> +CPPFLAGS += -Wno-packed-bitfield-compat -D__KERNEL_STRICT_NAMES -DDATADIR=\"$(prefix)/share\"
>  
>  .PHONY: all


--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff -upr dvb-apps/util/atsc_epg/atsc_epg.c dvb-apps_local/util/atsc_epg/atsc_epg.c
--- dvb-apps/util/atsc_epg/atsc_epg.c	2009-06-22 12:13:04.136925772 -0500
+++ dvb-apps_local/util/atsc_epg/atsc_epg.c	2009-06-22 13:17:15.287986505 -0500
@@ -20,6 +20,7 @@ 
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdarg.h>
 #include <unistd.h>
 #include <string.h>
 #include <time.h>
@@ -46,6 +47,18 @@ 
 #define MAX_NUM_CHANNELS		16
 #define MAX_NUM_EVENTS_PER_CHANNEL	(4 * 24 * 7)
 
+static inline void print_error(const char *s, const char *f, ...)
+{
+	va_list ap;
+
+	va_start(ap, f);
+	fprintf(stderr, "%s(): ", s);
+	vfprintf(stderr, f, ap);
+	fprintf(stderr, "\n");
+}
+
+#define error_msg(format, ...) print_error(__FUNCTION__, format, ## __VA_ARGS__)
+
 static int atsc_scan_table(int dmxfd, uint16_t pid, enum atsc_section_tag tag,
 	void **table_section);
 
@@ -168,9 +181,8 @@  void *(*table_callback[16])(struct atsc_
 
 static void int_handler(int sig_num)
 {
-	if(SIGINT != sig_num) {
+	if (SIGINT != sig_num)
 		return;
-	}
 	ctrl_c = 1;
 }
 
@@ -219,8 +231,9 @@  static void help(void)
 
 static int close_frontend(struct dvbfe_handle *fe)
 {
-	if(NULL == fe) {
-		fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__);
+	if (NULL == fe) {
+		error_msg("NULL pointer detected");
+		return -1;
 	}
 
 	dvbfe_close(fe);
@@ -232,24 +245,21 @@  static int open_frontend(struct dvbfe_ha
 {
 	struct dvbfe_info fe_info;
 
-	if(NULL == (*fe = dvbfe_open(adapter, 0, 0))) {
-		fprintf(stderr, "%s(): error calling dvbfe_open()\n",
-			__FUNCTION__);
+	if (NULL == (*fe = dvbfe_open(adapter, 0, 0))) {
+		error_msg("error calling dvbfe_open()");
 		return -1;
 	}
 	dvbfe_get_info(*fe, 0, &fe_info, DVBFE_INFO_QUERYTYPE_IMMEDIATE, 0);
-	if(DVBFE_TYPE_ATSC != fe_info.type) {
-		fprintf(stderr, "%s(): only ATSC frontend supported currently\n",
-			__FUNCTION__);
+	if (DVBFE_TYPE_ATSC != fe_info.type) {
+		error_msg("only ATSC frontend supported currently");
 		return -1;
 	}
 	fe_info.feparams.frequency = frequency;
 	fe_info.feparams.inversion = DVBFE_INVERSION_AUTO;
 	fe_info.feparams.u.atsc.modulation = DVBFE_ATSC_MOD_VSB_8;
 	fprintf(stdout, "tuning to %d Hz, please wait...\n", frequency);
-	if(dvbfe_set(*fe, &fe_info.feparams, TIMEOUT * 1000)) {
-		fprintf(stderr, "%s(): cannot lock to %d Hz in %d seconds\n",
-			__FUNCTION__, frequency, TIMEOUT);
+	if (dvbfe_set(*fe, &fe_info.feparams, TIMEOUT * 1000)) {
+		error_msg("cannot lock to %d Hz in %d seconds", frequency, TIMEOUT);
 		return -1;
 	}
 	fprintf(stdout, "tuner locked.\n");
@@ -257,7 +267,7 @@  static int open_frontend(struct dvbfe_ha
 	return 0;
 }
 
-#if ENABLE_RRT
+#ifdef ENABLE_RRT
 /* this is untested as since this part of the library is broken */
 static int parse_rrt(int dmxfd)
 {
@@ -270,20 +280,18 @@  static int parse_rrt(int dmxfd)
 	i = 0;
 	fprintf(stdout, "waiting for RRT: ");
 	fflush(stdout);
-	while(i < RRT_TIMEOUT) {
+	while (i < RRT_TIMEOUT) {
 		ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&rrt);
-		if(0 > ret) {
-			fprintf(stderr, "%s(): error calling atsc_scan_table()\n",
-				__FUNCTION__);
+		if (0 > ret) {
+			error_msg("error calling atsc_scan_table()");
 			return -1;
 		}
-		if(0 == ret) {
-			if(RRT_TIMEOUT > i) {
+		if (0 == ret) {
+			if (RRT_TIMEOUT > i) {
 				fprintf(stdout, ".");
 				fflush(stdout);
 			} else {
-				fprintf(stdout, "\nno RRT in %d seconds\n",
-					RRT_TIMEOUT);
+				fprintf(stdout, "\nno RRT in %d seconds\n", RRT_TIMEOUT);
 				return 0;
 			}
 			i += TIMEOUT;
@@ -301,14 +309,13 @@  static int parse_rrt(int dmxfd)
 		atsc_text_string_segments_for_each(atsc_str, seg, j) {
 			const char *c;
 			int k;
-			if(seg->mode < 0x3E) {
-				fprintf(stderr, "%s(): text mode of 0x%02X "
-					"not supported yet\n",
-					__FUNCTION__, seg->mode);
+
+			if (seg->mode < 0x3E) {
+				error_msg("text mode of 0x%02X not supported yet", seg->mode);
 				return -1;
 			}
 			c = (const char *)atsc_text_string_segment_bytes(seg);
-			for(k = 0; k < seg->number_bytes; k++) {
+			for (k = 0; k < seg->number_bytes; k++) {
 				fprintf(stdout, "%c", c[k]);
 			}
 		}
@@ -327,12 +334,11 @@  static int parse_stt(int dmxfd)
 	int ret;
 
 	ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&stt);
-	if(0 > ret) {
-		fprintf(stderr, "%s(): error calling atsc_scan_table()\n",
-			__FUNCTION__);
+	if (0 > ret) {
+		error_msg("error calling atsc_scan_table()");
 		return -1;
 	}
-	if(0 == ret) {
+	if (0 == ret) {
 		fprintf(stdout, "no STT in %d seconds\n", TIMEOUT);
 		return 0;
 	}
@@ -360,99 +366,86 @@  static int parse_tvct(int dmxfd)
 
 	do {
 		ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&tvct);
-		if(0 > ret) {
-			fprintf(stderr, "%s(): error calling atsc_scan_table()\n",
-			__FUNCTION__);
+		if (0 > ret) {
+			error_msg("error calling atsc_scan_table()");
 			return -1;
 		}
-		if(0 == ret) {
+		if (0 == ret) {
 			fprintf(stdout, "no TVCT in %d seconds\n", TIMEOUT);
 			return 0;
 		}
 
-		if(-1 == num_sections) {
+		if (-1 == num_sections) {
 			num_sections = 1 + tvct->head.ext_head.last_section_number;
-			if(32 < num_sections) {
-				fprintf(stderr, "%s(): no support yet for "
-					"tables having more than 32 sections\n",
-					__FUNCTION__);
+			if (32 < num_sections) {
+				error_msg("no support yet for tables having more than 32 sections");
 				return -1;
 			}
 		} else {
-			if(num_sections !=
+			if (num_sections !=
 				1 + tvct->head.ext_head.last_section_number) {
-				fprintf(stderr,
-					"%s(): last section number does not match\n",
-					__FUNCTION__);
+				error_msg("last section number does not match");
 				return -1;
 			}
 		}
-		if(section_pattern & (1 << tvct->head.ext_head.section_number)) {
+		if (section_pattern & (1 << tvct->head.ext_head.section_number))
 			continue;
-		}
+
 		section_pattern |= 1 << tvct->head.ext_head.section_number;
 
-		if(MAX_NUM_CHANNELS < guide.num_channels +
+		if (MAX_NUM_CHANNELS < guide.num_channels +
 			tvct->num_channels_in_section) {
-			fprintf(stderr, "%s(): no support for more than %d "
-				"virtual channels in a pyhsical channel\n",
-				__FUNCTION__, MAX_NUM_CHANNELS);
+			error_msg("no support for more than %d virtual channels in a pyhsical channel", MAX_NUM_CHANNELS);
 			return -1;
 		}
 		curr_info = &guide.ch[guide.num_channels];
 		guide.num_channels += tvct->num_channels_in_section;
 
-	atsc_tvct_section_channels_for_each(tvct, ch, i) {
-		/* initialize the curr_info structure */
-		/* each EIT covers 3 hours */
-		curr_info->num_eits = (period / 3) + !!(period % 3);
-		while (curr_info->num_eits &&
-			(0xFFFF == guide.eit_pid[curr_info->num_eits - 1])) {
-			curr_info->num_eits -= 1;
-		}
-		if(curr_info->eit) {
-			fprintf(stderr, "%s(): non-NULL pointer detected "
-				"during initialization", __FUNCTION__);
-			return -1;
-		}
-		if(NULL == (curr_info->eit = calloc(curr_info->num_eits,
-			sizeof(struct atsc_eit_info)))) {
-			fprintf(stderr, "%s(): error calling calloc()\n",
-				__FUNCTION__);
-			return -1;
-		}
-		if(NULL == (curr_info->title_buf.string = calloc(TITLE_BUFFER_LEN,
-			sizeof(char)))) {
-			fprintf(stderr, "%s(): error calling calloc()\n",
-				__FUNCTION__);
-			return -1;
-		}
-		curr_info->title_buf.buf_len = TITLE_BUFFER_LEN;
-		curr_info->title_buf.buf_pos = 0;
+		atsc_tvct_section_channels_for_each(tvct, ch, i) {
+			/* initialize the curr_info structure */
+			/* each EIT covers 3 hours */
+			curr_info->num_eits = (period / 3) + !!(period % 3);
+			while (curr_info->num_eits &&
+				(0xFFFF == guide.eit_pid[curr_info->num_eits - 1])) {
+				curr_info->num_eits -= 1;
+			}
+			if (curr_info->eit) {
+				error_msg("non-NULL pointer detected during initialization");
+				return -1;
+			}
+			curr_info->eit = calloc(curr_info->num_eits, sizeof(struct atsc_eit_info));
+			if (NULL == curr_info->eit) {
+				error_msg("error calling calloc()");
+				return -1;
+			}
+			curr_info->title_buf.string = calloc(TITLE_BUFFER_LEN, sizeof(char));
+			if (NULL == curr_info->title_buf.string) {
+				error_msg("error calling calloc()");
+				return -1;
+			}
+			curr_info->title_buf.buf_len = TITLE_BUFFER_LEN;
+			curr_info->title_buf.buf_pos = 0;
 
-		if(NULL == (curr_info->msg_buf.string = calloc(MESSAGE_BUFFER_LEN,
-			sizeof(char)))) {
-			fprintf(stderr, "%s(): error calling calloc()\n",
-				__FUNCTION__);
-			return -1;
-		}
-		curr_info->msg_buf.buf_len = MESSAGE_BUFFER_LEN;
-		curr_info->msg_buf.buf_pos = 0;
+			curr_info->msg_buf.string = calloc(MESSAGE_BUFFER_LEN, sizeof(char));
+			if (NULL == curr_info->msg_buf.string) {
+				error_msg("error calling calloc()");
+				return -1;
+			}
+			curr_info->msg_buf.buf_len = MESSAGE_BUFFER_LEN;
+			curr_info->msg_buf.buf_pos = 0;
 
-		for(k = 0; k < 7; k++) {
-			curr_info->short_name[k] =
-				get_bits((const uint8_t *)ch->short_name,
-				k * 16, 16);
-		}
-		curr_info->service_type = ch->service_type;
-		curr_info->major_num = ch->major_channel_number;
-		curr_info->minor_num = ch->minor_channel_number;
-		curr_info->tsid = ch->channel_TSID;
-		curr_info->prog_num = ch->program_number;
-		curr_info->src_id = ch->source_id;
-		curr_info++;
+			for (k = 0; k < 7; k++)
+				curr_info->short_name[k] =
+					get_bits((const uint8_t *)ch->short_name, k * 16, 16);
+			curr_info->service_type = ch->service_type;
+			curr_info->major_num = ch->major_channel_number;
+			curr_info->minor_num = ch->minor_channel_number;
+			curr_info->tsid = ch->channel_TSID;
+			curr_info->prog_num = ch->program_number;
+			curr_info->src_id = ch->source_id;
+			curr_info++;
 		}
-	} while(section_pattern != (uint32_t)((1 << num_sections) - 1));
+	} while (section_pattern != (uint32_t)((1 << num_sections) - 1));
 
 	return 0;
 }
@@ -463,22 +456,21 @@  static int match_event(struct atsc_eit_i
 	int j, k;
 	struct atsc_eit_section_info *section;
 
-	if(NULL == eit || NULL == event || NULL == curr_index) {
-		fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__);
+	if (NULL == eit || NULL == event || NULL == curr_index) {
+		error_msg("NULL pointer detected");
 		return -1;
 	}
 
-	for(j = 0; j < eit->num_eit_sections; j++) {
+	for (j = 0; j < eit->num_eit_sections; j++) {
 		section = &eit->section[j];
 
-		for(k = 0; k < section->num_events; k++) {
-			if(section->events[k] && section->events[k]->id ==
-				event_id) {
+		for (k = 0; k < section->num_events; k++) {
+			if (section->events[k] && section->events[k]->id == event_id) {
 				*event = section->events[k];
 				break;
 			}
 		}
-		if(*event) {
+		if (*event) {
 			*curr_index = j;
 			break;
 		}
@@ -494,8 +486,8 @@  static int parse_message(struct atsc_cha
 	struct atsc_text *text;
 	struct atsc_text_string *str;
 
-	if(NULL == ett || NULL == event || NULL == channel) {
-		fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__);
+	if (NULL == ett || NULL == event || NULL == channel) {
+		error_msg("NULL pointer detected");
 		return -1;
 	}
 
@@ -505,17 +497,11 @@  static int parse_message(struct atsc_cha
 
 		atsc_text_string_segments_for_each(str, seg, j) {
 			event->msg_pos = channel->msg_buf.buf_pos;
-			if(0 > atsc_text_segment_decode(seg,
-				(uint8_t **)&channel->msg_buf.string,
-				(size_t *)&channel->msg_buf.buf_len,
-				(size_t *)&channel->msg_buf.buf_pos)) {
-				fprintf(stderr, "%s(): error calling "
-					"atsc_text_segment_decode()\n",
-					__FUNCTION__);
+			if (0 > atsc_text_segment_decode(seg, (uint8_t **)&channel->msg_buf.string, (size_t *)&channel->msg_buf.buf_len, (size_t *)&channel->msg_buf.buf_pos)) {
+				error_msg("error calling atsc_text_segment_decode()");
 				return -1;
 			}
-			event->msg_len = 1 + channel->msg_buf.buf_pos -
-				event->msg_pos;
+			event->msg_len = channel->msg_buf.buf_pos - event->msg_pos;
 		}
 	}
 
@@ -535,69 +521,58 @@  static int parse_ett(int dmxfd, int inde
 	uint16_t source_id, event_id;
 	int c, ret;
 
-	if(0xFFFF == guide.ett_pid[index]) {
+	if (0xFFFF == guide.ett_pid[index])
 		return 0;
-	}
 
-	for(c = 0; c < guide.num_channels; c++) {
+	for (c = 0; c < guide.num_channels; c++) {
 		channel = &guide.ch[c];
 		eit = &channel->eit[index];
 
 		section_pattern = 0;
-		while(section_pattern !=
-			(uint32_t)((1 << eit->num_eit_sections) - 1)) {
-			if(ctrl_c) {
+		while (section_pattern != (uint32_t)((1 << eit->num_eit_sections) - 1)) {
+			if (ctrl_c)
 				return 0;
-			}
+
 			ret = atsc_scan_table(dmxfd, pid, tag, (void **)&ett);
 			fprintf(stdout, ".");
 			fflush(stdout);
-			if(0 > ret) {
-				fprintf(stderr, "%s(): error calling "
-					"atsc_scan_table()\n", __FUNCTION__);
+			if (0 > ret) {
+				error_msg("error calling atsc_scan_table()");
 				return -1;
 			}
-			if(0 == ret) {
-				fprintf(stdout, "no ETT %d in %d seconds\n",
-					index, TIMEOUT);
+			if (0 == ret) {
+				fprintf(stdout, "no ETT %d in %d seconds\n", index, TIMEOUT);
 				return 0;
 			}
 
 			source_id = ett->ETM_source_id;
 			event_id = ett->ETM_sub_id;
-			if(source_id != channel->src_id) {
+			if (source_id != channel->src_id)
 				continue;
-			}
 
 			event = NULL;
-			if(match_event(eit, event_id, &event, &curr_index)) {
-				fprintf(stderr, "%s(): error calling "
-					"match_event()\n", __FUNCTION__);
+			if (match_event(eit, event_id, &event, &curr_index)) {
+				error_msg("error calling match_event()");
 				return -1;
 			}
-			if(NULL == event) {
+			if (NULL == event)
 				continue;
-			}
-			if(section_pattern & (1 << curr_index)) {
-				/* the section has been filled, so skip,
-				 * not consider version yet
-				 */
+
+			/* the section has been filled, so skip, not consider version yet */
+			if (section_pattern & (1 << curr_index))
 				continue;
-			}
-			if(event->msg_len) {
-				/* the message has been filled */
+
+			/* the message has been filled */
+			if (event->msg_len)
 				continue;
-			}
 
-			if(parse_message(channel, ett, event)) {
-				fprintf(stderr, "%s(): error calling "
-					"parse_message()\n", __FUNCTION__);
+			if (parse_message(channel, ett, event)) {
+				error_msg("error calling parse_message()");
 				return -1;
 			}
 			section = &eit->section[curr_index];
-			if(++section->num_received_etms == section->num_etms) {
+			if (++section->num_received_etms == section->num_etms)
 				section_pattern |= 1 << curr_index;
-			}
 		}
 	}
 
@@ -611,23 +586,20 @@  static int parse_events(struct atsc_chan
 	struct atsc_eit_event *e;
 	time_t start_time, end_time;
 
-	if(NULL == curr_info || NULL == eit) {
-		fprintf(stderr, "%s(): NULL pointer detected\n", __FUNCTION__);
+	if (NULL == curr_info || NULL == eit) {
+		error_msg("NULL pointer detected");
 		return -1;
 	}
 
 	atsc_eit_section_events_for_each(eit, e, i) {
 		struct atsc_text *title;
 		struct atsc_text_string *str;
-		struct atsc_event_info *e_info =
-			&curr_info->e[curr_info->event_info_index];
+		struct atsc_event_info *e_info = &curr_info->e[curr_info->event_info_index];
 
-		if(0 == i && curr_info->last_event) {
-			if(e->event_id == curr_info->last_event->id) {
+		if (0 == i && curr_info->last_event) {
+			if (e->event_id == curr_info->last_event->id) {
 				section->events[i] = NULL;
-				/* skip if it's the same event spanning
-				 * over sections
-				 */
+				/* skip if it's the same event spanning over sections */
 				continue;
 			}
 		}
@@ -638,10 +610,9 @@  static int parse_events(struct atsc_chan
 		end_time = start_time + e->length_in_seconds;
 		localtime_r(&start_time, &e_info->start);
 		localtime_r(&end_time, &e_info->end);
-		if(0 != e->ETM_location && 3 != e->ETM_location) {
-			/* FIXME assume 1 and 2 is interchangable as of now */
+		/* FIXME assume 1 and 2 is interchangable as of now */
+		if (0 != e->ETM_location && 3 != e->ETM_location)
 			section->num_etms++;
-		}
 
 		title = atsc_eit_event_name_title_text(e);
 		atsc_text_strings_for_each(title, str, j) {
@@ -649,17 +620,11 @@  static int parse_events(struct atsc_chan
 
 			atsc_text_string_segments_for_each(str, seg, k) {
 				e_info->title_pos = curr_info->title_buf.buf_pos;
-				if(0 > atsc_text_segment_decode(seg,
-					(uint8_t **)&curr_info->title_buf.string,
-					(size_t *)&curr_info->title_buf.buf_len,
-					(size_t *)&curr_info->title_buf.buf_pos)) {
-					fprintf(stderr, "%s(): error calling "
-						"atsc_text_segment_decode()\n",
-						__FUNCTION__);
+				if (0 > atsc_text_segment_decode(seg, (uint8_t **)&curr_info->title_buf.string, (size_t *)&curr_info->title_buf.buf_len, (size_t *)&curr_info->title_buf.buf_pos)) {
+					error_msg("error calling atsc_text_segment_decode()");
 					return -1;
 				}
-				e_info->title_len = curr_info->title_buf.buf_pos -
-					e_info->title_pos + 1;
+				e_info->title_len = curr_info->title_buf.buf_pos - e_info->title_pos;
 			}
 		}
 	}
@@ -682,8 +647,7 @@  static int parse_eit(int dmxfd, int inde
 	uint32_t eit_instance_pattern = 0;
 	int i, k, ret;
 
-	while(eit_instance_pattern !=
-		(uint32_t)((1 << guide.num_channels) - 1)) {
+	while (eit_instance_pattern != (uint32_t)((1 << guide.num_channels) - 1)) {
 		source_id = 0xFFFF;
 		section_pattern = 0;
 		num_sections = -1;
@@ -692,102 +656,71 @@  static int parse_eit(int dmxfd, int inde
 			ret = atsc_scan_table(dmxfd, pid, tag, (void **)&eit);
 			fprintf(stdout, ".");
 			fflush(stdout);
-			if(0 > ret) {
-				fprintf(stderr, "%s(): error calling "
-					"atsc_scan_table()\n", __FUNCTION__);
+			if (0 > ret) {
+				error_msg("error calling atsc_scan_table()");
 				return -1;
 			}
-			if(0 == ret) {
-				fprintf(stdout, "no EIT %d in %d seconds\n",
-					index, TIMEOUT);
+			if (0 == ret) {
+				fprintf(stdout, "no EIT %d in %d seconds\n", index, TIMEOUT);
 				return 0;
 			}
 
-			if(0xFFFF == source_id) {
+			if (0xFFFF == source_id) {
 			source_id = atsc_eit_section_source_id(eit);
-			for(k = 0; k < guide.num_channels; k++) {
-				if(source_id == guide.ch[k].src_id) {
+			for (k = 0; k < guide.num_channels; k++) {
+				if (source_id == guide.ch[k].src_id) {
 					curr_info = &guide.ch[k];
 					curr_channel_index = k;
-					if(0 == index) {
+					if (0 == index)
 						curr_info->last_event = NULL;
-					}
 					break;
 				}
 			}
-			if(k == guide.num_channels) {
-				fprintf(stderr, "%s(): cannot find source_id "
-					"0x%04X in the EIT\n",
-					__FUNCTION__, source_id);
+			if (k == guide.num_channels) {
+				error_msg("cannot find source_id 0x%04X in the EIT", source_id);
 				return -1;
 			}
 			} else {
-				if(source_id !=
-					atsc_eit_section_source_id(eit)) {
+				if (source_id != atsc_eit_section_source_id(eit))
 					continue;
-				}
 			}
-			if(eit_instance_pattern & (1 << curr_channel_index)) {
-				/* we have received this instance,
-				 * so quit quick
-				 */
+			/* if we have received this instance, quit quick */
+			if (eit_instance_pattern & (1 << curr_channel_index))
 				break;
-			}
 
-			if(-1 == num_sections) {
-				num_sections = 1 +
-					eit->head.ext_head.last_section_number;
-				if(32 < num_sections) {
-					fprintf(stderr,
-						"%s(): no support yet for "
-						"tables having more than "
-						"32 sections\n", __FUNCTION__);
+			if (-1 == num_sections) {
+				num_sections = 1 + eit->head.ext_head.last_section_number;
+				if (32 < num_sections) {
+					error_msg("no support yet for tables having more than 32 sections");
 					return -1;
 				}
 			} else {
-				if(num_sections != 1 +
-					eit->head.ext_head.last_section_number) {
-					fprintf(stderr,
-						"%s(): last section number "
-						"does not match\n",
-						__FUNCTION__);
+				if (num_sections != 1 + eit->head.ext_head.last_section_number) {
+					error_msg("last section number does not match");
 					return -1;
 				}
 			}
-			if(section_pattern &
-				(1 << eit->head.ext_head.section_number)) {
+			if (section_pattern & (1 << eit->head.ext_head.section_number))
 				continue;
-			}
 			section_pattern |= 1 << eit->head.ext_head.section_number;
 
 			eit_info = &curr_info->eit[index];
-			if(NULL == (eit_info->section =
-				realloc(eit_info->section,
-				(eit_info->num_eit_sections + 1) *
-				sizeof(struct atsc_eit_section_info)))) {
-				fprintf(stderr,
-					"%s(): error calling realloc()\n",
-					__FUNCTION__);
+			eit_info->section = realloc(eit_info->section, (eit_info->num_eit_sections + 1) * sizeof(struct atsc_eit_section_info));
+			if (NULL == eit_info->section) {
+				error_msg("error calling realloc()");
 				return -1;
 			}
 			section_num = eit->head.ext_head.section_number;
-			if(0 == eit_info->num_eit_sections) {
+			if (0 == eit_info->num_eit_sections) {
 				eit_info->num_eit_sections = 1;
 				section = eit_info->section;
 			} else {
-				/* have to sort it into section order
-				 * (temporal order)
-				 */
-				for(i = 0; i < eit_info->num_eit_sections; i++) {
-					if(eit_info->section[i].section_num >
-						section_num) {
+				/* have to sort it into section order (temporal order) */
+				for (i = 0; i < eit_info->num_eit_sections; i++) {
+					if (eit_info->section[i].section_num > section_num)
 						break;
-					}
 				}
-				memmove(&eit_info->section[i + 1],
-					&eit_info->section[i],
-					(eit_info->num_eit_sections - i) *
-					sizeof(struct atsc_eit_section_info));
+				memmove(&eit_info->section[i + 1], &eit_info->section[i], (eit_info->num_eit_sections - i) * sizeof(struct atsc_eit_section_info));
 				section = &eit_info->section[i - 1];
 				section = &eit_info->section[i];
 				eit_info->num_eit_sections += 1;
@@ -797,33 +730,31 @@  static int parse_eit(int dmxfd, int inde
 			section->num_events = eit->num_events_in_section;
 			section->num_etms = 0;
 			section->num_received_etms = 0;
-			if(NULL == (section->events = calloc(section->num_events,
-				sizeof(struct atsc_event_info *)))) {
-				fprintf(stderr, "%s(): error calling calloc()\n",
-					__FUNCTION__);
+			section->events = calloc(section->num_events, sizeof(struct atsc_event_info *));
+			if (NULL == section->events) {
+				error_msg("error calling calloc()");
 				return -1;
 			}
-			if(parse_events(curr_info, eit, section)) {
-				fprintf(stderr, "%s(): error calling "
-					"parse_events()\n", __FUNCTION__);
+			if (parse_events(curr_info, eit, section)) {
+				error_msg("error calling parse_events()");
 				return -1;
 			}
-		} while(section_pattern != (uint32_t)((1 << num_sections) - 1));
+		} while (section_pattern != (uint32_t)((1 << num_sections) - 1));
 		eit_instance_pattern |= 1 << curr_channel_index;
 	}
 
-	for(i = 0; i < guide.num_channels; i++) {
+	for (i = 0; i < guide.num_channels; i++) {
 		struct atsc_channel_info *channel = &guide.ch[i];
 		struct atsc_eit_info *ei = &channel->eit[index];
 		struct atsc_eit_section_info *s;
 
-		if(0 == ei->num_eit_sections) {
+		if (0 == ei->num_eit_sections) {
 			channel->last_event = NULL;
 			continue;
 		}
 		s = &ei->section[ei->num_eit_sections - 1];
 		/* BUG: it's incorrect when last section has no event */
-		if(0 == s->num_events) {
+		if (0 == s->num_events) {
 			channel->last_event = NULL;
 			continue;
 		}
@@ -841,12 +772,11 @@  static int parse_mgt(int dmxfd)
 	int i, j, ret;
 
 	ret = atsc_scan_table(dmxfd, ATSC_BASE_PID, tag, (void **)&mgt);
-	if(0 > ret) {
-		fprintf(stderr, "%s(): error calling atsc_scan_table()\n",
-			__FUNCTION__);
+	if (0 > ret) {
+		error_msg("error calling atsc_scan_table()");
 		return -1;
 	}
-	if(0 == ret) {
+	if (0 == ret) {
 		fprintf(stdout, "no MGT in %d seconds\n", TIMEOUT);
 		return 0;
 	}
@@ -855,31 +785,28 @@  static int parse_mgt(int dmxfd)
 	atsc_mgt_section_tables_for_each(mgt, t, i) {
 		struct mgt_table_name table;
 
-	for(j = 0; j < (int)(sizeof(mgt_tab_name_array) /
-		sizeof(struct mgt_table_name)); j++) {
-		if(t->table_type > mgt_tab_name_array[j].range) {
-			continue;
-		}
-		table = mgt_tab_name_array[j];
-		if(0 == j || mgt_tab_name_array[j - 1].range + 1 ==
-			mgt_tab_name_array[j].range) {
-			j = -1;
-		} else {
-			j = t->table_type - mgt_tab_name_array[j - 1].range - 1;
-			if(0x017F == table.range) {
-				guide.eit_pid[j] = t->table_type_PID;
-			} else if (0x027F == table.range) {
-				guide.ett_pid[j] = t->table_type_PID;
+		for (j = 0; j < (int)(sizeof(mgt_tab_name_array) / sizeof(struct mgt_table_name)); j++) {
+			if (t->table_type > mgt_tab_name_array[j].range)
+				continue;
+			table = mgt_tab_name_array[j];
+			if (0 == j || mgt_tab_name_array[j - 1].range + 1 ==
+				mgt_tab_name_array[j].range) {
+				j = -1;
+			} else {
+				j = t->table_type - mgt_tab_name_array[j - 1].range - 1;
+				if (0x017F == table.range) {
+					guide.eit_pid[j] = t->table_type_PID;
+				} else if (0x027F == table.range) {
+					guide.ett_pid[j] = t->table_type_PID;
+				}
 			}
+			break;
 		}
-		break;
-	}
 
 		fprintf(stdout, "  %2d: type = 0x%04X, PID = 0x%04X, %s", i,
-		    t->table_type, t->table_type_PID, table.string);
-		if(-1 != j) {
-		    fprintf(stdout, " %d", j);
-		}
+			t->table_type, t->table_type_PID, table.string);
+		if (-1 != j)
+			fprintf(stdout, " %d", j);
 		fprintf(stdout, "\n");
 	}
 
@@ -890,32 +817,24 @@  static int cleanup_guide(void)
 {
 	int i, j, k;
 
-	for(i = 0; i < guide.num_channels; i++) {
+	for (i = 0; i < guide.num_channels; i++) {
 		struct atsc_channel_info *channel = &guide.ch[i];
 
-		if(channel->title_buf.string) {
+		if (channel->title_buf.string)
 			free(channel->title_buf.string);
-		}
-		if(channel->msg_buf.string) {
+		if (channel->msg_buf.string)
 			free(channel->msg_buf.string);
-		}
-		for(j = 0; j < channel->num_eits; j++) {
+		for (j = 0; j < channel->num_eits; j++) {
 			struct atsc_eit_info *eit = &channel->eit[j];
 
-			for(k = 0; k < eit->num_eit_sections; k++) {
-				struct atsc_eit_section_info *section =
-					&eit->section[k];
-				if(section->num_events) {
+			for (k = 0; k < eit->num_eit_sections; k++) {
+				struct atsc_eit_section_info *section = &eit->section[k];
+				if (section->num_events)
 					free(section->events);
-				}
-			}
-			if(k) {
-				free(eit->section);
 			}
+			if (k) free(eit->section);
 		}
-		if(j) {
-			free(channel->eit);
-		}
+		if (j) free(channel->eit);
 	}
 
 	return 0;
@@ -927,38 +846,33 @@  static int print_events(struct atsc_chan
 	int m;
 	char line[256];
 
-	if(NULL == section) {
-		fprintf(stderr, "%s(): NULL pointer detected", __FUNCTION__);
+	if (NULL == section) {
+		error_msg("NULL pointer detected");
 		return -1;
 	}
-	for(m = 0; m < section->num_events; m++) {
+	for (m = 0; m < section->num_events; m++) {
 		struct atsc_event_info *event =
 			section->events[m];
 
-		if(NULL == event) {
+		if (NULL == event)
 			continue;
-		}
-		fprintf(stdout, "|%02d:%02d--%02d:%02d| ",
-			event->start.tm_hour, event->start.tm_min,
-			event->end.tm_hour, event->end.tm_min);
-		snprintf(line, event->title_len, "%s",
-			&channel->title_buf.string[event->title_pos]);
-		line[event->title_len] = '\0';
+		fprintf(stdout, "|%02d:%02d--%02d:%02d| ", event->start.tm_hour, event->start.tm_min, event->end.tm_hour, event->end.tm_min);
+		snprintf(line, event->title_len + 1, "%s", &channel->title_buf.string[event->title_pos]);
+		/*line[event->title_len] = '\0';*/
 		fprintf(stdout, "%s\n", line);
-		if(event->msg_len) {
+		if (event->msg_len) {
 			int len = event->msg_len;
 			int pos = event->msg_pos;
 			size_t part;
 
 			do {
 				part = len > 255 ? 255 : len;
-				snprintf(line, part, "%s",
-					&channel->msg_buf.string[pos]);
-				line[part] = '\0';
+				snprintf(line, part + 1, "%s", &channel->msg_buf.string[pos]);
+				/*line[part] = '\0';*/
 				fprintf(stdout, "%s", line);
 				len -= part;
 				pos += part;
-			} while(0 < len);
+			} while (0 < len);
 			fprintf(stdout, "\n");
 		}
 	}
@@ -970,20 +884,17 @@  static int print_guide(void)
 	int i, j, k;
 
 	fprintf(stdout, "%s\n", separator);
-	for(i = 0; i < guide.num_channels; i++) {
+	for (i = 0; i < guide.num_channels; i++) {
 		struct atsc_channel_info *channel = &guide.ch[i];
 
-		fprintf(stdout, "%d.%d  %s\n", channel->major_num,
-			channel->minor_num, channel->short_name);
-		for(j = 0; j < channel->num_eits; j++) {
+		fprintf(stdout, "%d.%d  %s\n", channel->major_num, channel->minor_num, channel->short_name);
+		for (j = 0; j < channel->num_eits; j++) {
 			struct atsc_eit_info *eit = &channel->eit[j];
 
-			for(k = 0; k < eit->num_eit_sections; k++) {
-				struct atsc_eit_section_info *section =
-					&eit->section[k];
-				if(print_events(channel, section)) {
-					fprintf(stderr, "%s(): error calling "
-						"print_events()\n", __FUNCTION__);
+			for (k = 0; k < eit->num_eit_sections; k++) {
+				struct atsc_eit_section_info *section = &eit->section[k];
+				if (print_events(channel, section)) {
+					error_msg("error calling print_events()");
 					return -1;
 				}
 			}
@@ -996,9 +907,8 @@  static int print_guide(void)
 
 static int open_demux(int *dmxfd)
 {
-	if((*dmxfd = dvbdemux_open_demux(adapter, 0, 0)) < 0) {
-		fprintf(stderr, "%s(): error calling dvbdemux_open_demux()\n",
-			__FUNCTION__);
+	if ((*dmxfd = dvbdemux_open_demux(adapter, 0, 0)) < 0) {
+		error_msg("error calling dvbdemux_open_demux()");
 		return -1;
 	}
 	return 0;
@@ -1006,9 +916,8 @@  static int open_demux(int *dmxfd)
 
 static int close_demux(int dmxfd)
 {
-	if(dvbdemux_stop(dmxfd)) {
-		fprintf(stderr, "%s(): error calling dvbdemux_stop()\n",
-			__FUNCTION__);
+	if (dvbdemux_stop(dmxfd)) {
+		error_msg("error calling dvbdemux_stop()");
 		return -1;
 	}
 	return 0;
@@ -1033,60 +942,52 @@  static int atsc_scan_table(int dmxfd, ui
 	memset(mask, 0, sizeof(mask));
 	filter[0] = tag;
 	mask[0] = 0xFF;
-	if(dvbdemux_set_section_filter(dmxfd, pid, filter, mask, 1, 1)) {
-		fprintf(stderr, "%s(): error calling atsc_scan_table()\n",
-			__FUNCTION__);
+	if (dvbdemux_set_section_filter(dmxfd, pid, filter, mask, 1, 1)) {
+		error_msg("error calling atsc_scan_table()");
 		return -1;
 	}
 
 	/* poll for data */
 	pollfd.fd = dmxfd;
 	pollfd.events = POLLIN | POLLERR |POLLPRI;
-	if((ret = poll(&pollfd, 1, TIMEOUT * 1000)) < 0) {
-		if(ctrl_c) {
+	if ((ret = poll(&pollfd, 1, TIMEOUT * 1000)) < 0) {
+		if (ctrl_c)
 			return 0;
-		}
-		fprintf(stderr, "%s(): error calling poll()\n", __FUNCTION__);
+		error_msg("error calling poll()");
 		return -1;
 	}
 
-	if(0 == ret) {
+	if (0 == ret)
 		return 0;
-	}
 
 	/* read it */
-	if((size = read(dmxfd, sibuf, sizeof(sibuf))) < 0) {
-		fprintf(stderr, "%s(): error calling read()\n", __FUNCTION__);
+	if ((size = read(dmxfd, sibuf, sizeof(sibuf))) < 0) {
+		error_msg("error calling read()");
 		return -1;
 	}
 
 	/* parse section */
 	section = section_codec(sibuf, size);
-	if(NULL == section) {
-		fprintf(stderr, "%s(): error calling section_codec()\n",
-			__FUNCTION__);
+	if (NULL == section) {
+		error_msg("error calling section_codec()");
 		return -1;
 	}
 
 	section_ext = section_ext_decode(section, 0);
-	if(NULL == section_ext) {
-		fprintf(stderr, "%s(): error calling section_ext_decode()\n",
-			__FUNCTION__);
+	if (NULL == section_ext) {
+		error_msg("error calling section_ext_decode()");
 		return -1;
 	}
 
 	psip = atsc_section_psip_decode(section_ext);
-	if(NULL == psip) {
-		fprintf(stderr,
-			"%s(): error calling atsc_section_psip_decode()\n",
-			__FUNCTION__);
+	if (NULL == psip) {
+		error_msg("error calling atsc_section_psip_decode()");
 		return -1;
 	}
 
 	*table_section = table_callback[tag & 0x0F](psip);
-	if(NULL == *table_section) {
-		fprintf(stderr, "%s(): error decode table section\n",
-			__FUNCTION__);
+	if (NULL == *table_section) {
+		error_msg("error decode table section");
 		return -1;
 	}
 
@@ -1100,17 +1001,16 @@  int main(int argc, char *argv[])
 
 	program = argv[0];
 
-	if(1 == argc) {
+	if (1 == argc) {
 		usage();
 		exit(-1);
 	}
 
-	for( ; ; ) {
+	for ( ; ; ) {
 		char c;
 
-		if(-1 == (c = getopt(argc, argv, "a:f:p:m:th"))) {
+		if (-1 == (c = getopt(argc, argv, "a:f:p:m:th")))
 			break;
-		}
 
 		switch(c) {
 		case 'a':
@@ -1124,9 +1024,8 @@  int main(int argc, char *argv[])
 		case 'p':
 			period = strtol(optarg, NULL, 0);
 			/* each table covers 3 hours */
-			if((3 * MAX_NUM_EVENT_TABLES) < period) {
+			if ((3 * MAX_NUM_EVENT_TABLES) < period)
 				period = 3 * MAX_NUM_EVENT_TABLES;
-			}
 			break;
 
 		case 'm':
@@ -1154,94 +1053,81 @@  int main(int argc, char *argv[])
 	memset(guide.eit_pid, 0xFF, MAX_NUM_EVENT_TABLES * sizeof(uint16_t));
 	memset(guide.ett_pid, 0xFF, MAX_NUM_EVENT_TABLES * sizeof(uint16_t));
 
-	if(open_frontend(&fe)) {
-		fprintf(stderr, "%s(): error calling open_frontend()\n",
-			__FUNCTION__);
+	if (open_frontend(&fe)) {
+		error_msg("error calling open_frontend()");
 		return -1;
 	}
 
-	if(open_demux(&dmxfd)) {
-		fprintf(stderr, "%s(): error calling open_demux()\n",
-			__FUNCTION__);
+	if (open_demux(&dmxfd)) {
+		error_msg("error calling open_demux()");
 		return -1;
 	}
 
-	if(parse_stt(dmxfd)) {
-		fprintf(stderr, "%s(): error calling parse_stt()\n",
-			__FUNCTION__);
+	if (parse_stt(dmxfd)) {
+		error_msg("error calling parse_stt()");
 		return -1;
 	}
 
-	if(parse_mgt(dmxfd)) {
-		fprintf(stderr, "%s(): error calling parse_mgt()\n",
-			__FUNCTION__);
+	if (parse_mgt(dmxfd)) {
+		error_msg("error calling parse_mgt()");
 		return -1;
 	}
 
-	if(parse_tvct(dmxfd)) {
-		fprintf(stderr, "%s(): error calling parse_tvct()\n",
-			__FUNCTION__);
+	if (parse_tvct(dmxfd)) {
+		error_msg("error calling parse_tvct()");
 		return -1;
 	}
 
 #ifdef ENABLE_RRT
-	if(parse_rrt(dmxfd)) {
-		fprintf(stderr, "%s(): error calling parse_rrt()\n",
-			__FUNCTION__);
+	if (parse_rrt(dmxfd)) {
+		error_msg("error calling parse_rrt()");
 		return -1;
 	}
 #endif
 
 	fprintf(stdout, "receiving EIT ");
-	for(i = 0; i < guide.ch[0].num_eits; i++) {
-		if(parse_eit(dmxfd, i, guide.eit_pid[i])) {
-			fprintf(stderr, "%s(): error calling parse_eit()\n",
-				__FUNCTION__);
+	for (i = 0; i < guide.ch[0].num_eits; i++) {
+		if (parse_eit(dmxfd, i, guide.eit_pid[i])) {
+			error_msg("error calling parse_eit()");
 			return -1;
 		}
 	}
 	fprintf(stdout, "\n");
 
 	old_handler = signal(SIGINT, int_handler);
-	if(enable_ett) {
+	if (enable_ett) {
 		fprintf(stdout, "receiving ETT ");
-		for(i = 0; i < guide.ch[0].num_eits; i++) {
-			if(0xFFFF != guide.ett_pid[i]) {
-				if(parse_ett(dmxfd, i, guide.ett_pid[i])) {
-					fprintf(stderr, "%s(): error calling "
-						"parse_eit()\n", __FUNCTION__);
+		for (i = 0; i < guide.ch[0].num_eits; i++) {
+			if (0xFFFF != guide.ett_pid[i]) {
+				if (parse_ett(dmxfd, i, guide.ett_pid[i])) {
+					error_msg("error calling parse_eit()");
 					return -1;
 				}
 			}
-			if(ctrl_c) {
+			if (ctrl_c)
 				break;
-			}
 		}
 		fprintf(stdout, "\n");
 	}
 	signal(SIGINT, old_handler);
 
-	if(print_guide()) {
-		fprintf(stderr, "%s(): error calling print_guide()\n",
-			__FUNCTION__);
+	if (print_guide()) {
+		error_msg("error calling print_guide()");
 		return -1;
 	}
 
-	if(cleanup_guide()) {
-		fprintf(stderr, "%s(): error calling cleanup_guide()\n",
-			__FUNCTION__);
+	if (cleanup_guide()) {
+		error_msg("error calling cleanup_guide()");
 		return -1;
 	}
 
-	if(close_demux(dmxfd)) {
-		fprintf(stderr, "%s(): error calling close_demux()\n",
-			__FUNCTION__);
+	if (close_demux(dmxfd)) {
+		error_msg("error calling close_demux()");
 		return -1;
 	}
 
-	if(close_frontend(fe)) {
-		fprintf(stderr, "%s(): error calling close_demux()\n",
-			__FUNCTION__);
+	if (close_frontend(fe)) {
+		error_msg("error calling close_demux()");
 		return -1;
 	}
 
diff -upr dvb-apps/util/scan/Makefile dvb-apps_local/util/scan/Makefile
--- dvb-apps/util/scan/Makefile	2009-06-22 12:13:04.171925478 -0500
+++ dvb-apps_local/util/scan/Makefile	2009-06-22 12:17:48.000000000 -0500
@@ -14,7 +14,7 @@  inst_bin = $(binaries)
 
 removing = atsc_psip_section.c atsc_psip_section.h
 
-CPPFLAGS += -DDATADIR=\"$(prefix)/share\"
+CPPFLAGS += -Wno-packed-bitfield-compat -D__KERNEL_STRICT_NAMES -DDATADIR=\"$(prefix)/share\"
 
 .PHONY: all