chiark / gitweb /
tree-wide: rename config_parse_many to …_nulstr
[elogind.git] / src / shared / sleep-config.c
index e8998d6..a57ebac 100644 (file)
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
-#include <errno.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.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 "conf-parser.h"
+//#include "def.h"
+//#include "env-util.h"
 #include "fd-util.h"
 #include "fileio.h"
-#include "log.h"
-#include "macro.h"
+//#include "log.h"
+//#include "macro.h"
 #include "parse-util.h"
 #include "sleep-config.h"
 #include "string-util.h"
 #include "strv.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) {
-#else
-/// really only used in here.
-static int parse_sleep_config(const char *verb, char ***_modes, char ***_states) {
-#endif // 0
+
         _cleanup_strv_free_ char
                 **suspend_mode = NULL, **suspend_state = NULL,
                 **hibernate_mode = NULL, **hibernate_state = NULL,
@@ -61,19 +59,10 @@ static int parse_sleep_config(const char *verb, char ***_modes, char ***_states)
                 {}
         };
 
-#if 0 /// elogind has its own config file
-        config_parse_many(PKGSYSCONFDIR "/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);
-#else
-        const char* logind_conf = getenv("ELOGIND_CONF_FILE");
-        if (!logind_conf)
-                logind_conf = PKGSYSCONFDIR "/logind.conf";
-        config_parse(NULL, logind_conf, NULL, "Sleep\0",
-                     config_item_table_lookup, items, false,
-                     false, true, NULL);
-#endif // 0
 
         if (streq(verb, "suspend")) {
                 /* empty by default */
@@ -119,7 +108,11 @@ static 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;
@@ -149,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;
@@ -244,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;
@@ -268,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;
@@ -285,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