<br><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Nov 30, 2012 at 11:00 AM, Dieter Bloms <span dir="ltr"><<a href="mailto:vdr@bloms.de" target="_blank">vdr@bloms.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
--snip--<br>
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<br>

epg.c: In member function 'bool tComponent::FromString(const char*)':<br>
epg.c:37:3: warning: format '%a' expects argument of type 'double', but argument 6 has type 'char*' [-Wformat]<br>
--snip--<br>
<br>
And after start in the logfile<br>
<br>
--snip--<br>
Nov 30 09:48:05 vdrservernew local1.err vdr: [4094] dbloms: "1" "01" "    deu" "0x8.799b08p-1052"<br>
--snip--<br>
<br>
I think %a in my esyslog call isn't correct, but it is used this way<br>
with the sscanf call and when I changed it with %s I don't see any log<br>
entry.<br>
<br>
So how should the esyslog call look like ?<br>
<br></blockquote><div><br>%a to print a char* is not right. char* is interpreted as double (see the compiler warning) . If you want to print the pointer 'description', then use %p.<br> <br><br>The following code crashes on my box too. I dont know why.<br>
<br> $ ./a.out <br>errno: 0<br>n=4<br>Stream:1 Type:1 lang:'deu'<br>desc addr:'0x40800000'<br>Segmentation fault<br>$<br><br>In gdb: <br>Program received signal SIGSEGV, Segmentation fault.<br>0x0016e50b in _IO_vfprintf_internal (s=0x2844e0, format=0x8048711 "desc:'%s'\n", ap=0xbffff3f4 "") at vfprintf.c:1614<br>
1614    vfprintf.c: No such file or directory.<br>        in vfprintf.c<br>(gdb) bt<br>#0  0x0016e50b in _IO_vfprintf_internal (s=0x2844e0, format=0x8048711 "desc:'%s'\n", ap=0xbffff3f4 "") at vfprintf.c:1614<br>
#1  0x00175160 in __printf (format=0x8048711 "desc:'%s'\n") at printf.c:35<br>#2  0x080485aa in FromString (s=0x804871c "1 01 deu 4:3") at fromstring.c:14<br>#3  0x080485ee in main (argc=1, argv=0xbffff514) at fromstring.c:22<br>
<br><br></div></div>--- snip ---<br><br>#include <stdio.h><br>#include <errno.h><br><br>void FromString(const char *s)<br>{<br>  unsigned int Stream, Type;<br>  char language[8] = {0};<br>  char* description=NULL;<br>
  int n = sscanf(s, "%X %02X %7s %a[^\n]", &Stream, &Type, language, &description); // 7 = MAXLANGCODE2 - 1<br>  printf("errno: %d\n", errno);<br>  printf("n=%d\n", n);<br>  printf("Stream:%u Type:%u lang:'%s'\n", Stream, Type, language);<br>
  printf("desc addr:'%p'\n", description);<br>  printf("desc:'%s'\n", description); // XXX crashes here<br>}<br><br>int main(int argc, char* argv[])<br>{<br>  if (argc == 2)<br>    FromString((const char*)argv[1]);<br>
  else <br>    FromString("1 01 deu 4:3");<br>  <br>  return 0;<br>}<br><br>----- snip -----<br>
</div>