Build failures with gcc 4.4

Message ID
State New

Commit Message

Ville Skyttä Feb. 27, 2009, 7:24 p.m. UTC

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:

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


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);
         delete recording;
+     free(NewName);