[FFmpeg-devel] [PATCH] tools: add ffescape utility
Stefano Sabatini
stefasab at gmail.com
Mon Oct 22 15:02:59 CEST 2012
On date Monday 2012-10-22 14:46:29 +0200, Clément Bœsch encoded:
> On Mon, Oct 22, 2012 at 02:36:27PM +0200, Stefano Sabatini wrote:
> > On date Tuesday 2012-10-16 02:33:59 +0200, Michael Niedermayer encoded:
> > > On Mon, Oct 15, 2012 at 10:14:47PM +0200, Stefano Sabatini wrote:
> > [...]
> > > > +int main(int argc, char **argv)
> > > > +{
> > > > + size_t src_buf_size = 256;
> > > > + char *src_buf = av_malloc(src_buf_size), *dst_buf = NULL;
> > >
> > > missing malloc failure check
> > >
> > > no further comments from me / LGTM if there are no other comments
> >
> > Updated to make more extensive use of bprint buffers.
> >
> > I'll push this tonight if I read no more comments.
> > --
> > FFmpeg = Fundamentalist and Fancy Mythic Pure Elaborated Guide
>
> > From 2ffcf8574c94393a61483b77471910e5189f87f8 Mon Sep 17 00:00:00 2001
> > From: Stefano Sabatini <stefasab at gmail.com>
> > Date: Mon, 15 Oct 2012 12:17:15 +0200
> > Subject: [PATCH] tools: add ffescape utility
> >
> > ---
> > libavutil/Makefile | 2 +-
> > tools/ffescape.c | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > 2 files changed, 181 insertions(+), 1 deletions(-)
> > create mode 100644 tools/ffescape.c
> >
>
> please add the program to .gitignore
Done.
> > diff --git a/libavutil/Makefile b/libavutil/Makefile
> > index 63a48be..e0dd816 100644
> > --- a/libavutil/Makefile
> > +++ b/libavutil/Makefile
> > @@ -130,6 +130,6 @@ TESTPROGS = adler32 \
> >
> > TESTPROGS-$(HAVE_LZO1X_999_COMPRESS) += lzo
> >
> > -TOOLS = ffeval
> > +TOOLS = ffeval ffescape
> >
> > $(SUBDIR)lzo-test$(EXESUF): ELIBS = -llzo2
> > diff --git a/tools/ffescape.c b/tools/ffescape.c
> > new file mode 100644
> > index 0000000..2b65e8f
> > --- /dev/null
> > +++ b/tools/ffescape.c
> > @@ -0,0 +1,180 @@
> > +/*
> > + * Copyright (c) 2012 Stefano Sabatini
> > + *
> > + * This file is part of FFmpeg.
> > + *
> > + * FFmpeg is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU Lesser General Public
> > + * License as published by the Free Software Foundation; either
> > + * version 2.1 of the License, or (at your option) any later version.
> > + *
> > + * FFmpeg is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> > + * Lesser General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU Lesser General Public
> > + * License along with FFmpeg; if not, write to the Free Software
> > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> > + */
> > +
> > +#include "config.h"
> > +#if HAVE_UNISTD_H
> > +#include <unistd.h> /* getopt */
> > +#endif
> > +
> > +#include "libavutil/log.h"
> > +#include "libavutil/bprint.h"
> > +
> > +#if !HAVE_GETOPT
> > +#include "compat/getopt.c"
> > +#endif
> > +
> > +/**
> > + * @file
> > + * escaping utility
> > + */
> > +
> > +static void usage(void)
> > +{
> > + printf("Escape an input string, adopting the av_get_token() escaping logic\n");
> > + printf("usage: ffescape [OPTIONS]\n");
> > + printf("\n"
> > + "Options:\n"
> > + "-e echo each input line on output\n"
> > + "-h print this help\n"
> > + "-i INFILE set INFILE as input file, stdin if omitted\n"
> > + "-l LEVEL set the number of escaping levels, 1 if omitted\n"
> > + "-o OUTFILE set OUTFILE as output file, stdout if omitted\n"
> > + "-p PROMPT set output prompt, is '=> ' by default\n"
> > + "-s SPECIAL_CHARS set the list of special characters\n");
> > +}
> > +
> > +#define WHITESPACES " \n\t"
> > +
> > +static char *escape(const char *src, const char *special_chars)
> > +{
> > + AVBPrint dst;
> > + char *ret;
[...]
> > + /* grab the input and store it in src */
> > + av_bprint_init(&src, 1, AV_BPRINT_SIZE_UNLIMITED);
> > + while ((c = fgetc(infile)) != EOF)
> > + av_bprint_chars(&src, c, 1);
> > + av_bprint_chars(&src, 0, 1);
> > +
> > + if (!av_bprint_is_complete(&src)) {
> > + av_log(NULL, AV_LOG_ERROR, "Could not allocate a buffer for the source string\n");
> > + return 1;
> > + }
> > + av_bprint_finalize(&src, &src_buf);
>
> You don't finalize in case on error, while you did in the escape function.
>
> [...]
>
> Except these details, LGTM, thanks, it will be useful to fix the FATE
> failure on MSVC with lavfi filtergraphs.
I hope so, updated.
--
FFmpeg = Funny Fundamental MultiPurpose Everlasting Gospel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0005-tools-add-ffescape-utility.patch
Type: text/x-diff
Size: 6534 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20121022/23bf054b/attachment.bin>
More information about the ffmpeg-devel
mailing list