diff options
Diffstat (limited to 'sys-apps/baselayout-prefix/files/baselayout-1.12.5-aix.patch')
-rw-r--r-- | sys-apps/baselayout-prefix/files/baselayout-1.12.5-aix.patch | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/sys-apps/baselayout-prefix/files/baselayout-1.12.5-aix.patch b/sys-apps/baselayout-prefix/files/baselayout-1.12.5-aix.patch new file mode 100644 index 000000000000..ebc162345a52 --- /dev/null +++ b/sys-apps/baselayout-prefix/files/baselayout-1.12.5-aix.patch @@ -0,0 +1,110 @@ +W00T, AIX does have /proc filesystem - even with slightly different layout. + +--- src/start-stop-daemon.c ++++ src/start-stop-daemon.c +@@ -56,6 +56,8 @@ + # define OSNetBSD + #elif defined(__APPLE__) + # define OSDarwin ++#elif defined(_AIX) ++# define OSaix + #else + # error Unknown architecture - cannot build start-stop-daemon + #endif +@@ -85,6 +87,10 @@ + #include <sys/pstat.h> + #endif + ++#if defined(OSaix) ++#include <sys/procfs.h> ++#endif ++ + #include <errno.h> + #include <stdio.h> + #include <stdlib.h> +@@ -178,7 +184,7 @@ + static void do_pidfile(const char *name); + static void do_stop(int signal_nr, int quietmode, + int *n_killed, int *n_notkilled, int retry_nr); +-#if defined(OSLinux) || defined(OShpux) ++#if defined(OSLinux) || defined(OShpux) || defined(OSaix) + static int pid_is_exec(pid_t pid, const struct stat *esb); + #endif + +@@ -755,7 +761,7 @@ + static void + check(pid_t pid) + { +-#if defined(OSLinux) || defined(OShpux) ++#if defined(OSLinux) || defined(OShpux) || defined(OSaix) + if (execname && !pid_is_exec(pid, &exec_stat)) + return; + #elif defined(OSHURD) || defined(OSFreeBSD) || defined(OSNetBSD) || defined(OSDarwin) +@@ -791,7 +797,7 @@ + /* WTA: this needs to be an autoconf check for /proc/pid existance. + */ + +-#if defined(OSLinux) || defined (OSsunos) || defined(OSfreebsd) ++#if defined(OSLinux) || defined (OSsunos) || defined(OSfreebsd) || defined(OSaix) + static void + do_procinit(void) + { +@@ -1059,6 +1065,58 @@ + } + #endif /* OShpux */ + ++#if defined(OSaix) ++/* max possible pid (signed long) in theory: ++ * 32bit: 2147483647 (10 digits) ++ * 64bit: 9223372036854775807 (19 digits) ++ */ ++static int ++pid_is_exec(pid_t pid, const struct stat *esb) ++{ ++ struct stat sb; ++ char buf[40]; ++ ++ sprintf(buf, "/proc/%ld/object/a.out", pid); ++ if (stat(buf, &sb) != 0) ++ return 0; ++ return (sb.st_dev == esb->st_dev && sb.st_ino == esb->st_ino); ++} ++ ++ ++static int ++pid_is_user(pid_t pid, uid_t uid) ++{ ++ struct stat sb; ++ char buf[32]; ++ ++ sprintf(buf, "/proc/%ld", pid); ++ if (stat(buf, &sb) != 0) ++ return 0; ++ return (sb.st_uid == uid); ++} ++ ++ ++static int ++pid_is_cmd(pid_t pid, const char *name) ++{ ++ char buf[40]; ++ FILE *f; ++ struct psinfo psi; ++ int r; ++ ++ sprintf(buf, "/proc/%ld/psinfo", pid); ++ f = fopen(buf, "r"); ++ if (!f) ++ return 0; ++ r = fread(&psi, sizeof(psi), 1, f); ++ fclose(f); ++ if (r != 1) { ++ return 0; ++ } ++ return strcmp(name, psi.pr_fname) == 0; ++} ++#endif /* OSaix */ ++ + + static void + do_findprocs(void) |