From e0d173c6c44d52287f2e20ec104cb3840e558343 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Thu, 22 Feb 2018 12:45:14 +0100 Subject: [PATCH] libbtrfsutil: add stub for reallocarray This function is new in glibc 2.26 and breaks build in CI and possibly other environments. Signed-off-by: David Sterba --- Makefile | 3 ++- configure.ac | 2 ++ libbtrfsutil/stubs.c | 35 +++++++++++++++++++++++++++++++++++ libbtrfsutil/stubs.h | 22 ++++++++++++++++++++++ libbtrfsutil/subvolume.c | 1 + 5 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 libbtrfsutil/stubs.c create mode 100644 libbtrfsutil/stubs.h diff --git a/Makefile b/Makefile index 24af13a4..6065522a 100644 --- a/Makefile +++ b/Makefile @@ -136,7 +136,8 @@ libbtrfsutil_minor := $(shell sed -rn 's/^\#define BTRFS_UTIL_VERSION_MINOR ([0- libbtrfsutil_patch := $(shell sed -rn 's/^\#define BTRFS_UTIL_VERSION_PATCH ([0-9])+$$/\1/p' libbtrfsutil/btrfsutil.h) libbtrfsutil_version := $(libbtrfsutil_major).$(libbtrfsutil_minor).$(libbtrfsutil_patch) libbtrfsutil_objects = libbtrfsutil/errors.o libbtrfsutil/filesystem.o \ - libbtrfsutil/subvolume.o libbtrfsutil/qgroup.o + libbtrfsutil/subvolume.o libbtrfsutil/qgroup.o \ + libbtrfsutil/stubs.o convert_objects = convert/main.o convert/common.o convert/source-fs.o \ convert/source-ext2.o convert/source-reiserfs.o mkfs_objects = mkfs/main.o mkfs/common.o mkfs/rootdir.o diff --git a/configure.ac b/configure.ac index 7d80aa49..17dcb3a4 100644 --- a/configure.ac +++ b/configure.ac @@ -43,6 +43,8 @@ AC_PATH_PROG([RMDIR], [rmdir], [rmdir]) AC_CHECK_FUNCS([openat], [], [AC_MSG_ERROR([cannot find openat() function])]) +AC_CHECK_FUNCS([reallocarray]) + m4_ifndef([PKG_PROG_PKG_CONFIG], [m4_fatal([Could not locate the pkg-config autoconf macros. These are usually located in /usr/share/aclocal/pkg.m4. diff --git a/libbtrfsutil/stubs.c b/libbtrfsutil/stubs.c new file mode 100644 index 00000000..9b9e037f --- /dev/null +++ b/libbtrfsutil/stubs.c @@ -0,0 +1,35 @@ +/* + * This file is part of libbtrfsutil. + * + * libbtrfsutil 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 3 of the License, or + * (at your option) any later version. + * + * libbtrfsutil 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 libbtrfsutil. If not, see . + */ + +#if HAVE_REALLOCARRAY != 1 + +#include +#include + +void *reallocarray(void *ptr, size_t nmemb, size_t size) +{ + size_t res; + + res = nmemb * size; + if (res < nmemb || res < size) { + errno = ENOMEM; + return NULL; + } + return realloc(ptr, res); +} + +#endif diff --git a/libbtrfsutil/stubs.h b/libbtrfsutil/stubs.h new file mode 100644 index 00000000..cb6d43ca --- /dev/null +++ b/libbtrfsutil/stubs.h @@ -0,0 +1,22 @@ +/* + * This file is part of libbtrfsutil. + * + * libbtrfsutil 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 3 of the License, or + * (at your option) any later version. + * + * libbtrfsutil 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 libbtrfsutil. If not, see . + */ + +#ifndef _LIBBTRFSUTIL_STUBS_H_ + +void *reallocarray(void *ptr, size_t nmemb, size_t size); + +#endif diff --git a/libbtrfsutil/subvolume.c b/libbtrfsutil/subvolume.c index 965376e3..b9bb99f8 100644 --- a/libbtrfsutil/subvolume.c +++ b/libbtrfsutil/subvolume.c @@ -27,6 +27,7 @@ #include #include #include +#include "stubs.h" #include "btrfsutil_internal.h"