summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2021-12-11 17:43:48 +0100
committerBruno Haible <bruno@clisp.org>2021-12-11 17:43:48 +0100
commit8e3d5944a4c6fca1ecf1d76f669da83861eb0ca0 (patch)
tree910f6060ab2ae524d5eee8c56c70def92f7de329 /lib
parent4d1e184fd546db46ca11bb4974e47984366875d9 (diff)
downloadgnulib-8e3d5944a4c6fca1ecf1d76f669da83861eb0ca0.tar.gz
get_ppid_of, get_progname_of: Fix compilation error on Mac OS X < 10.5.
Reported by Ryan Schmidt <gnulib@ryandesign.com> in <https://lists.gnu.org/archive/html/bug-gnulib/2021-12/msg00011.html>. * lib/get_ppid_of.c: Include AvailabilityMacros.h (get_ppid_of): Use MAC_OS_X_VERSION_MAX_ALLOWED and MAC_OS_X_VERSION_MIN_REQUIRED. * lib/get_progname_of: Include AvailabilityMacros.h (get_progname_of): Use MAC_OS_X_VERSION_MAX_ALLOWED and MAC_OS_X_VERSION_MIN_REQUIRED.
Diffstat (limited to 'lib')
-rw-r--r--lib/get_ppid_of.c20
-rw-r--r--lib/get_progname_of.c20
2 files changed, 32 insertions, 8 deletions
diff --git a/lib/get_ppid_of.c b/lib/get_ppid_of.c
index f153b7539c..dd4e38129d 100644
--- a/lib/get_ppid_of.c
+++ b/lib/get_ppid_of.c
@@ -33,7 +33,13 @@
#endif
#if defined __APPLE__ && defined __MACH__ /* Mac OS X */
-# include <libproc.h>
+/* Get MAC_OS_X_VERSION_MIN_REQUIRED, MAC_OS_X_VERSION_MAX_ALLOWED.
+ The version at runtime satisfies
+ MAC_OS_X_VERSION_MIN_REQUIRED <= version <= MAC_OS_X_VERSION_MAX_ALLOWED. */
+# include <AvailabilityMacros.h>
+# if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
+# include <libproc.h>
+# endif
#endif
#if defined _AIX /* AIX */
@@ -226,14 +232,19 @@ get_ppid_of (pid_t pid)
#endif
#if defined __APPLE__ && defined __MACH__ /* Mac OS X */
+# if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
-# if defined PROC_PIDT_SHORTBSDINFO
+ /* Mac OS X >= 10.7 has PROC_PIDT_SHORTBSDINFO. */
+# if defined PROC_PIDT_SHORTBSDINFO
struct proc_bsdshortinfo info;
if (proc_pidinfo (pid, PROC_PIDT_SHORTBSDINFO, 0, &info, sizeof (info))
== sizeof (info))
return info.pbsi_ppid;
-# else
+# endif
+
+# if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
+ /* For older versions, use PROC_PIDTBSDINFO instead. */
/* Note: The second part of 'struct proc_bsdinfo' differs in size between
32-bit and 64-bit environments, and the kernel of Mac OS X 10.5 knows
only about the 32-bit 'struct proc_bsdinfo'. Fortunately all the info
@@ -242,8 +253,9 @@ get_ppid_of (pid_t pid)
if (proc_pidinfo (pid, PROC_PIDTBSDINFO, 0, &info, 128) == 128)
return info.pbi_ppid;
-# endif
+# endif
+# endif
#endif
#if defined _AIX /* AIX */
diff --git a/lib/get_progname_of.c b/lib/get_progname_of.c
index 46144e7426..bdda3c60d8 100644
--- a/lib/get_progname_of.c
+++ b/lib/get_progname_of.c
@@ -41,7 +41,13 @@
#endif
#if defined __APPLE__ && defined __MACH__ /* Mac OS X */
-# include <libproc.h>
+/* Get MAC_OS_X_VERSION_MIN_REQUIRED, MAC_OS_X_VERSION_MAX_ALLOWED.
+ The version at runtime satisfies
+ MAC_OS_X_VERSION_MIN_REQUIRED <= version <= MAC_OS_X_VERSION_MAX_ALLOWED. */
+# include <AvailabilityMacros.h>
+# if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
+# include <libproc.h>
+# endif
#endif
#if defined _AIX /* AIX */
@@ -266,14 +272,19 @@ get_progname_of (pid_t pid)
#endif
#if defined __APPLE__ && defined __MACH__ /* Mac OS X */
+# if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
-# if defined PROC_PIDT_SHORTBSDINFO
+ /* Mac OS X >= 10.7 has PROC_PIDT_SHORTBSDINFO. */
+# if defined PROC_PIDT_SHORTBSDINFO
struct proc_bsdshortinfo info;
if (proc_pidinfo (pid, PROC_PIDT_SHORTBSDINFO, 0, &info, sizeof (info))
== sizeof (info))
return strdup (info.pbsi_comm);
-# else
+# endif
+
+# if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
+ /* For older versions, use PROC_PIDTBSDINFO instead. */
/* Note: The second part of 'struct proc_bsdinfo' differs in size between
32-bit and 64-bit environments, and the kernel of Mac OS X 10.5 knows
only about the 32-bit 'struct proc_bsdinfo'. Fortunately all the info
@@ -282,8 +293,9 @@ get_progname_of (pid_t pid)
if (proc_pidinfo (pid, PROC_PIDTBSDINFO, 0, &info, 128) == 128)
return strdup (info.pbi_comm);
-# endif
+# endif
+# endif
#endif
#if defined _AIX /* AIX */