[vdr] rotor plugin puzzling question
Chris Moore
moore at free.fr
Thu Nov 12 06:31:29 CET 2009
Hello,
ACK: this was clearly a bug ;-)
martinez at embl.de a écrit :
> Is it just me or the newly released rotor plugin for vdr 1.7.9 needs the
> following patch to the plugin itself in order to run (although it compiles
> fine without it)
> If the author reads these lines I would love to know why...
>
> --- rotor.c.old 2006-06-14 23:44:27.000000000 +0200
> +++ rotor.c 2006-06-14 23:46:43.000000000 +0200
> @@ -96,7 +96,8 @@
> continue;
> if ((diseqc=Diseqcs.Get(source->Code(),12000,'h')) ||
> (diseqc=Diseqcs.Get(source->Code(),12000,'v')) ||
> (diseqc=Diseqcs.Get(source->Code(),12000,'l')) ||
> (diseqc=Diseqcs.Get(source->Code(),12000,'r')))
> {
> - char *c=strdup(diseqc->Commands());
> + char *commandstring=strdup(diseqc->Commands());
> + char *c=commandstring;
> while (c = strchr(c, '['))
> {
> char *e = strchr(++c, ']');
> @@ -131,7 +132,7 @@
> break;
> }
> }
> - free(c);
> + free(commandstring);
>
I am not the author (nor even a user) but you are absolutely right.
You must free the pointer as returned by strdup; not one that you have
modified or incremented :(
So you need to keep a virgin copy of the pointer as you have done.
Cheers,
Chris
More information about the vdr
mailing list