chiark / gitweb /
tree-wide: rename config_parse_many to …_nulstr
[elogind.git] / src / shared / sleep-config.c
index 3dedbd1..a57ebac 100644 (file)
@@ -1,5 +1,3 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
 /***
   This file is part of systemd.
 
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
-#include <stdio.h>
-
-#include "conf-parser.h"
-#include "sleep-config.h"
+//#include <errno.h>
+//#include <stdbool.h>
+//#include <stddef.h>
+//#include <stdio.h>
+//#include <string.h>
+//#include <syslog.h>
+//#include <unistd.h>
+
+#include "alloc-util.h"
+//#include "conf-parser.h"
+//#include "def.h"
+//#include "env-util.h"
+#include "fd-util.h"
 #include "fileio.h"
-#include "log.h"
+//#include "log.h"
+//#include "macro.h"
+#include "parse-util.h"
+#include "sleep-config.h"
+#include "string-util.h"
 #include "strv.h"
-#include "util.h"
 
-#define USE(x, y) do{ (x) = (y); (y) = NULL; } while(0)
+#if 0 /// UNNEEDED by elogind
+#define USE(x, y) do { (x) = (y); (y) = NULL; } while (0)
 
 int parse_sleep_config(const char *verb, char ***_modes, char ***_states) {
 
@@ -48,8 +59,8 @@ int parse_sleep_config(const char *verb, char ***_modes, char ***_states) {
                 {}
         };
 
-        config_parse_many(PKGSYSCONFDIR "/sleep.conf",
-                          CONF_DIRS_NULSTR("systemd/sleep.conf"),
+        config_parse_many_nulstr(PKGSYSCONFDIR "/sleep.conf",
+                          CONF_PATHS_NULSTR("systemd/sleep.conf.d"),
                           "Sleep\0", config_item_table_lookup, items,
                           false, NULL);
 
@@ -97,7 +108,11 @@ int parse_sleep_config(const char *verb, char ***_modes, char ***_states) {
         *_states = states;
         return 0;
 }
+#endif // 0
 
+#if 1 /// Only available in this file for elogind
+static
+#endif // 0
 int can_sleep_state(char **types) {
         char **type;
         int r;
@@ -127,6 +142,9 @@ int can_sleep_state(char **types) {
         return false;
 }
 
+#if 1 /// Only available in this file for elogind
+static
+#endif // 0
 int can_sleep_disk(char **types) {
         char **type;
         int r;
@@ -222,6 +240,11 @@ static bool enough_memory_for_hibernation(void) {
         size_t size = 0, used = 0;
         int r;
 
+#if 0 /// elogind does not allow any bypass, we are never init!
+        if (getenv_bool("SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK") > 0)
+                return true;
+#endif // 0
+
         r = hibernation_partition_size(&size, &used);
         if (r < 0)
                 return false;
@@ -246,6 +269,7 @@ static bool enough_memory_for_hibernation(void) {
         return r;
 }
 
+#if 0 /// elogind has to do, or better, *can* do it differently
 int can_sleep(const char *verb) {
         _cleanup_strv_free_ char **modes = NULL, **states = NULL;
         int r;
@@ -263,3 +287,29 @@ int can_sleep(const char *verb) {
 
         return streq(verb, "suspend") || enough_memory_for_hibernation();
 }
+#else
+int can_sleep(Manager *m, const char *verb) {
+
+        assert(streq(verb, "suspend") ||
+               streq(verb, "hibernate") ||
+               streq(verb, "hybrid-sleep"));
+
+        if ( streq(verb, "suspend")
+          && ( !can_sleep_state(m->suspend_state)
+            || !can_sleep_disk(m->suspend_mode) ) )
+                return false;
+
+        if ( streq(verb, "hibernate")
+          && ( !can_sleep_state(m->hibernate_state)
+            || !can_sleep_disk(m->hibernate_mode) ) )
+                return false;
+
+        if ( streq(verb, "hybrid-sleep")
+          && ( !can_sleep_state(m->hybrid_sleep_state)
+            || !can_sleep_disk(m->hybrid_sleep_mode) ) )
+                return false;
+
+
+        return streq(verb, "suspend") || enough_memory_for_hibernation();
+}
+#endif // 0