[FFmpeg-devel] [PATCH] Implement av_strerror()

Stefano Sabatini stefano.sabatini-lala
Wed Mar 17 23:56:40 CET 2010


On date Wednesday 2010-03-17 15:48:08 +0100, Michael Niedermayer encoded:
> On Tue, Mar 16, 2010 at 08:41:00PM +0100, Stefano Sabatini wrote:
> > On date Monday 2010-03-15 14:17:49 +0000, M?ns Rullg?rd encoded:
> > > Michael Niedermayer <michaelni at gmx.at> writes:
> > > 
> > > > On Sun, Mar 14, 2010 at 10:08:46PM +0100, Stefano Sabatini wrote:
> > > >> On date Sunday 2010-03-14 19:22:19 +0100, Michael Niedermayer encoded:
> > > >> > On Sun, Mar 14, 2010 at 07:12:07PM +0100, Stefano Sabatini wrote:
> > > >> > > On date Sunday 2010-03-14 15:52:41 +0000, M?ns Rullg?rd encoded:
> > > >> > > > Stefano Sabatini <stefano.sabatini-lala at poste.it> writes:
> > > >> > [...]
> > > >> > > +
> > > >> > > +int av_strerror(int errnum, char *errbuf, size_t errbuf_size)
> > > >> > > +{
> > > >> > > +    int ret = 0;
> > > >> > > +    const char *errstr = NULL;
> > > >> > > +    *errbuf = 0;
> > > >> > > +
> > > >> > > +    switch (errnum) {
> > > >> > 
> > > >> > > +#if LIBAVUTIL_VERSION_MAJOR < 51
> > > >> > > +    case AVERROR_IO:           errstr = "I/O error"; break;
> > > >> > > +    case AVERROR_NOENT:        errstr = "No such file or directory"; break;
> > > >> > > +    case AVERROR_NOMEM:        errstr = "Not enough memory"; break;
> > > >> > > +#endif
> > > >> > 
> > > >> > Is that what strerror_r() prints not good?
> > > >> 
> > > >> Updated.
> > > >> 
> > > >> I added also a test program (see the output as attachment), let me
> > > >> know if I have to keep it in the commit.
> > > >
> > > > i think the test prog can be droped
> > > >
> > > > [...]
> > > >
> > > >> +    *errbuf = 0;
> > > >
> > > > is this needed?
> > > 
> > > No.
> > 
> > If the error is unknown by strerror_r this won't be set, and the old
> > content in errbuf will be printed. But I don't care, so removed.
> > 
> > I'm keeping the test program just for my convenience, I'll remove it
> > when committing.
> > 
> > Regards.
> > -- 
> > FFmpeg = Fierce & Fundamentalist Merciful Practical Enhanced Geisha
> 
> >  configure          |    2 +
> >  libavutil/Makefile |    1 
> >  libavutil/avutil.h |    2 -
> >  libavutil/error.c  |   78 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  libavutil/error.h  |    9 ++++++
> >  5 files changed, 91 insertions(+), 1 deletion(-)
> > f77d3060b42f1716412ccd69c553c736f8ebf372  0006-Implement-av_strerror.patch
> > >From 38a2f36937034a275245ee8336d03db1a109e799 Mon Sep 17 00:00:00 2001
> > From: Stefano Sabatini <stefano.sabatini-lala at poste.it>
> > Date: Sun, 14 Mar 2010 01:06:46 +0100
> > Subject: [PATCH 6/7] Implement av_strerror().
> > 
> > ---
> >  configure          |    2 +
> >  libavutil/Makefile |    1 +
> >  libavutil/avutil.h |    2 +-
> >  libavutil/error.c  |   78 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  libavutil/error.h  |    9 ++++++
> >  5 files changed, 91 insertions(+), 1 deletions(-)
> >  create mode 100644 libavutil/error.c
> > 
> > diff --git a/configure b/configure
> > index e12f858..db5bf08 100755
> > --- a/configure
> > +++ b/configure
> > @@ -1074,6 +1074,7 @@ HAVE_LIST="
> >      soundcard_h
> >      poll_h
> >      setrlimit
> > +    strerror_r
> >      struct_addrinfo
> >      struct_ipv6_mreq
> >      struct_sockaddr_in6
> > @@ -2531,6 +2532,7 @@ check_func  ${malloc_prefix}memalign            && enable memalign
> >  check_func  mkstemp
> >  check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
> >  check_func  setrlimit
> > +check_func  strerror_r
> >  check_func_headers io.h setmode
> >  check_func_headers lzo/lzo1x.h lzo1x_999_compress
> >  check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
> > diff --git a/libavutil/Makefile b/libavutil/Makefile
> > index 5b6cd0e..79506c0 100644
> > --- a/libavutil/Makefile
> > +++ b/libavutil/Makefile
> > @@ -30,6 +30,7 @@ OBJS = adler32.o                                                        \
> >         base64.o                                                         \
> >         crc.o                                                            \
> >         des.o                                                            \
> > +       error.o                                                          \
> >         fifo.o                                                           \
> >         intfloat_readwrite.o                                             \
> >         lfg.o                                                            \
> > diff --git a/libavutil/avutil.h b/libavutil/avutil.h
> > index 47630a7..968787c 100644
> > --- a/libavutil/avutil.h
> > +++ b/libavutil/avutil.h
> > @@ -40,7 +40,7 @@
> >  #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
> >  
> >  #define LIBAVUTIL_VERSION_MAJOR 50
> > -#define LIBAVUTIL_VERSION_MINOR 12
> > +#define LIBAVUTIL_VERSION_MINOR 13
> >  #define LIBAVUTIL_VERSION_MICRO  0
> >  
> >  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
> > diff --git a/libavutil/error.c b/libavutil/error.c
> > new file mode 100644
> > index 0000000..0140718
> > --- /dev/null
> > +++ b/libavutil/error.c
> > @@ -0,0 +1,78 @@
> > +/*
> > + * 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 "avutil.h"
> > +#include "avstring.h"
> > +
> > +int av_strerror(int errnum, char *errbuf, size_t errbuf_size)
> > +{
> > +    int ret = 0;
> > +    const char *errstr = NULL;
> > +
> > +    switch (errnum) {
> > +    case AVERROR_EOF:          errstr = "End of file"; break;
> > +    case AVERROR_INVALIDDATA:  errstr = "Invalid data found"; break;
> > +    case AVERROR_NOFMT:        errstr = "Unknown format"; break;
> > +    case AVERROR_NOTSUPP:      errstr = "Operation not supported"; break;
> > +    case AVERROR_NUMEXPECTED:  errstr = "Number syntax expected in filename"; break;
> > +    case AVERROR_PATCHWELCOME: errstr = "Not yet implemented in FFmpeg, patches welcome"; break;
> > +    }
> > +
> > +    if (errstr) {
> > +        av_strlcpy(errbuf, errstr, errbuf_size);
> > +    } else {
> > +#if HAVE_STRERROR_R
> > +        ret = strerror_r(AVUNERROR(errnum), errbuf, errbuf_size);
> 
> this code is wrong, read the manual again
> or look at the compiler warnings




More information about the ffmpeg-devel mailing list