diff options
author | Chang.H.S <jhs@dev3> | 2012-07-04 09:17:17 (GMT) |
---|---|---|
committer | Chang.H.S <jhs@dev3> | 2012-07-04 09:17:17 (GMT) |
commit | 01dff0278ed0eeb8cee776c8ef9d6fcf0d6229fb (patch) | |
tree | 1365c27e07f9c8026ecff2f0c629633c1798d437 /lib/dvb | |
parent | d619c613c873c6c242022cdae8d0db4b336e5027 (diff) |
db.cpp : 'Load Bouquets' fixed for line have more than 256 chracters.
Diffstat (limited to 'lib/dvb')
-rwxr-xr-x[-rw-r--r--] | lib/dvb/db.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index f938cb1..ea0df97 100644..100755 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -633,18 +633,18 @@ void eDVBDB::loadBouquet(const char *path) return; } int entries=0; - char line[256]; + size_t linesize = 256; + char *line = (char*)malloc(linesize); bool read_descr=false; eServiceReference *e = NULL; while (1) { - if (!fgets(line, 256, fp)) - break; - line[strlen(line)-1]=0; - if (strlen(line) && line[strlen(line)-1]=='\r') - line[strlen(line)-1]=0; - if (!line[0]) - break; + int len; + if ((len = getline(&line, &linesize, fp)) < 2) break; + /* strip newline */ + line[--len] = 0; + /* strip carriage return (when found) */ + if (line[len - 1] == '\r') line[--len] = 0; if (line[0]=='#') { if (!strncmp(line, "#SERVICE", 8)) @@ -700,6 +700,7 @@ void eDVBDB::loadBouquet(const char *path) continue; } } + free(line); fclose(fp); eDebug("%d entries in Bouquet %s", entries, bouquet_name.c_str()); } |