valid summary.vdr file hangs vdr.

Message ID 431AE9A5.6080801@icem.com
State New
Headers

Commit Message

Carsten Koch Sept. 4, 2005, 12:33 p.m. UTC
  Klaus Schmidinger wrote:
...
>> Of course my point is that VDR should never hang when
>> reading a file that it has created itself.
>> Would you like me to create a patch this weekend that
>> fixes this?
> 
> Very well. And don't forget to adjust summary2info.pl as well.

I am sorry, I do not know perl.
I went straight to Python in my evolution. ;-)

Anyway, as promised, here is the patch that does not only
prevent VDR from hanging/crashing (*), but also displays
summaries that do not have a short text correctly.

Carsten.

(*) During my tests today, vdr crashed with these messages:

Sep  4 13:34:08 vdr kernel: dvb-ttpci: warning: timeout waiting in BlitBitmap: 0, 1
Sep  4 13:34:10 vdr kernel: dvb-ttpci: __av7110_send_fw_cmd(): timeout waiting for COMMAND idle
Sep  4 13:34:10 vdr kernel: dvb-ttpci: av7110_send_fw_cmd(): av7110_send_fw_cmd error -110
Sep  4 13:34:10 vdr kernel: dvb-ttpci: av7110_fw_cmd error -110
Sep  4 13:34:15 vdr kernel: dvb-ttpci: ARM crashed @ card 0
Sep  4 13:34:16 vdr kernel: dvb-ttpci: gpioirq unknown type=0 len=0
Sep  4 13:34:16 vdr kernel: dvb-ttpci: adac type set to 0 @ card 0
  

Patch

diff -ur vdr-1.3.31/recording.c vdr-1.3.31+FixSummaryHang/recording.c
--- vdr-1.3.31/recording.c	2005-08-13 16:00:48.000000000 +0200
+++ vdr-1.3.31+FixSummaryHang/recording.c	2005-09-04 14:23:35.814605968 +0200
@@ -500,6 +500,20 @@ 
               data[2] = data[1];
               data[1] = NULL;
               }
+	   else if (line == 2) {
+	   // if line 1 is too long, it can't be the short text,
+	   // so assume the short text is missing and concatenate
+	   // line 1 and line 2 to be the long text.
+	      size_t len1 = strlen(data[1]);
+	      if (len1 > 80) { 
+		 data[1] = (char *)realloc(data[1], len1 + 1 + strlen(data[2]) + 1);
+		 strcat(data[1], "\n");
+		 strcat(data[1], data[2]);
+		 free(data[2]);
+              	 data[2] = data[1];
+              	 data[1] = NULL;
+	         }
+	      }
            info->SetData(data[0], data[1], data[2]);
            for (int i = 0; i < 3; i ++)
                free(data[i]);