Build failures with gcc 4.4
Commit Message
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
@@ -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();
}