From 560fbe876609cee246a6ab9453945fb263978eb6 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Thu, 29 Dec 2011 14:53:27 -0300 Subject: [PATCH] utils/dvb: Fix a few bugs on parsing zap format Signed-off-by: Mauro Carvalho Chehab --- utils/dvb/dvb-file.c | 44 +++++++++++++++++++++++++++++++++++++------- utils/dvb/dvb-zap-format.c | 12 ++++++------ 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/utils/dvb/dvb-file.c b/utils/dvb/dvb-file.c index ca56f47..8ff6542 100644 --- a/utils/dvb/dvb-file.c +++ b/utils/dvb/dvb-file.c @@ -23,6 +23,26 @@ #include "dvb-file.h" +static const char *parm_name(const struct parse_table *table) +{ + if (table->prop < DTV_MAX_COMMAND) + return dvb_v5_name[table->prop]; + switch (table->prop) { + case DTV_CH_NAME: + return ("CHANNEL"); + case DTV_POLARIZATION: + return ("POLARIZATION"); + case DTV_VIDEO_PID: + return ("VIDEO PID"); + case DTV_AUDIO_PID: + return ("AUDIO PID"); + case DTV_SERVICE_PID: + return ("SERVICE ID"); + default: + return ("unknown"); + } +} + /* * Generic parse function for all formats each channel is contained into * just one line. @@ -57,12 +77,18 @@ struct dvb_file *parse_format_oneline(const char *fname, const char *delimiter, do { len = getline(&buf, &size, fd); - if (!len) + if (len <= 0) break; line++; + p = buf; + while (*p == ' ') + p++; + if (*p == '\n' || *p == '#' || *p == '\a' || *p == '\0') + continue; + if (!delsys) { - p = strtok(buf, delimiter); + p = strtok(p, delimiter); if (!p) { sprintf(err_msg, "unknown delivery system type for %s", p); @@ -97,10 +123,13 @@ struct dvb_file *parse_format_oneline(const char *fname, const char *delimiter, has_inversion = 0; for (i = 0; i < fmt->size; i++) { table = &fmt->table[i]; - p = strtok(NULL, delimiter); + if (delsys && !i) { + p = strtok(p, delimiter); + } else + p = strtok(NULL, delimiter); if (!p) { - sprintf(err_msg, "parameter %s missing", - dvb_v5_name[table->prop]); + sprintf(err_msg, "parameter %i (%s) missing", + i, parm_name(table)); goto error; } if (table->size) { @@ -109,7 +138,7 @@ struct dvb_file *parse_format_oneline(const char *fname, const char *delimiter, break; if (j == table->size) { sprintf(err_msg, "parameter %s invalid: %s", - dvb_v5_name[table->prop], p); + parm_name(table), p); goto error; } if (table->prop == DTV_BANDWIDTH_HZ) @@ -157,7 +186,8 @@ struct dvb_file *parse_format_oneline(const char *fname, const char *delimiter, return dvb_file; error: - fprintf (stderr, "Error parsing line %d of %s\n", line, fname); + fprintf (stderr, "ERROR %s while parsing line %d of %s\n", + err_msg, line, fname); dvb_file_free(dvb_file); fclose(fd); return NULL; diff --git a/utils/dvb/dvb-zap-format.c b/utils/dvb/dvb-zap-format.c index 415709d..7500884 100644 --- a/utils/dvb/dvb-zap-format.c +++ b/utils/dvb/dvb-zap-format.c @@ -95,12 +95,12 @@ static const char *zap_parse_hierarchy[] = { }; static const char *zap_parse_bandwidth[] = { - [BANDWIDTH_1_712_MHZ] = "BANDWIDTH_1.712MHZ", - [BANDWIDTH_5_MHZ] = "BANDWIDTH_5MHZ", - [BANDWIDTH_6_MHZ] = "BANDWIDTH_6MHZ", - [BANDWIDTH_7_MHZ] = "BANDWIDTH_7MHZ", - [BANDWIDTH_8_MHZ] = "BANDWIDTH_8MHZ", - [BANDWIDTH_10_MHZ] = "BANDWIDTH_10MHZ", + [BANDWIDTH_1_712_MHZ] = "BANDWIDTH_1.712_MHZ", + [BANDWIDTH_5_MHZ] = "BANDWIDTH_5_MHZ", + [BANDWIDTH_6_MHZ] = "BANDWIDTH_6_MHZ", + [BANDWIDTH_7_MHZ] = "BANDWIDTH_7_MHZ", + [BANDWIDTH_8_MHZ] = "BANDWIDTH_8_MHZ", + [BANDWIDTH_10_MHZ] = "BANDWIDTH_10_MHZ", [BANDWIDTH_AUTO] = "BANDWIDTH_AUTO", }; -- 2.7.4