libbtrfsutil: add stub for reallocarray
authorDavid Sterba <dsterba@suse.com>
Thu, 22 Feb 2018 11:45:14 +0000 (12:45 +0100)
committerDavid Sterba <dsterba@suse.com>
Tue, 6 Mar 2018 10:28:37 +0000 (11:28 +0100)
This function is new in glibc 2.26 and breaks build in CI and possibly
other environments.

Signed-off-by: David Sterba <dsterba@suse.com>
Makefile
configure.ac
libbtrfsutil/stubs.c [new file with mode: 0644]
libbtrfsutil/stubs.h [new file with mode: 0644]
libbtrfsutil/subvolume.c

index 24af13a..6065522 100644 (file)
--- 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
index 7d80aa4..17dcb3a 100644 (file)
@@ -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 (file)
index 0000000..9b9e037
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+ */
+
+#if HAVE_REALLOCARRAY != 1
+
+#include <stdlib.h>
+#include <errno.h>
+
+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 (file)
index 0000000..cb6d43c
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _LIBBTRFSUTIL_STUBS_H_
+
+void *reallocarray(void *ptr, size_t nmemb, size_t size);
+
+#endif
index 965376e..b9bb99f 100644 (file)
@@ -27,6 +27,7 @@
 #include <sys/types.h>
 #include <sys/vfs.h>
 #include <linux/magic.h>
+#include "stubs.h"
 
 #include "btrfsutil_internal.h"