On 26/02/14 22:37, Anton Khirnov wrote:
> ---
>  configure                |    1 -
>  libavfilter/af_compand.c |   32 ++++++++++++++++++++++++--------
>  2 files changed, 24 insertions(+), 9 deletions(-)
> 
> diff --git a/configure b/configure
> index a7c0043..2f2a0f7 100755
> --- a/configure
> +++ b/configure
> @@ -2016,7 +2016,6 @@ unix_protocol_select="network"
>  # filters
>  blackframe_filter_deps="gpl"
>  boxblur_filter_deps="gpl"
> -compand_filter_deps="strtok_r"
>  cropdetect_filter_deps="gpl"
>  delogo_filter_deps="gpl"
>  drawtext_filter_deps="libfreetype"
> diff --git a/libavfilter/af_compand.c b/libavfilter/af_compand.c
> index 1906594..a6692bc 100644
> --- a/libavfilter/af_compand.c
> +++ b/libavfilter/af_compand.c
> @@ -29,6 +29,7 @@
>  
>  #include <string.h>
>  
> +#include "libavutil/avstring.h"
>  #include "libavutil/channel_layout.h"
>  #include "libavutil/common.h"
>  #include "libavutil/mathematics.h"
> @@ -330,7 +331,7 @@ static int config_output(AVFilterLink *outlink)
>      CompandContext *s     = ctx->priv;
>      const int sample_rate = outlink->sample_rate;
>      double radius         = s->curve_dB * M_LN10 / 20.0;
> -    char *p, *saveptr     = NULL;
> +    const char *p;
>      const int channels    =
>          av_get_channel_layout_nb_channels(outlink->channel_layout);
>      int nb_attacks, nb_decays, nb_points;
> @@ -368,25 +369,34 @@ static int config_output(AVFilterLink *outlink)
>  
>      p = s->attacks;
>      for (i = 0, new_nb_items = 0; i < nb_attacks; i++) {
> -        char *tstr = strtok_r(p, "|", &saveptr);
> -        p = NULL;
> +        char *tstr = av_get_token(&p, "|");
> +        if (!tstr)
> +            return AVERROR(ENOMEM);

uninit missing here

> +
>          new_nb_items += sscanf(tstr, "%f", &s->channels[i].attack) == 1;
> +        av_freep(&tstr);
>          if (s->channels[i].attack < 0) {
>              uninit(ctx);
>              return AVERROR(EINVAL);
>          }
> +        if (*p)
> +            p++;
>      }
>      nb_attacks = new_nb_items;
>  
>      p = s->decays;
>      for (i = 0, new_nb_items = 0; i < nb_decays; i++) {
> -        char *tstr = strtok_r(p, "|", &saveptr);
> -        p = NULL;
> +        char *tstr = av_get_token(&p, "|");
> +        if (!tstr)
> +            return AVERROR(ENOMEM);

uninit missing I think

>          new_nb_items += sscanf(tstr, "%f", &s->channels[i].decay) == 1;
> +        av_freep(&tstr);
>          if (s->channels[i].decay < 0) {
>              uninit(ctx);
>              return AVERROR(EINVAL);
>          }
> +        if (*p)
> +            p++;
>      }
>      nb_decays = new_nb_items;
>  
> @@ -401,9 +411,13 @@ static int config_output(AVFilterLink *outlink)
>  #define S(x) s->segments[2 * ((x) + 1)]
>      p = s->points;
>      for (i = 0, new_nb_items = 0; i < nb_points; i++) {
> -        char *tstr = strtok_r(p, "|", &saveptr);
> -        p = NULL;
> -        if (sscanf(tstr, "%f/%f", &S(i).x, &S(i).y) != 2) {
> +        char *tstr = av_get_token(&p, "|");
> +        if (!tstr)
> +            return AVERROR(ENOMEM);

uninit missing here.

> +
> +        err = sscanf(tstr, "%f/%f", &S(i).x, &S(i).y);
> +        av_freep(&tstr);
> +        if (err != 2) {
>              av_log(ctx, AV_LOG_ERROR,
>                      "Invalid and/or missing input/output value.\n");
>              uninit(ctx);
> @@ -418,6 +432,8 @@ static int config_output(AVFilterLink *outlink)
>          S(i).y -= S(i).x;
>          av_log(ctx, AV_LOG_DEBUG, "%d: x=%f y=%f\n", i, S(i).x, S(i).y);
>          new_nb_items++;
> +        if (*p)
> +            p++;
>      }
>      num = new_nb_items;
>  
> 

I'd refactor using a goto fail pattern.

lu


_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to