Hi!
Ich habe ein wenig am VDR herumgepatcht und bin dann beim "abkupfern" auf folgenden Code gestoßen. Warum funktioniert das?
Code
char *cRecording::SortName(void) const
{
if (!sortBuffer) {
char *s = StripEpisodeName(strdup(FileName() + strlen(VideoDirectory) + 1));
strreplace(s, '/', 'a'); // some locales ignore '/' when sorting
int l = strxfrm(NULL, s, 0) + 1;
sortBuffer = MALLOC(char, l);
strxfrm(sortBuffer, s, l);
free(s);
}
return sortBuffer;
}
Alles anzeigen
Im oberen Teil wird ein Pointer auf einen Charbuffer gelegt, der ein Duplikat von FileName() ist. Soweit so schön. Der Pointer ist allerdings verschoben um ein paar Byte.
Dann wird herummanipuliert und zum Schluss der Speicher freigegeben ... aber IMHO nicht der ganze oder?
Wo ich diesen Code (ohne den Zwischenteil mit strxfrm usw.) verwendet habe, bekomme ich einen Segfault. Warum hier nicht? Übersehe ich was?
Gruß,
Brougs78