Hello,

I'm trying to build VDR 1.6.0-2 for the upcoming Fedora 11 release which has 
gcc 4.4.  There are a bunch of compilation errors as gcc has again become 
less forgiving for C++ than it used to be.

One very common source of problems is explained here:
http://markmail.org/message/e5y6atneqztuvpw6#query:
+page:1+mid:hdkehz7bgl5b6vgc+state:results

There are quite a few of these problems in VDR 1.6.0-2 ("error: invalid 
conversion from 'const char*' to 'char*'").  I started patching but quickly 
realized that this is a job for someone who actually knows what he's doing.

Anyway, attached is a patch against VDR 1.6.0-2 that fixes the first few of 
these errors.  Approach with caution: I'm fairly confident that for example 
the changes to cRecordings::DelByName are not the right thing to do but then 
again I might not understand what it's doing anyway (changing the extension 
of the filename to .del but not actually renaming the file accordingly?).

In addition to these errors, similar ones exist at least in StatNearestDir 
(videodir.c) cSVDRP::CmdGRAB.

Help appreciated!


By the way, in case someone runs into it, some recent changes in DVB headers 
(as in current Fedora devel) have caused other unrelated compilation 
issues, -D__KERNEL_STRICT_NAMES appears to be needed to get compilation past 
dvbdevice.c.  See https://bugzilla.redhat.com/show_bug.cgi?id=483644
diff -up vdr-1.6.0/recording.c~ vdr-1.6.0/recording.c
--- vdr-1.6.0/recording.c~	2008-02-24 12:28:53.000000000 +0200
+++ vdr-1.6.0/recording.c	2009-02-27 21:18:55.000000000 +0200
@@ -509,8 +509,8 @@ cRecording::cRecording(cTimer *Timer, co
      Utf8Strn0Cpy(SubtitleBuffer, Subtitle, MAX_SUBTITLE_LENGTH);
      Subtitle = SubtitleBuffer;
      }
-  char *macroTITLE   = strstr(Timer->File(), TIMERMACRO_TITLE);
-  char *macroEPISODE = strstr(Timer->File(), TIMERMACRO_EPISODE);
+  const char *macroTITLE   = strstr(Timer->File(), TIMERMACRO_TITLE);
+  const char *macroEPISODE = strstr(Timer->File(), TIMERMACRO_EPISODE);
   if (macroTITLE || macroEPISODE) {
      name = strdup(Timer->File());
      name = strreplace(name, TIMERMACRO_TITLE, Title);
@@ -551,7 +551,7 @@ cRecording::cRecording(const char *FileN
   sortBuffer = NULL;
   fileName = strdup(FileName);
   FileName += strlen(VideoDirectory) + 1;
-  char *p = strrchr(FileName, '/');
+  const char *p = strrchr(FileName, '/');
 
   name = NULL;
   info = new cRecordingInfo;
@@ -1022,15 +1022,17 @@ void cRecordings::DelByName(const char *
   if (recording) {
      cThreadLock DeletedRecordingsLock(&DeletedRecordings);
      Del(recording, false);
-     char *ext = strrchr(recording->FileName(), '.');
+     char *NewName = strdup(recording->FileName());
+     char *ext = strrchr(NewName, '.');
      if (ext) {
         strncpy(ext, DELEXT, strlen(ext));
-        recording->fileSizeMB = DirSizeMB(recording->FileName());
+        recording->fileSizeMB = DirSizeMB(NewName);
         recording->deleted = time(NULL);
         DeletedRecordings.Add(recording);
         }
      else
         delete recording;
+     free(NewName);
      ChangeState();
      TouchUpdate();
      }
_______________________________________________
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

Reply via email to