**suspend_mode = NULL, **suspend_state = NULL,
**hibernate_mode = NULL, **hibernate_state = NULL,
**hybrid_mode = NULL, **hybrid_state = NULL;
- char **modes, **states;
+ _cleanup_strv_free_ char **modes, **states; /* always initialized below */
usec_t delay = 180 * USEC_PER_MINUTE;
const ConfigTableItem items[] = {
assert_not_reached("what verb");
if ((!modes && STR_IN_SET(verb, "hibernate", "hybrid-sleep")) ||
- (!states && !streq(verb, "suspend-then-hibernate"))) {
- strv_free(modes);
- strv_free(states);
+ (!states && !streq(verb, "suspend-then-hibernate")))
return log_oom();
- }
if (_modes)
- *_modes = modes;
+ *_modes = TAKE_PTR(modes);
if (_states)
- *_states = states;
+ *_states = TAKE_PTR(states);
if (_delay)
*_delay = delay;
#include "strv.h"
#include "util.h"
+static void test_parse_sleep_config(void) {
+ const char *verb;
+
+ FOREACH_STRING(verb, "suspend", "hibernate", "hybrid-sleep", "suspend-then-hibernate")
+ assert_se(parse_sleep_config(verb, NULL, NULL, NULL) == 0);
+}
+
static int test_fiemap(const char *path) {
_cleanup_free_ struct fiemap *fiemap = NULL;
_cleanup_close_ int fd = -1;
if (getuid() != 0)
log_warning("This program is unlikely to work for unprivileged users");
+ test_parse_sleep_config();
test_sleep();
if (argc <= 1)