[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