diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2018-04-06 18:58:55 +0200 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2018-08-24 16:47:08 +0200 |
commit | 9d1ff89d622fd4d8b3be210996cfa73943d81e03 (patch) | |
tree | 102f525976d4d49adff59adba7ca7c0d9e825a14 /src/sleep | |
parent | 5642683e0db55c457dcd03df1290334a238194e2 (diff) |
tree-wide: drop license boilerplate
Files which are installed as-is (any .service and other unit files, .conf
files, .policy files, etc), are left as is. My assumption is that SPDX
identifiers are not yet that well known, so it's better to retain the
extended header to avoid any doubt.
I also kept any copyright lines. We can probably remove them, but it'd nice to
obtain explicit acks from all involved authors before doing that.
Diffstat (limited to 'src/sleep')
-rw-r--r-- | src/sleep/sleep.c | 94 |
1 files changed, 8 insertions, 86 deletions
diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c index 9b5aa6264..fe193a284 100644 --- a/src/sleep/sleep.c +++ b/src/sleep/sleep.c @@ -4,26 +4,11 @@ Copyright 2012 Lennart Poettering Copyright 2013 Zbigniew Jędrzejewski-Szmek - Copyright 2010-2017 Canonical Copyright 2018 Dell Inc. - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - systemd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see <http://www.gnu.org/licenses/>. ***/ //#include <errno.h> //#include <getopt.h> -//#include <linux/fiemap.h> //#include <stdio.h> #include "sd-messages.h" @@ -45,67 +30,6 @@ static char* arg_verb = NULL; -static int write_hibernate_location_info(void) { - _cleanup_free_ char *device = NULL, *type = NULL; - _cleanup_free_ struct fiemap *fiemap = NULL; - char offset_str[DECIMAL_STR_MAX(uint64_t)]; - char device_str[DECIMAL_STR_MAX(uint64_t)]; - _cleanup_close_ int fd = -1; - struct stat stb; - uint64_t offset; - int r; - - r = find_hibernate_location(&device, &type, NULL, NULL); - if (r < 0) - return log_debug_errno(r, "Unable to find hibernation location: %m"); - - /* if it's a swap partition, we just write the disk to /sys/power/resume */ - if (streq(type, "partition")) - return write_string_file("/sys/power/resume", device, 0); - else if (!streq(type, "file")) - return log_debug_errno(EINVAL, "Invalid hibernate type %s: %m", - type); - - /* Only available in 4.17+ */ - if (access("/sys/power/resume_offset", F_OK) < 0) { - if (errno == ENOENT) - return 0; - return log_debug_errno(errno, "/sys/power/resume_offset unavailable: %m"); - } - - r = access("/sys/power/resume_offset", W_OK); - if (r < 0) - return log_debug_errno(errno, "/sys/power/resume_offset not writeable: %m"); - - fd = open(device, O_RDONLY | O_CLOEXEC | O_NONBLOCK); - if (fd < 0) - return log_debug_errno(errno, "Unable to open '%s': %m", device); - r = fstat(fd, &stb); - if (r < 0) - return log_debug_errno(errno, "Unable to stat %s: %m", device); - r = read_fiemap(fd, &fiemap); - if (r < 0) - return log_debug_errno(r, "Unable to read extent map for '%s': %m", - device); - if (fiemap->fm_mapped_extents == 0) { - log_debug("No extents found in '%s'", device); - return -EINVAL; - } - offset = fiemap->fm_extents[0].fe_physical / page_size(); - xsprintf(offset_str, "%" PRIu64, offset); - r = write_string_file("/sys/power/resume_offset", offset_str, 0); - if (r < 0) - return log_debug_errno(r, "Failed to write offset '%s': %m", - offset_str); - - xsprintf(device_str, "%lx", (unsigned long)stb.st_dev); - r = write_string_file("/sys/power/resume", device_str, 0); - if (r < 0) - return log_debug_errno(r, "Failed to write device '%s': %m", - device_str); - return 0; -} - static int write_mode(char **modes) { int r = 0; char **mode; @@ -123,6 +47,9 @@ static int write_mode(char **modes) { r = k; } + if (r < 0) + log_error_errno(r, "Failed to write mode to /sys/power/disk: %m"); + return r; } @@ -144,7 +71,7 @@ static int write_state(FILE **f, char **states) { fclose(*f); *f = fopen("/sys/power/state", "we"); if (!*f) - return -errno; + return log_error_errno(errno, "Failed to open /sys/power/state: %m"); } return r; @@ -173,14 +100,9 @@ static int execute(char **modes, char **states) { return log_error_errno(errno, "Failed to open /sys/power/state: %m"); /* Configure the hibernation mode */ - if (!strv_isempty(modes)) { - r = write_hibernate_location_info(); - if (r < 0) - return log_error_errno(r, "Failed to write hibernation disk offset: %m"); - r = write_mode(modes); - if (r < 0) - return log_error_errno(r, "Failed to write mode to /sys/power/disk: %m");; - } + r = write_mode(modes); + if (r < 0) + return r; execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL, NULL, arguments); @@ -192,7 +114,7 @@ static int execute(char **modes, char **states) { r = write_state(&f, states); if (r < 0) - return log_error_errno(r, "Failed to write /sys/power/state: %m"); + return r; log_struct(LOG_INFO, "MESSAGE_ID=" SD_MESSAGE_SLEEP_STOP_STR, |