Ville Skyttä wrote:
> On Friday 27 February 2009, Ville Skyttä wrote:
> > 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.
> [...]
> 
> ...but until there's a real fix available, the attached ugly patch at least 
> makes the build succeed with gcc 4.4.

So gcc 4.4 finally hit openSUSE as well. I use the attached patch to
make vdr compile. Seems to work fine too. The code that requires
those const casts is really ugly though.

cu
Ludwig

-- 
 (o_   Ludwig Nussel
 //\   
 V_/_  http://www.suse.de/
SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nuernberg)
Index: vdr-1.6.0/recording.c
===================================================================
--- vdr-1.6.0.orig/recording.c
+++ vdr-1.6.0/recording.c
@@ -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,7 +1022,8 @@ void cRecordings::DelByName(const char *
   if (recording) {
      cThreadLock DeletedRecordingsLock(&DeletedRecordings);
      Del(recording, false);
-     char *ext = strrchr(recording->FileName(), '.');
+     // wtf?
+     char *ext = strrchr(const_cast<char*>(recording->FileName()), '.');
      if (ext) {
         strncpy(ext, DELEXT, strlen(ext));
         recording->fileSizeMB = DirSizeMB(recording->FileName());
Index: vdr-1.6.0/svdrp.c
===================================================================
--- vdr-1.6.0.orig/svdrp.c
+++ vdr-1.6.0/svdrp.c
@@ -736,7 +736,7 @@ void cSVDRP::CmdGRAB(const char *Option)
      char *strtok_next;
      FileName = strtok_r(p, delim, &strtok_next);
      // image type:
-     char *Extension = strrchr(FileName, '.');
+     const char *Extension = strrchr(FileName, '.');
      if (Extension) {
         if (strcasecmp(Extension, ".jpg") == 0 || strcasecmp(Extension, ".jpeg") == 0)
            Jpeg = true;
@@ -796,12 +796,12 @@ void cSVDRP::CmdGRAB(const char *Option)
      if (FileName) {
         if (grabImageDir) {
            cString s;
-           char *slash = strrchr(FileName, '/');
+           char *slash = strrchr(const_cast<char*>(FileName), '/');
            if (!slash) {
               s = AddDirectory(grabImageDir, FileName);
               FileName = s;
               }
-           slash = strrchr(FileName, '/'); // there definitely is one
+           slash = strrchr(const_cast<char*>(FileName), '/'); // there definitely is one
            *slash = 0;
            char *r = realpath(FileName, RealFileName);
            *slash = '/';
_______________________________________________
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

Reply via email to