When compiling for Android 4.3, the Android headers define the types
posix_spawnattr_t and posix_spawn_file_actions_t. But the corresponding
functions are not declared and not available at link time. Therefore gnulib
attempts to build its replacements, which fails because the types don't
contain the expected members:

spawn_faction_addclose.c: In function 'posix_spawn_file_actions_addclose':
spawn_faction_addclose.c:50:19: error: request for member '_used' in something 
not a structure or union
   if (file_actions->_used == file_actions->_allocated
                   ^
spawn_faction_addclose.c:50:42: error: request for member '_allocated' in 
something not a structure or union
   if (file_actions->_used == file_actions->_allocated
                                          ^
spawn_faction_addclose.c:59:24: error: request for member '_actions' in 
something not a structure or union
     rec = &file_actions->_actions[file_actions->_used];
                        ^

This patch fixes it.


2018-05-13  Bruno Haible  <br...@clisp.org>

        posix_spawn: Fix compilation error on Android.
        * lib/spawn.in.h (posix_spawnattr_t): Consider also the case
        HAVE_POSIX_SPAWNATTR_T = 1 && HAVE_POSIX_SPAWN = 0.
        (posix_spawn_file_actions_t): Consider also the case
        HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 && HAVE_POSIX_SPAWN = 0.

diff --git a/lib/spawn.in.h b/lib/spawn.in.h
index b0dfcb5..a606176 100644
--- a/lib/spawn.in.h
+++ b/lib/spawn.in.h
@@ -79,10 +79,10 @@
 
 
 /* Data structure to contain attributes for thread creation.  */
-#if @REPLACE_POSIX_SPAWN@
+#if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWNATTR_T@ && !@HAVE_POSIX_SPAWN@)
 # define posix_spawnattr_t rpl_posix_spawnattr_t
 #endif
-#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@
+#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@ || !@HAVE_POSIX_SPAWN@
 # if !GNULIB_defined_posix_spawnattr_t
 typedef struct
 {
@@ -101,10 +101,10 @@ typedef struct
 
 /* Data structure to contain information about the actions to be
    performed in the new process with respect to file descriptors.  */
-#if @REPLACE_POSIX_SPAWN@
+#if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ && 
!@HAVE_POSIX_SPAWN@)
 # define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t
 #endif
-#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@
+#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ || 
!@HAVE_POSIX_SPAWN@
 # if !GNULIB_defined_posix_spawn_file_actions_t
 typedef struct
 {


Reply via email to