chiark / gitweb /
Revert "rules: allow users to access frame buffer devices" (#3333)
[elogind.git] / src / basic / process-util.c
index 69a41d90b53da5786f07e48afce294c636c08030..f418b85b922cb02b669197aee1255bcee6b054fc 100644 (file)
@@ -38,7 +38,7 @@
 #endif
 
 #include "alloc-util.h"
-#include "architecture.h"
+//#include "architecture.h"
 #include "escape.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -207,7 +207,7 @@ void rename_process(const char name[8]) {
          * "systemd"). If you pass a longer string it will be
          * truncated */
 
-        prctl(PR_SET_NAME, name);
+        (void) prctl(PR_SET_NAME, name);
 
         if (program_invocation_name)
                 strncpy(program_invocation_name, name, strlen(program_invocation_name));
@@ -413,7 +413,7 @@ int get_process_environ(pid_t pid, char **env) {
                 if (!outcome)
                         return -ENOMEM;
         } else
-        outcome[sz] = '\0';
+                outcome[sz] = '\0';
 
         *env = outcome;
         outcome = NULL;
@@ -534,17 +534,23 @@ int wait_for_terminate_and_warn(const char *name, pid_t pid, bool check_exit_cod
         return -EPROTO;
 }
 
-void sigkill_wait(pid_t *pid) {
+#if 0 /// UNNEEDED by elogind
+void sigkill_wait(pid_t pid) {
+        assert(pid > 1);
+
+        if (kill(pid, SIGKILL) > 0)
+                (void) wait_for_terminate(pid, NULL);
+}
+
+void sigkill_waitp(pid_t *pid) {
         if (!pid)
                 return;
         if (*pid <= 1)
                 return;
 
-        if (kill(*pid, SIGKILL) > 0)
-                (void) wait_for_terminate(*pid, NULL);
+        sigkill_wait(*pid);
 }
 
-#if 0 /// UNNEEDED by elogind
 int kill_and_sigcont(pid_t pid, int sig) {
         int r;
 
@@ -672,6 +678,8 @@ bool is_main_thread(void) {
 #if 0 /// UNNEEDED by elogind
 noreturn void freeze(void) {
 
+        log_close();
+
         /* Make sure nobody waits for us on a socket anymore */
         close_all_fds(NULL, 0);
 
@@ -688,6 +696,9 @@ bool oom_score_adjust_is_valid(int oa) {
 unsigned long personality_from_string(const char *p) {
         int architecture;
 
+        if (!p)
+                return PERSONALITY_INVALID;
+
         /* Parse a personality specifier. We use our own identifiers that indicate specific ABIs, rather than just
          * hints regarding the register size, since we want to keep things open for multiple locally supported ABIs for
          * the same register size. */
@@ -696,62 +707,11 @@ unsigned long personality_from_string(const char *p) {
         if (architecture < 0)
                 return PERSONALITY_INVALID;
 
-#if defined(__x86_64__)
-
-        if (architecture == ARCHITECTURE_X86)
-                return PER_LINUX32;
-
-        if (architecture == ARCHITECTURE_X86_64)
-                return PER_LINUX;
-
-#elif defined(__i386__)
-
-        if (architecture == ARCHITECTURE_X86)
-                return PER_LINUX;
-
-#elif defined(__s390x__)
-
-        if (architecture == ARCHITECTURE_S390)
-                return PER_LINUX32;
-
-        if (architecture == ARCHITECTURE_S390X)
-                return PER_LINUX;
-
-#elif defined(__s390__)
-
-        if (architecture == ARCHITECTURE_S390)
-                return PER_LINUX;
-
-#elif defined(__powerpc64__)
-#  if __BYTE_ORDER == __BIG_ENDIAN
-
-        if (architecture == ARCHITECTURE_PPC_LE)
-                return PER_LINUX32;
-
-        if (architecture == ARCHITECTURE_PPC64_LE)
+        if (architecture == native_architecture())
                 return PER_LINUX;
-
-#  else
-
-        if (architecture == ARCHITECTURE_PPC)
+#ifdef SECONDARY_ARCHITECTURE
+        if (architecture == SECONDARY_ARCHITECTURE)
                 return PER_LINUX32;
-
-        if (architecture == ARCHITECTURE_PPC64)
-                return PER_LINUX;
-
-#  endif
-#elif defined(__powerpc__)
-#  if __BYTE_ORDER == __BIG_ENDIAN
-
-        if (architecture == ARCHITECTURE_PPC)
-                return PER_LINUX;
-
-#  else
-
-        if (architecture == ARCHITECTURE_PPC_LE)
-                return PER_LINUX;
-
-#  endif
 #endif
 
         return PERSONALITY_INVALID;
@@ -760,58 +720,11 @@ unsigned long personality_from_string(const char *p) {
 const char* personality_to_string(unsigned long p) {
         int architecture = _ARCHITECTURE_INVALID;
 
-#if defined(__x86_64__)
-
-        if (p == PER_LINUX)
-                architecture = ARCHITECTURE_X86_64;
-        else if (p == PER_LINUX32)
-                architecture = ARCHITECTURE_X86;
-
-#elif defined(__i386__)
-
         if (p == PER_LINUX)
-                architecture = ARCHITECTURE_X86;
-
-#elif defined(__s390x__)
-
-        if (p == PER_LINUX)
-                architecture = ARCHITECTURE_S390X;
+                architecture = native_architecture();
+#ifdef SECONDARY_ARCHITECTURE
         else if (p == PER_LINUX32)
-                architecture = ARCHITECTURE_S390;
-
-#elif defined(__s390__)
-
-        if (p == PER_LINUX)
-                architecture = ARCHITECTURE_S390;
-
-#elif defined(__powerpc64__)
-#  if __BYTE_ORDER == __BIG_ENDIAN
-
-        if (p == PER_LINUX)
-                architecture = ARCHITECTURE_PPC64;
-        else if (p == PER_LINUX32)
-                 architecture = ARCHITECTURE_PPC;
-
-#  else
-
-        if (p == PER_LINUX)
-                architecture = ARCHITECTURE_PPC64_LE;
-        else if (p == PER_LINUX32)
-                architecture = ARCHITECTURE_PPC_LE;
-
-#  endif
-#elif defined(__powerpc__)
-#  if __BYTE_ORDER == __BIG_ENDIAN
-
-        if (p == PER_LINUX)
-                architecture = ARCHITECTURE_PPC;
-
-#  else
-
-        if (p == PER_LINUX)
-                architecture = ARCHITECTURE_PPC_LE;
-
-#  endif
+                architecture = SECONDARY_ARCHITECTURE;
 #endif
 
         if (architecture < 0)
@@ -837,6 +750,18 @@ void valgrind_summary_hack(void) {
 #endif
 }
 
+int pid_compare_func(const void *a, const void *b) {
+        const pid_t *p = a, *q = b;
+
+        /* Suitable for usage in qsort() */
+
+        if (*p < *q)
+                return -1;
+        if (*p > *q)
+                return 1;
+        return 0;
+}
+
 static const char *const ioprio_class_table[] = {
         [IOPRIO_CLASS_NONE] = "none",
         [IOPRIO_CLASS_RT] = "realtime",