On Fri, Oct 18, 2019 at 11:25:55 +0100, Daniel Berrange wrote: > On Fri, Oct 18, 2019 at 12:16:00PM +0200, Peter Krempa wrote: > > On Fri, Oct 18, 2019 at 11:49:05 +0200, Michal Privoznik wrote: > > > These functions don't really abort() on OOM. The fix was merged > > > upstream, but not in the minimal version we require. Provide our > > > own implementation which can be removed once we bump the minimal > > > version. > > > > > > Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > > > --- > > > > > > v2 of: > > > > > > https://www.redhat.com/archives/libvir-list/2019-October/msg01153.html > > > > > > diff to v1: > > > - moved the code to src/utils/glibcompat.c > > > > > > src/internal.h | 1 + > > > src/libvirt_private.syms | 5 +++++ > > > src/util/Makefile.inc.am | 2 ++ > > > src/util/glibcompat.c | 48 ++++++++++++++++++++++++++++++++++++++++ > > > src/util/glibcompat.h | 31 ++++++++++++++++++++++++++ > > > 5 files changed, 87 insertions(+) > > > create mode 100644 src/util/glibcompat.c > > > create mode 100644 src/util/glibcompat.h > > > > > > diff --git a/src/internal.h b/src/internal.h > > > index fb17b87baa..5b0a2335f5 100644 > > > --- a/src/internal.h > > > +++ b/src/internal.h > > > @@ -64,6 +64,7 @@ > > > #include "libvirt/virterror.h" > > > > > > #include "c-strcase.h" > > > +#include "glibcompat.h" > > > > Please include this right below glib.h > > > > > > > > /* Merely casting to (void) is not sufficient since the > > > * introduction of the "warn_unused_result" attribute > > > > [...] > > > > > diff --git a/src/util/glibcompat.c b/src/util/glibcompat.c > > > new file mode 100644 > > > index 0000000000..af638f4d8c > > > --- /dev/null > > > +++ b/src/util/glibcompat.c > > > @@ -0,0 +1,48 @@ > > > +/* > > > + * Copyright (C) 2019 Red Hat, Inc. > > > + * > > > + * This library 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. > > > + * > > > + * This library 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 this library. If not, see > > > + * <http://www.gnu.org/licenses/>. > > > + */ > > > + > > > +#include <config.h> > > > + > > > +#include "glibcompat.h" > > > > Sooo, this includes the macros ... > > > > > + > > > +/* Due to a bug in glib, g_strdup_printf() nor g_strdup_vprintf() > > > + * abort on OOM. It's fixed in glib's upstream. Provide our own > > > + * implementation until the fix get's distributed. */ > > > +char * > > > +vir_g_strdup_printf(const char *msg, ...) > > > +{ > > > + va_list args; > > > + char *ret; > > > + va_start(args, msg); > > > + ret = g_strdup_vprintf(msg, args); > > > + if (!ret) > > > + abort(); > > > + va_end(args); > > > + return ret; > > > +} > > > + > > > + > > > +char * > > > +vir_g_strdup_vprintf(const char *msg, va_list args) > > > +{ > > > + char *ret; > > > + ret = g_strdup_vprintf(msg, args); > > > > So this will become vir_g_strdup_vprintf.. thus become infinite > > recursion. > > > > > + if (!ret) > > > + abort(); > > > + return ret; > > > +} > > > > I think the kludge header must be separate and not included into this > > implementation, otherwise it will not work as expected. > > Just put a #undef g_strdup_vprintf in the .c file, since we need > the #include in order to get the function prototype declared. My idea was to have a special header just for the defines, but this works as well. -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list