lvm2: fix build with musl
authorDaniel Golle <daniel@makrotopia.org>
Sat, 25 Apr 2015 21:34:05 +0000 (23:34 +0200)
committerDaniel Golle <daniel@makrotopia.org>
Sat, 25 Apr 2015 21:45:14 +0000 (23:45 +0200)
stdin, stderr and stdout are constants on musl and it doesn't provide
mallinfo.
Both, overwriting std* were used to catch and work around various
misbehaviours of glibc, so it's hopefully save to just skip them when
building against other libc implementations.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
utils/lvm2/patches/002-const-stdio.patch [new file with mode: 0644]
utils/lvm2/patches/003-no-mallinfo.patch [new file with mode: 0644]

diff --git a/utils/lvm2/patches/002-const-stdio.patch b/utils/lvm2/patches/002-const-stdio.patch
new file mode 100644 (file)
index 0000000..15c2e86
--- /dev/null
@@ -0,0 +1,58 @@
+Index: LVM2.2.02.118/lib/commands/toolcontext.c
+===================================================================
+--- LVM2.2.02.118.orig/lib/commands/toolcontext.c
++++ LVM2.2.02.118/lib/commands/toolcontext.c
+@@ -1625,8 +1625,10 @@ struct cmd_context *create_toolcontext(u
+                                      unsigned threaded)
+ {
+       struct cmd_context *cmd;
++#if defined(__GLIBC__) && !defined(VALGRIND_POOL)
+       FILE *new_stream;
+       int flags;
++#endif
+ #ifdef M_MMAP_MAX
+       mallopt(M_MMAP_MAX, 0);
+@@ -1662,7 +1664,7 @@ struct cmd_context *create_toolcontext(u
+       /* FIXME Make this configurable? */
+       reset_lvm_errno(1);
+-#ifndef VALGRIND_POOL
++#if defined(__GLIBC__) && !defined(VALGRIND_POOL)
+       /* Set in/out stream buffering before glibc */
+       if (set_buffering) {
+               /* Allocate 2 buffers */
+@@ -2035,7 +2037,7 @@ void destroy_toolcontext(struct cmd_cont
+       if (cmd->libmem)
+               dm_pool_destroy(cmd->libmem);
+-#ifndef VALGRIND_POOL
++#if defined(__GLIBC__) && !defined(VALGRIND_POOL)
+       if (cmd->linebuffer) {
+               /* Reset stream buffering to defaults */
+               if (is_valid_fd(STDIN_FILENO) &&
+Index: LVM2.2.02.118/tools/lvmcmdline.c
+===================================================================
+--- LVM2.2.02.118.orig/tools/lvmcmdline.c
++++ LVM2.2.02.118/tools/lvmcmdline.c
+@@ -1602,6 +1602,7 @@ int lvm_split(char *str, int *argc, char
+ /* Make sure we have always valid filedescriptors 0,1,2 */
+ static int _check_standard_fds(void)
+ {
++#ifdef __GLIBC__
+       int err = is_valid_fd(STDERR_FILENO);
+       if (!is_valid_fd(STDIN_FILENO) &&
+@@ -1628,6 +1629,12 @@ static int _check_standard_fds(void)
+                      strerror(errno));
+               return 0;
+       }
++#else
++      if (!is_valid_fd(STDERR_FILENO) ||
++          !is_valid_fd(STDOUT_FILENO) ||
++          !is_valid_fd(STDIN_FILENO))
++              return 0;
++#endif
+       return 1;
+ }
diff --git a/utils/lvm2/patches/003-no-mallinfo.patch b/utils/lvm2/patches/003-no-mallinfo.patch
new file mode 100644 (file)
index 0000000..1337236
--- /dev/null
@@ -0,0 +1,13 @@
+Index: LVM2.2.02.118/lib/mm/memlock.c
+===================================================================
+--- LVM2.2.02.118.orig/lib/mm/memlock.c
++++ LVM2.2.02.118/lib/mm/memlock.c
+@@ -137,7 +137,7 @@ static void _touch_memory(void *mem, siz
+ static void _allocate_memory(void)
+ {
+-#ifndef VALGRIND_POOL
++#if defined(__GLIBC__) && !defined(VALGRIND_POOL)
+       void *stack_mem;
+       struct rlimit limit;
+       int i, area = 0, missing = _size_malloc_tmp, max_areas = 32, hblks;