Hi Lars,
thank you for the help!
On Fri, Nov 30, Lars Hanisch wrote:
32: bool tComponent::FromString(const char *s) 33: { 34: unsigned int Stream, Type; 35: int n = sscanf(s, "%X %02X %7s %a[^\n]", &Stream, &Type, language, &description); // 7 = MAXLANGCODE2 - 1 36: if (n != 4 || isempty(description)) { 37: free(description); 38: description = NULL; 39: } 40: stream = Stream; 41: type = Type; 42: return n >= 3; 43: }
What I would do:
- set description to NULL before the sscanf
- log all values returned by sscanf and compare it with the given string
I changed it this way:
--snip-- 32 bool tComponent::FromString(const char *s) 33 { 34 unsigned int Stream, Type; 35 description = NULL; 36 int n = sscanf(s, "%X %02X %7s %a[^\n]", &Stream, &Type, language, &description); // 7 = MAXLANGCODE2 - 1 37 esyslog("dbloms: "%X" "%02X" "%7s" "%a"", Stream, Type, language, description); 38 39 if (n != 4 || isempty(description)) { 40 free(description); 41 description = NULL; 42 } 43 stream = Stream; 44 type = Type; 45 return n >= 3; 46 } --snip--
but during compile I saw this message:
--snip-- g++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -c -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DVDR_USER="root" -DLIRC_DEVICE="/var/run/lirc/lircd" -D_GNU_SOURCE -DVIDEODIR="/remote/vdr/video" -DCONFDIR="/etc/vdr/config" -DCACHEDIR="" -DRESDIR="" -DPLUGINDIR="/usr/src/vdr-1.7.32/PLUGINS/lib" -DLOCDIR="/usr/share/vdr/locale" -I/usr/include/freetype2 -I/usr/src/v4l-dvb/linux/include epg.c epg.c: In member function 'bool tComponent::FromString(const char*)': epg.c:37:3: warning: format '%a' expects argument of type 'double', but argument 6 has type 'char*' [-Wformat] --snip--
And after start in the logfile
--snip-- Nov 30 09:48:05 vdrservernew local1.err vdr: [4094] dbloms: "1" "01" " deu" "0x8.799b08p-1052" --snip--
I think %a in my esyslog call isn't correct, but it is used this way with the sscanf call and when I changed it with %s I don't see any log entry.
So how should the esyslog call look like ?