[FFmpeg-devel] [PATCH] Symbian OS won't load binaries which have a function pointer assigned directly using a library routine
Måns Rullgård
mans
Mon Jan 24 14:16:04 CET 2011
Pankaj yadav <pankajdnapster at gmail.com> writes:
> Hi,
>
> We are porting VLC and dependency libraries to Symbian OS and this is a
> small patch which is a workaround to a Symbian OS limitation.
>
> --
> Pankaj Yadav
> http://people.videolan.org/~pk <http://people.videolan.org/%7Epk>
> Open Source Enthusiast
>
> From c09de83ea0a4ed13653e26296d5bd5b20db93e31 Mon Sep 17 00:00:00 2001
> From: Pankaj Yadav <pk at videolan.org>
> Date: Mon, 24 Jan 2011 18:01:03 +0530
> Subject: [PATCH] Symbian OS won't load binaries which have a function pointer assigned directly using a library routine
>
> ---
> libavutil/eval.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++--------
> 1 files changed, 72 insertions(+), 12 deletions(-)
>
> diff --git a/libavutil/eval.c b/libavutil/eval.c
> index 0fef97b..a5b7dc7 100644
> --- a/libavutil/eval.c
> +++ b/libavutil/eval.c
> @@ -71,6 +71,66 @@ static const int8_t si_prefixes['z' - 'E' + 1] = {
> ['Y'-'E']= 24,
> };
>
> +static double staticsin(double a)
> +{
> + return sin(a);
> +}
> +
[...]
> double av_strtod(const char *numstr, char **tail)
> {
> double d;
> @@ -250,18 +310,18 @@ static int parse_primary(AVExpr **e, Parser *p)
> p->s++; // ")"
>
> d->type = e_func0;
> - if (strmatch(next, "sinh" )) d->a.func0 = sinh;
> - else if (strmatch(next, "cosh" )) d->a.func0 = cosh;
> - else if (strmatch(next, "tanh" )) d->a.func0 = tanh;
> - else if (strmatch(next, "sin" )) d->a.func0 = sin;
> - else if (strmatch(next, "cos" )) d->a.func0 = cos;
> - else if (strmatch(next, "tan" )) d->a.func0 = tan;
> - else if (strmatch(next, "atan" )) d->a.func0 = atan;
> - else if (strmatch(next, "asin" )) d->a.func0 = asin;
> - else if (strmatch(next, "acos" )) d->a.func0 = acos;
> - else if (strmatch(next, "exp" )) d->a.func0 = exp;
> - else if (strmatch(next, "log" )) d->a.func0 = log;
> - else if (strmatch(next, "abs" )) d->a.func0 = fabs;
> + if (strmatch(next, "sinh" )) d->a.func0 = staticsinh;
> + else if (strmatch(next, "cosh" )) d->a.func0 = staticcosh;
> + else if (strmatch(next, "tanh" )) d->a.func0 = statictanh;
> + else if (strmatch(next, "sin" )) d->a.func0 = staticsin;
> + else if (strmatch(next, "cos" )) d->a.func0 = staticcos;
> + else if (strmatch(next, "tan" )) d->a.func0 = statictan;
> + else if (strmatch(next, "atan" )) d->a.func0 = staticatan;
> + else if (strmatch(next, "asin" )) d->a.func0 = staticasin;
> + else if (strmatch(next, "acos" )) d->a.func0 = staticacos;
> + else if (strmatch(next, "exp" )) d->a.func0 = staticexp;
> + else if (strmatch(next, "log" )) d->a.func0 = staticlog;
> + else if (strmatch(next, "abs" )) d->a.func0 = staticfabs;
> else if (strmatch(next, "squish")) d->type = e_squish;
> else if (strmatch(next, "gauss" )) d->type = e_gauss;
> else if (strmatch(next, "mod" )) d->type = e_mod;
This is ridiculous. What is the reason for this crazy limitation?
The C standard certainly doesn't allow such nonsense.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list