Merge pull request #10811 from keszybz/define-main-through-macro
Define main through macro
This commit is contained in:
@@ -63,7 +63,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
/* This is mostly intended to be used for scripts which want
|
||||
@@ -74,17 +74,16 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
r = on_ac_power();
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to read AC status: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to read AC status: %m");
|
||||
|
||||
if (arg_verbose)
|
||||
puts(yes_no(r));
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : !r;
|
||||
return r == 0;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
|
||||
|
||||
@@ -506,4 +506,23 @@ static inline int __coverity_check__(int condition) {
|
||||
DEFINE_PUBLIC_TRIVIAL_REF_FUNC(type, name); \
|
||||
DEFINE_PUBLIC_TRIVIAL_UNREF_FUNC(type, name, free_func);
|
||||
|
||||
/* Negative return values from impl are mapped to EXIT_FAILURE, and
|
||||
* everything else means success! */
|
||||
#define DEFINE_MAIN_FUNCTION(impl) \
|
||||
int main(int argc, char *argv[]) { \
|
||||
int r; \
|
||||
r = impl(argc, argv); \
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; \
|
||||
}
|
||||
|
||||
/* Zero is mapped to EXIT_SUCCESS, and both negative and positive values
|
||||
* are mapped to EXIT_FAILURE.
|
||||
* Note: this means "true" maps to EXIT_FAILURE. */
|
||||
#define DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(impl) \
|
||||
int main(int argc, char *argv[]) { \
|
||||
int r; \
|
||||
r = impl(argc, argv); \
|
||||
return r != 0 ? EXIT_FAILURE : EXIT_SUCCESS; \
|
||||
}
|
||||
|
||||
#include "log.h"
|
||||
|
||||
@@ -61,7 +61,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
uint32_t n;
|
||||
@@ -72,13 +72,11 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
r = sd_bus_open_system(&bus);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to connect to system bus: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to connect to system bus: %m");
|
||||
|
||||
r = sd_bus_get_property_trivial(
|
||||
bus,
|
||||
@@ -89,18 +87,15 @@ int main(int argc, char *argv[]) {
|
||||
&error,
|
||||
'u',
|
||||
&n);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to get failed units counter: %s", bus_error_message(&error, r));
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get failed units counter: %s", bus_error_message(&error, r));
|
||||
|
||||
if (n > 0)
|
||||
log_notice("Health check: %" PRIu32 " units have failed.", n);
|
||||
else
|
||||
log_info("Health check: no failed units.");
|
||||
|
||||
r = n > 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : r;
|
||||
return n > 0;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
|
||||
|
||||
+16
-29
@@ -733,7 +733,6 @@ static int help(void) {
|
||||
}
|
||||
|
||||
static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
enum {
|
||||
ARG_VERSION = 0x100,
|
||||
ARG_DEPTH,
|
||||
@@ -908,7 +907,7 @@ static const char* counting_what(void) {
|
||||
return "userspace processes (excl. kernel)";
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_(group_hashmap_freep) Hashmap *a = NULL, *b = NULL;
|
||||
unsigned iteration = 0;
|
||||
usec_t last_refresh = 0;
|
||||
@@ -922,13 +921,11 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
r = cg_mask_supported(&mask);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to determine supported controllers: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to determine supported controllers: %m");
|
||||
|
||||
arg_count = (mask & CGROUP_MASK_PIDS) ? COUNT_PIDS : COUNT_USERSPACE_PROCESSES;
|
||||
|
||||
@@ -938,18 +935,14 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
r = show_cgroup_get_path_and_warn(arg_machine, arg_root, &root);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to get root control group path: %m");
|
||||
goto finish;
|
||||
} else
|
||||
log_debug("Cgroup path: %s", root);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get root control group path: %m");
|
||||
log_debug("Cgroup path: %s", root);
|
||||
|
||||
a = hashmap_new(&path_hash_ops);
|
||||
b = hashmap_new(&path_hash_ops);
|
||||
if (!a || !b) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!a || !b)
|
||||
return log_oom();
|
||||
|
||||
signal(SIGWINCH, columns_lines_cache_reset);
|
||||
|
||||
@@ -967,10 +960,8 @@ int main(int argc, char *argv[]) {
|
||||
if (t >= last_refresh + arg_delay || immediate_refresh) {
|
||||
|
||||
r = refresh(root, a, b, iteration++);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to refresh: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to refresh: %m");
|
||||
|
||||
group_hashmap_clear(b);
|
||||
|
||||
@@ -997,10 +988,8 @@ int main(int argc, char *argv[]) {
|
||||
r = read_one_char(stdin, &key, last_refresh + arg_delay - t, NULL);
|
||||
if (r == -ETIMEDOUT)
|
||||
continue;
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Couldn't read key: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Couldn't read key: %m");
|
||||
}
|
||||
|
||||
if (on_tty()) { /* TTY: Clear any user keystroke */
|
||||
@@ -1120,9 +1109,7 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
}
|
||||
|
||||
r = 0;
|
||||
|
||||
finish:
|
||||
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+10
-14
@@ -1376,7 +1376,7 @@ static int process_backtrace(int argc, char *argv[]) {
|
||||
return r;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
/* First, log to a safe place, since we don't know what crashed and it might
|
||||
@@ -1395,25 +1395,21 @@ int main(int argc, char *argv[]) {
|
||||
log_debug("Selected compression %s.", yes_no(arg_compress));
|
||||
|
||||
r = sd_listen_fds(false);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to determine number of file descriptor: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to determine the number of file descriptors: %m");
|
||||
|
||||
/* If we got an fd passed, we are running in coredumpd mode. Otherwise we
|
||||
* are invoked from the kernel as coredump handler. */
|
||||
if (r == 0) {
|
||||
if (streq_ptr(argv[1], "--backtrace"))
|
||||
r = process_backtrace(argc, argv);
|
||||
return process_backtrace(argc, argv);
|
||||
else
|
||||
r = process_kernel(argc, argv);
|
||||
return process_kernel(argc, argv);
|
||||
} else if (r == 1)
|
||||
r = process_socket(SD_LISTEN_FDS_START);
|
||||
else {
|
||||
log_error("Received unexpected number of file descriptors.");
|
||||
r = -EINVAL;
|
||||
}
|
||||
return process_socket(SD_LISTEN_FDS_START);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
log_error("Received unexpected number of file descriptors.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
@@ -120,7 +120,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
/* This is mostly intended to be used for scripts which want
|
||||
@@ -132,59 +132,45 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return r;
|
||||
|
||||
switch (arg_mode) {
|
||||
|
||||
case ONLY_VM:
|
||||
r = detect_vm();
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to check for VM: %m");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to check for VM: %m");
|
||||
break;
|
||||
|
||||
case ONLY_CONTAINER:
|
||||
r = detect_container();
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to check for container: %m");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to check for container: %m");
|
||||
break;
|
||||
|
||||
case ONLY_CHROOT:
|
||||
r = running_in_chroot();
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to check for chroot() environment: %m");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
return r ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to check for chroot() environment: %m");
|
||||
return !r;
|
||||
|
||||
case ONLY_PRIVATE_USERS:
|
||||
r = running_in_userns();
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to check for user namespace: %m");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
return r ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to check for user namespace: %m");
|
||||
return !r;
|
||||
|
||||
case ANY_VIRTUALIZATION:
|
||||
default:
|
||||
r = detect_virtualization();
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to check for virtualization: %m");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to check for virtualization: %m");
|
||||
break;
|
||||
}
|
||||
|
||||
if (!arg_quiet)
|
||||
puts(virtualization_to_string(r));
|
||||
|
||||
return r != VIRTUALIZATION_NONE ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
return r == VIRTUALIZATION_NONE;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
|
||||
|
||||
+33
-55
@@ -163,7 +163,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
char **i;
|
||||
int r;
|
||||
|
||||
@@ -172,7 +172,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
STRV_FOREACH(i, argv + optind) {
|
||||
_cleanup_free_ char *e = NULL;
|
||||
@@ -182,40 +182,30 @@ int main(int argc, char *argv[]) {
|
||||
case ACTION_ESCAPE:
|
||||
if (arg_path) {
|
||||
r = unit_name_path_escape(*i, &e);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to escape string: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to escape string: %m");
|
||||
} else {
|
||||
e = unit_name_escape(*i);
|
||||
if (!e) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!e)
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
if (arg_template) {
|
||||
char *x;
|
||||
|
||||
r = unit_name_replace_instance(arg_template, e, &x);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to replace instance: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to replace instance: %m");
|
||||
|
||||
free(e);
|
||||
e = x;
|
||||
free_and_replace(e, x);
|
||||
} else if (arg_suffix) {
|
||||
char *x;
|
||||
|
||||
x = strjoin(e, ".", arg_suffix);
|
||||
if (!x) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!x)
|
||||
return log_oom();
|
||||
|
||||
free(e);
|
||||
e = x;
|
||||
free_and_replace(e, x);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -227,55 +217,42 @@ int main(int argc, char *argv[]) {
|
||||
_cleanup_free_ char *template = NULL;
|
||||
|
||||
r = unit_name_to_instance(*i, &name);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to extract instance: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (isempty(name)) {
|
||||
log_error("Unit %s is missing the instance name.", *i);
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to extract instance: %m");
|
||||
if (isempty(name))
|
||||
return log_error("Unit %s is missing the instance name.", *i);
|
||||
|
||||
r = unit_name_template(*i, &template);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to extract template: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (arg_template && !streq(arg_template, template)) {
|
||||
log_error("Unit %s template %s does not match specified template %s.", *i, template, arg_template);
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to extract template: %m");
|
||||
if (arg_template && !streq(arg_template, template))
|
||||
return log_error("Unit %s template %s does not match specified template %s.",
|
||||
*i, template, arg_template);
|
||||
} else {
|
||||
name = strdup(*i);
|
||||
if (!name) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!name)
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
if (arg_path)
|
||||
r = unit_name_path_unescape(name, &e);
|
||||
else
|
||||
r = unit_name_unescape(name, &e);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to unescape string: %m");
|
||||
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to unescape string: %m");
|
||||
goto finish;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ACTION_MANGLE:
|
||||
r = unit_name_mangle(*i, 0, &e);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to mangle name: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to mangle name: %m");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (i != argv+optind)
|
||||
if (i != argv + optind)
|
||||
fputc(' ', stdout);
|
||||
|
||||
fputs(e, stdout);
|
||||
@@ -283,6 +260,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
fputc('\n', stdout);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+36
-60
@@ -260,7 +260,7 @@ static int fsck_progress_socket(void) {
|
||||
return TAKE_FD(fd);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_close_pair_ int progress_pipe[2] = { -1, -1 };
|
||||
_cleanup_(sd_device_unrefp) sd_device *dev = NULL;
|
||||
const char *device, *type;
|
||||
@@ -269,15 +269,15 @@ int main(int argc, char *argv[]) {
|
||||
int r, exit_status;
|
||||
pid_t pid;
|
||||
|
||||
if (argc > 2) {
|
||||
log_error("This program expects one or no arguments.");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
log_set_target(LOG_TARGET_AUTO);
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
if (argc > 2) {
|
||||
log_error("This program expects one or no arguments.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
umask(0022);
|
||||
|
||||
r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, PROC_CMDLINE_STRIP_RD_PREFIX);
|
||||
@@ -286,30 +286,23 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
test_files();
|
||||
|
||||
if (!arg_force && arg_skip) {
|
||||
r = 0;
|
||||
goto finish;
|
||||
}
|
||||
if (!arg_force && arg_skip)
|
||||
return 0;
|
||||
|
||||
if (argc > 1) {
|
||||
device = argv[1];
|
||||
|
||||
if (stat(device, &st) < 0) {
|
||||
r = log_error_errno(errno, "Failed to stat %s: %m", device);
|
||||
goto finish;
|
||||
}
|
||||
if (stat(device, &st) < 0)
|
||||
return log_error_errno(errno, "Failed to stat %s: %m", device);
|
||||
|
||||
if (!S_ISBLK(st.st_mode)) {
|
||||
log_error("%s is not a block device.", device);
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
r = sd_device_new_from_devnum(&dev, 'b', st.st_rdev);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to detect device %s: %m", device);
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to detect device %s: %m", device);
|
||||
|
||||
root_directory = false;
|
||||
} else {
|
||||
@@ -317,16 +310,13 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
/* Find root device */
|
||||
|
||||
if (stat("/", &st) < 0) {
|
||||
r = log_error_errno(errno, "Failed to stat() the root directory: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (stat("/", &st) < 0)
|
||||
return log_error_errno(errno, "Failed to stat() the root directory: %m");
|
||||
|
||||
/* Virtual root devices don't need an fsck */
|
||||
if (major(st.st_dev) == 0) {
|
||||
log_debug("Root directory is virtual or btrfs, skipping check.");
|
||||
r = 0;
|
||||
goto finish;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* check if we are already writable */
|
||||
@@ -335,21 +325,16 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (utimensat(AT_FDCWD, "/", times, 0) == 0) {
|
||||
log_info("Root directory is writable, skipping check.");
|
||||
r = 0;
|
||||
goto finish;
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = sd_device_new_from_devnum(&dev, 'b', st.st_dev);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to detect root device: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to detect root device: %m");
|
||||
|
||||
r = sd_device_get_devname(dev, &device);
|
||||
if (r < 0) {
|
||||
log_device_error_errno(dev, r, "Failed to detect device node of root directory: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_device_error_errno(dev, r, "Failed to detect device node of root directory: %m");
|
||||
|
||||
root_directory = true;
|
||||
}
|
||||
@@ -360,20 +345,17 @@ int main(int argc, char *argv[]) {
|
||||
log_device_warning_errno(dev, r, "Couldn't detect if fsck.%s may be used, proceeding: %m", type);
|
||||
else if (r == 0) {
|
||||
log_device_info(dev, "fsck.%s doesn't exist, not checking file system.", type);
|
||||
goto finish;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (arg_show_progress) {
|
||||
if (pipe(progress_pipe) < 0) {
|
||||
r = log_error_errno(errno, "pipe(): %m");
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
if (arg_show_progress &&
|
||||
pipe(progress_pipe) < 0)
|
||||
return log_error_errno(errno, "pipe(): %m");
|
||||
|
||||
r = safe_fork("(fsck)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
return r;
|
||||
if (r == 0) {
|
||||
char dash_c[STRLEN("-C") + DECIMAL_STR_MAX(int) + 1];
|
||||
int progress_socket = -1;
|
||||
@@ -425,35 +407,29 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
progress_pipe[1] = safe_close(progress_pipe[1]);
|
||||
(void) process_progress(progress_pipe[0]);
|
||||
progress_pipe[0] = -1;
|
||||
(void) process_progress(TAKE_FD(progress_pipe[0]));
|
||||
|
||||
exit_status = wait_for_terminate_and_check("fsck", pid, WAIT_LOG_ABNORMAL);
|
||||
if (exit_status < 0) {
|
||||
r = exit_status;
|
||||
goto finish;
|
||||
}
|
||||
if (exit_status < 0)
|
||||
return exit_status;
|
||||
if (exit_status & ~1) {
|
||||
log_error("fsck failed with exit status %i.", exit_status);
|
||||
|
||||
if ((exit_status & FSCK_SYSTEM_SHOULD_REBOOT) && root_directory) {
|
||||
/* System should be rebooted. */
|
||||
start_target(SPECIAL_REBOOT_TARGET, "replace-irreversibly");
|
||||
r = -EINVAL;
|
||||
} else if (exit_status & (FSCK_SYSTEM_SHOULD_REBOOT | FSCK_ERRORS_LEFT_UNCORRECTED)) {
|
||||
return -EINVAL;
|
||||
} else if (exit_status & (FSCK_SYSTEM_SHOULD_REBOOT | FSCK_ERRORS_LEFT_UNCORRECTED))
|
||||
/* Some other problem */
|
||||
start_target(SPECIAL_EMERGENCY_TARGET, "replace");
|
||||
r = -EINVAL;
|
||||
} else {
|
||||
else
|
||||
log_warning("Ignoring error.");
|
||||
r = 0;
|
||||
}
|
||||
} else
|
||||
r = 0;
|
||||
}
|
||||
|
||||
if (exit_status & FSCK_ERROR_CORRECTED)
|
||||
(void) touch("/run/systemd/quotacheck");
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return exit_status & (FSCK_SYSTEM_SHOULD_REBOOT | FSCK_ERRORS_LEFT_UNCORRECTED);
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
|
||||
|
||||
@@ -426,7 +426,7 @@ static int hostnamectl_main(sd_bus *bus, int argc, char *argv[]) {
|
||||
return dispatch_verb(argc, argv, verbs, bus);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
int r;
|
||||
|
||||
@@ -436,16 +436,13 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
r = bus_connect_transport(arg_transport, arg_host, false, &bus);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to create bus connection: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to create bus connection: %m");
|
||||
|
||||
r = hostnamectl_main(bus, argc, argv);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return hostnamectl_main(bus, argc, argv);
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+5
-6
@@ -110,7 +110,7 @@ static int hwdb_main(int argc, char *argv[]) {
|
||||
return dispatch_verb(argc, argv, verbs, NULL);
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
log_parse_environment();
|
||||
@@ -118,12 +118,11 @@ int main (int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
mac_selinux_init();
|
||||
|
||||
r = hwdb_main(argc, argv);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return hwdb_main(argc, argv);
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+5
-6
@@ -150,7 +150,7 @@ static int id128_main(int argc, char *argv[]) {
|
||||
return dispatch_verb(argc, argv, verbs, NULL);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
log_parse_environment();
|
||||
@@ -158,10 +158,9 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
r = id128_main(argc, argv);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return id128_main(argc, argv);
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+5
-7
@@ -269,7 +269,6 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
static int export_main(int argc, char *argv[]) {
|
||||
|
||||
static const Verb verbs[] = {
|
||||
{ "help", VERB_ANY, VERB_ANY, 0, help },
|
||||
{ "tar", 2, 3, 0, export_tar },
|
||||
@@ -280,7 +279,7 @@ static int export_main(int argc, char *argv[]) {
|
||||
return dispatch_verb(argc, argv, verbs, NULL);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
@@ -289,12 +288,11 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
(void) ignore_signals(SIGPIPE, -1);
|
||||
|
||||
r = export_main(argc, argv);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return export_main(argc, argv);
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+5
-7
@@ -292,7 +292,6 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
static int import_main(int argc, char *argv[]) {
|
||||
|
||||
static const Verb verbs[] = {
|
||||
{ "help", VERB_ANY, VERB_ANY, 0, help },
|
||||
{ "tar", 2, 3, 0, import_tar },
|
||||
@@ -303,7 +302,7 @@ static int import_main(int argc, char *argv[]) {
|
||||
return dispatch_verb(argc, argv, verbs, NULL);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
@@ -312,12 +311,11 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return 0;
|
||||
|
||||
(void) ignore_signals(SIGPIPE, -1);
|
||||
|
||||
r = import_main(argc, argv);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return import_main(argc, argv);
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+10
-14
@@ -1113,7 +1113,7 @@ static int manager_run(Manager *m) {
|
||||
m);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_(manager_unrefp) Manager *m = NULL;
|
||||
int r;
|
||||
|
||||
@@ -1125,28 +1125,24 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc != 1) {
|
||||
log_error("This program takes no arguments.");
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGCHLD, -1) >= 0);
|
||||
|
||||
r = manager_new(&m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to allocate manager object: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to allocate manager object: %m");
|
||||
|
||||
r = manager_add_bus_objects(m);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
r = manager_run(m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to run event loop: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to run event loop: %m");
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+5
-7
@@ -304,7 +304,6 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
static int pull_main(int argc, char *argv[]) {
|
||||
|
||||
static const Verb verbs[] = {
|
||||
{ "help", VERB_ANY, VERB_ANY, 0, help },
|
||||
{ "tar", 2, 3, 0, pull_tar },
|
||||
@@ -315,7 +314,7 @@ static int pull_main(int argc, char *argv[]) {
|
||||
return dispatch_verb(argc, argv, verbs, NULL);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
@@ -324,12 +323,11 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
(void) ignore_signals(SIGPIPE, -1);
|
||||
|
||||
r = pull_main(argc, argv);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return pull_main(argc, argv);
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+10
-15
@@ -112,7 +112,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_close_ int fd = -1, saved_stderr = -1;
|
||||
int r;
|
||||
|
||||
@@ -121,22 +121,18 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
fd = sd_journal_stream_fd(arg_identifier, arg_priority, arg_level_prefix);
|
||||
if (fd < 0) {
|
||||
r = log_error_errno(fd, "Failed to create stream fd: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (fd < 0)
|
||||
return log_error_errno(fd, "Failed to create stream fd: %m");
|
||||
|
||||
saved_stderr = fcntl(STDERR_FILENO, F_DUPFD_CLOEXEC, 3);
|
||||
|
||||
r = rearrange_stdio(STDIN_FILENO, fd, fd); /* Invalidates fd on succcess + error! */
|
||||
fd = -1;
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to rearrange stdout/stderr: %m");
|
||||
goto finish;
|
||||
}
|
||||
TAKE_FD(fd);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to rearrange stdout/stderr: %m");
|
||||
|
||||
if (argc <= optind)
|
||||
(void) execl("/bin/cat", "/bin/cat", NULL);
|
||||
@@ -148,8 +144,7 @@ int main(int argc, char *argv[]) {
|
||||
if (saved_stderr >= 0)
|
||||
(void) dup3(saved_stderr, STDERR_FILENO, 0);
|
||||
|
||||
log_error_errno(r, "Failed to execute process: %m");
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return log_error_errno(r, "Failed to execute process: %m");
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+12
-21
@@ -266,7 +266,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
int r;
|
||||
|
||||
@@ -274,23 +274,17 @@ int main(int argc, char *argv[]) {
|
||||
log_open();
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r < 0)
|
||||
return EXIT_FAILURE;
|
||||
if (r == 0)
|
||||
return EXIT_SUCCESS;
|
||||
if (r <= 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_default_system(&bus);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to connect to bus: %m");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to connect to bus: %m");
|
||||
|
||||
if (arg_action == ACTION_LIST) {
|
||||
|
||||
r = print_inhibitors(bus);
|
||||
pager_close();
|
||||
if (r < 0)
|
||||
return EXIT_FAILURE;
|
||||
return r;
|
||||
|
||||
} else {
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
@@ -308,14 +302,12 @@ int main(int argc, char *argv[]) {
|
||||
arg_mode = "block";
|
||||
|
||||
fd = inhibit(bus, &error);
|
||||
if (fd < 0) {
|
||||
log_error("Failed to inhibit: %s", bus_error_message(&error, fd));
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if (fd < 0)
|
||||
return log_error("Failed to inhibit: %s", bus_error_message(&error, fd));
|
||||
|
||||
r = safe_fork("(inhibit)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_CLOSE_ALL_FDS|FORK_LOG, &pid);
|
||||
if (r < 0)
|
||||
return EXIT_FAILURE;
|
||||
return r;
|
||||
if (r == 0) {
|
||||
/* Child */
|
||||
execvp(argv[optind], argv + optind);
|
||||
@@ -324,9 +316,8 @@ int main(int argc, char *argv[]) {
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
r = wait_for_terminate_and_check(argv[optind], pid, WAIT_LOG);
|
||||
return r < 0 ? EXIT_FAILURE : r;
|
||||
return wait_for_terminate_and_check(argv[optind], pid, WAIT_LOG);
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
|
||||
|
||||
+11
-19
@@ -1166,7 +1166,7 @@ static int manager_run(Manager *m) {
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_(manager_unrefp) Manager *m = NULL;
|
||||
int r;
|
||||
|
||||
@@ -1179,15 +1179,12 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc != 1) {
|
||||
log_error("This program takes no arguments.");
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
r = mac_selinux_init();
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Could not initialize labelling: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not initialize labelling: %m");
|
||||
|
||||
/* Always create the directories people can create inotify watches in. Note that some applications might check
|
||||
* for the existence of /run/systemd/seats/ to determine whether logind is available, so please always make
|
||||
@@ -1199,21 +1196,16 @@ int main(int argc, char *argv[]) {
|
||||
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGHUP, SIGTERM, SIGINT, -1) >= 0);
|
||||
|
||||
r = manager_new(&m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to allocate manager object: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to allocate manager object: %m");
|
||||
|
||||
(void) manager_parse_config_file(m);
|
||||
|
||||
r = manager_startup(m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to fully start up daemon: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to fully start up daemon: %m");
|
||||
|
||||
log_debug("systemd-logind running as pid "PID_FMT, getpid_cached());
|
||||
|
||||
(void) sd_notify(false,
|
||||
"READY=1\n"
|
||||
"STATUS=Processing requests...");
|
||||
@@ -1221,11 +1213,11 @@ int main(int argc, char *argv[]) {
|
||||
r = manager_run(m);
|
||||
|
||||
log_debug("systemd-logind stopped as pid "PID_FMT, getpid_cached());
|
||||
|
||||
(void) sd_notify(false,
|
||||
"STOPPING=1\n"
|
||||
"STATUS=Shutting down...");
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return r;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
@@ -168,7 +168,7 @@ static int do_umount(const char *user) {
|
||||
return user_remove_runtime_path(runtime_path);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
log_parse_environment();
|
||||
@@ -176,27 +176,24 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc != 3) {
|
||||
log_error("This program takes two arguments.");
|
||||
return EXIT_FAILURE;
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!STR_IN_SET(argv[1], "start", "stop")) {
|
||||
log_error("First argument must be either \"start\" or \"stop\".");
|
||||
return EXIT_FAILURE;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
r = mac_selinux_init();
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Could not initialize labelling: %m\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Could not initialize labelling: %m\n");
|
||||
|
||||
umask(0022);
|
||||
|
||||
if (streq(argv[1], "start"))
|
||||
r = do_mount(argv[2]);
|
||||
else if (streq(argv[1], "stop"))
|
||||
r = do_umount(argv[2]);
|
||||
else
|
||||
assert_not_reached("Unknown verb!");
|
||||
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return do_mount(argv[2]);
|
||||
if (streq(argv[1], "stop"))
|
||||
return do_umount(argv[2]);
|
||||
assert_not_reached("Unknown verb!");
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+9
-15
@@ -345,7 +345,7 @@ static int manager_run(Manager *m) {
|
||||
check_idle, m);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_(manager_unrefp) Manager *m = NULL;
|
||||
int r;
|
||||
|
||||
@@ -358,8 +358,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc != 1) {
|
||||
log_error("This program takes no arguments.");
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Always create the directories people can create inotify watches in. Note that some applications might check
|
||||
@@ -370,19 +369,14 @@ int main(int argc, char *argv[]) {
|
||||
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGCHLD, SIGTERM, SIGINT, -1) >= 0);
|
||||
|
||||
r = manager_new(&m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to allocate manager object: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to allocate manager object: %m");
|
||||
|
||||
r = manager_startup(m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to fully start up daemon: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to fully start up daemon: %m");
|
||||
|
||||
log_debug("systemd-machined running as pid "PID_FMT, getpid_cached());
|
||||
|
||||
(void) sd_notify(false,
|
||||
"READY=1\n"
|
||||
"STATUS=Processing requests...");
|
||||
@@ -390,11 +384,11 @@ int main(int argc, char *argv[]) {
|
||||
r = manager_run(m);
|
||||
|
||||
log_debug("systemd-machined stopped as pid "PID_FMT, getpid_cached());
|
||||
|
||||
(void) sd_notify(false,
|
||||
"STOPPING=1\n"
|
||||
"STATUS=Shutting down...");
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return r;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+25
-40
@@ -144,7 +144,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
static int run(int argc, char* argv[]) {
|
||||
_cleanup_free_ char *status = NULL, *cpid = NULL, *n = NULL;
|
||||
_cleanup_strv_free_ char **final_env = NULL;
|
||||
char* our_env[4];
|
||||
@@ -156,7 +156,7 @@ int main(int argc, char* argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
if (arg_booted)
|
||||
return sd_booted() <= 0;
|
||||
@@ -166,19 +166,15 @@ int main(int argc, char* argv[]) {
|
||||
|
||||
if (arg_status) {
|
||||
status = strappend("STATUS=", arg_status);
|
||||
if (!status) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!status)
|
||||
return log_oom();
|
||||
|
||||
our_env[i++] = status;
|
||||
}
|
||||
|
||||
if (arg_pid > 0) {
|
||||
if (asprintf(&cpid, "MAINPID="PID_FMT, arg_pid) < 0) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (asprintf(&cpid, "MAINPID="PID_FMT, arg_pid) < 0)
|
||||
return log_oom();
|
||||
|
||||
our_env[i++] = cpid;
|
||||
}
|
||||
@@ -186,47 +182,36 @@ int main(int argc, char* argv[]) {
|
||||
our_env[i++] = NULL;
|
||||
|
||||
final_env = strv_env_merge(2, our_env, argv + optind);
|
||||
if (!final_env) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!final_env)
|
||||
return log_oom();
|
||||
|
||||
if (strv_isempty(final_env)) {
|
||||
r = 0;
|
||||
goto finish;
|
||||
}
|
||||
if (strv_isempty(final_env))
|
||||
return 0;
|
||||
|
||||
n = strv_join(final_env, "\n");
|
||||
if (!n) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!n)
|
||||
return log_oom();
|
||||
|
||||
/* If this is requested change to the requested UID/GID. Note thta we only change the real UID here, and leave
|
||||
the effective UID in effect (which is 0 for this to work). That's because we want the privileges to fake the
|
||||
ucred data, and sd_pid_notify() uses the real UID for filling in ucred. */
|
||||
|
||||
if (arg_gid != GID_INVALID)
|
||||
if (setregid(arg_gid, (gid_t) -1) < 0) {
|
||||
r = log_error_errno(errno, "Failed to change GID: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (arg_gid != GID_INVALID &&
|
||||
setregid(arg_gid, (gid_t) -1) < 0)
|
||||
return log_error_errno(errno, "Failed to change GID: %m");
|
||||
|
||||
if (arg_uid != UID_INVALID)
|
||||
if (setreuid(arg_uid, (uid_t) -1) < 0) {
|
||||
r = log_error_errno(errno, "Failed to change UID: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (arg_uid != UID_INVALID &&
|
||||
setreuid(arg_uid, (uid_t) -1) < 0)
|
||||
return log_error_errno(errno, "Failed to change UID: %m");
|
||||
|
||||
r = sd_pid_notify(arg_pid ? arg_pid : getppid(), false, n);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to notify init system: %m");
|
||||
goto finish;
|
||||
} else if (r == 0) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to notify init system: %m");
|
||||
if (r == 0) {
|
||||
log_error("No status data could be sent: $NOTIFY_SOCKET was not set");
|
||||
r = -EOPNOTSUPP;
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+14
-19
@@ -42,7 +42,7 @@ static int makefs(const char *type, const char *device) {
|
||||
return wait_for_terminate_and_check(mkfs, pid, WAIT_LOG);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
const char *device, *type;
|
||||
_cleanup_free_ char *detected = NULL;
|
||||
struct stat st;
|
||||
@@ -54,37 +54,32 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc != 3) {
|
||||
log_error("This program expects two arguments.");
|
||||
return EXIT_FAILURE;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
type = argv[1];
|
||||
device = argv[2];
|
||||
|
||||
if (stat(device, &st) < 0) {
|
||||
r = log_error_errno(errno, "Failed to stat \"%s\": %m", device);
|
||||
goto finish;
|
||||
}
|
||||
if (stat(device, &st) < 0)
|
||||
return log_error_errno(errno, "Failed to stat \"%s\": %m", device);
|
||||
|
||||
if (!S_ISBLK(st.st_mode))
|
||||
log_info("%s is not a block device.", device);
|
||||
|
||||
r = probe_filesystem(device, &detected);
|
||||
if (r < 0) {
|
||||
log_warning_errno(r,
|
||||
r == -EUCLEAN ?
|
||||
"Cannot reliably determine probe \"%s\", refusing to proceed." :
|
||||
"Failed to probe \"%s\": %m",
|
||||
device);
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_warning_errno(r,
|
||||
r == -EUCLEAN ?
|
||||
"Cannot reliably determine probe \"%s\", refusing to proceed." :
|
||||
"Failed to probe \"%s\": %m",
|
||||
device);
|
||||
|
||||
if (detected) {
|
||||
log_info("%s is not empty (type %s), exiting", device, detected);
|
||||
goto finish;
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = makefs(type, device);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return makefs(type, device);
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+7
-6
@@ -167,7 +167,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
static int run(int argc, char* argv[]) {
|
||||
int r;
|
||||
|
||||
log_parse_environment();
|
||||
@@ -175,7 +175,7 @@ int main(int argc, char* argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
if (argc > optind) {
|
||||
int i, q;
|
||||
@@ -185,9 +185,10 @@ int main(int argc, char* argv[]) {
|
||||
if (q < 0)
|
||||
r = q;
|
||||
}
|
||||
} else
|
||||
r = list_homes();
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return r;
|
||||
} else
|
||||
return list_homes();
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+12
-16
@@ -122,7 +122,7 @@ static int manager_run(Manager *m) {
|
||||
check_idle, m);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_(manager_unrefp) Manager *m = NULL;
|
||||
int r;
|
||||
|
||||
@@ -134,35 +134,31 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc != 1) {
|
||||
log_error("This program takes no arguments.");
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGCHLD, SIGTERM, SIGINT, -1) >= 0);
|
||||
|
||||
r = manager_new(&m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to allocate manager object: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to allocate manager object: %m");
|
||||
|
||||
r = manager_startup(m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to fully start up daemon: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to fully start up daemon: %m");
|
||||
|
||||
log_debug("systemd-portabled running as pid " PID_FMT, getpid_cached());
|
||||
|
||||
sd_notify(false,
|
||||
"READY=1\n"
|
||||
"STATUS=Processing requests...");
|
||||
|
||||
r = manager_run(m);
|
||||
|
||||
(void) sd_notify(false,
|
||||
"STOPPING=1\n"
|
||||
"STATUS=Shutting down...");
|
||||
log_debug("systemd-portabled stopped as pid " PID_FMT, getpid_cached());
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+12
-11
@@ -52,18 +52,18 @@ static void test_files(void) {
|
||||
#endif
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
if (argc > 1) {
|
||||
log_error("This program takes no arguments.");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
log_set_target(LOG_TARGET_AUTO);
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
if (argc > 1) {
|
||||
log_error("This program takes no arguments.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
umask(0022);
|
||||
|
||||
r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0);
|
||||
@@ -74,15 +74,15 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (!arg_force) {
|
||||
if (arg_skip)
|
||||
return EXIT_SUCCESS;
|
||||
return 0;
|
||||
|
||||
if (access("/run/systemd/quotacheck", F_OK) < 0)
|
||||
return EXIT_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = safe_fork("(quotacheck)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
return r;
|
||||
if (r == 0) {
|
||||
static const char * const cmdline[] = {
|
||||
QUOTACHECK,
|
||||
@@ -96,6 +96,7 @@ int main(int argc, char *argv[]) {
|
||||
_exit(EXIT_FAILURE); /* Operational error */
|
||||
}
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#define POOL_SIZE_MIN 512
|
||||
#define POOL_SIZE_MAX (10*1024*1024)
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_close_ int seed_fd = -1, random_fd = -1;
|
||||
bool read_seed_file, write_seed_file;
|
||||
_cleanup_free_ void* buf = NULL;
|
||||
@@ -29,15 +29,15 @@ int main(int argc, char *argv[]) {
|
||||
FILE *f;
|
||||
int r;
|
||||
|
||||
if (argc != 2) {
|
||||
log_error("This program requires one argument.");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
log_set_target(LOG_TARGET_AUTO);
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
if (argc != 2) {
|
||||
log_error("This program requires one argument.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
umask(0022);
|
||||
|
||||
/* Read pool size, if possible */
|
||||
@@ -54,10 +54,8 @@ int main(int argc, char *argv[]) {
|
||||
buf_size = POOL_SIZE_MIN;
|
||||
|
||||
r = mkdir_parents_label(RANDOM_SEED, 0755);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to create directory " RANDOM_SEED_DIR ": %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to create directory " RANDOM_SEED_DIR ": %m");
|
||||
|
||||
/* When we load the seed we read it and write it to the device and then immediately update the saved seed with
|
||||
* new data, to make sure the next boot gets seeded differently. */
|
||||
@@ -78,10 +76,7 @@ int main(int argc, char *argv[]) {
|
||||
open_rw_error, "Failed to open " RANDOM_SEED " for writing: %m");
|
||||
r = log_full_errno(missing ? LOG_DEBUG : LOG_ERR,
|
||||
errno, "Failed to open " RANDOM_SEED " for reading: %m");
|
||||
if (missing)
|
||||
r = 0;
|
||||
|
||||
goto finish;
|
||||
return missing ? 0 : r;
|
||||
}
|
||||
} else
|
||||
write_seed_file = true;
|
||||
@@ -91,10 +86,8 @@ int main(int argc, char *argv[]) {
|
||||
write_seed_file = false;
|
||||
|
||||
random_fd = open("/dev/urandom", O_WRONLY|O_CLOEXEC|O_NOCTTY, 0600);
|
||||
if (random_fd < 0) {
|
||||
r = log_error_errno(errno, "Failed to open /dev/urandom: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (random_fd < 0)
|
||||
return log_error_errno(errno, "Failed to open /dev/urandom: %m");
|
||||
}
|
||||
|
||||
read_seed_file = true;
|
||||
@@ -102,40 +95,31 @@ int main(int argc, char *argv[]) {
|
||||
} else if (streq(argv[1], "save")) {
|
||||
|
||||
random_fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
|
||||
if (random_fd < 0) {
|
||||
r = log_error_errno(errno, "Failed to open /dev/urandom: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (random_fd < 0)
|
||||
return log_error_errno(errno, "Failed to open /dev/urandom: %m");
|
||||
|
||||
seed_fd = open(RANDOM_SEED, O_WRONLY|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600);
|
||||
if (seed_fd < 0) {
|
||||
r = log_error_errno(errno, "Failed to open " RANDOM_SEED ": %m");
|
||||
goto finish;
|
||||
}
|
||||
if (seed_fd < 0)
|
||||
return log_error_errno(errno, "Failed to open " RANDOM_SEED ": %m");
|
||||
|
||||
read_seed_file = false;
|
||||
write_seed_file = true;
|
||||
|
||||
} else {
|
||||
log_error("Unknown verb '%s'.", argv[1]);
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (fstat(seed_fd, &st) < 0) {
|
||||
r = log_error_errno(errno, "Failed to stat() seed file " RANDOM_SEED ": %m");
|
||||
goto finish;
|
||||
}
|
||||
if (fstat(seed_fd, &st) < 0)
|
||||
return log_error_errno(errno, "Failed to stat() seed file " RANDOM_SEED ": %m");
|
||||
|
||||
/* If the seed file is larger than what we expect, then honour the existing size and save/restore as much as it says */
|
||||
if ((uint64_t) st.st_size > buf_size)
|
||||
buf_size = MIN(st.st_size, POOL_SIZE_MAX);
|
||||
|
||||
buf = malloc(buf_size);
|
||||
if (!buf) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!buf)
|
||||
return log_oom();
|
||||
|
||||
if (read_seed_file) {
|
||||
sd_id128_t mid;
|
||||
@@ -172,7 +156,6 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
if (write_seed_file) {
|
||||
|
||||
/* This is just a safety measure. Given that we are root and
|
||||
* most likely created the file ourselves the mode and owner
|
||||
* should be correct anyway. */
|
||||
@@ -180,21 +163,19 @@ int main(int argc, char *argv[]) {
|
||||
(void) fchown(seed_fd, 0, 0);
|
||||
|
||||
k = loop_read(random_fd, buf, buf_size, false);
|
||||
if (k < 0) {
|
||||
r = log_error_errno(k, "Failed to read new seed from /dev/urandom: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (k < 0)
|
||||
return log_error_errno(k, "Failed to read new seed from /dev/urandom: %m");
|
||||
if (k == 0) {
|
||||
log_error("Got EOF while reading from /dev/urandom.");
|
||||
r = -EIO;
|
||||
goto finish;
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
r = loop_write(seed_fd, buf, (size_t) k, false);
|
||||
if (r < 0)
|
||||
log_error_errno(r, "Failed to write new random seed file: %m");
|
||||
return log_error_errno(r, "Failed to write new random seed file: %m");
|
||||
}
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return r;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+30
-43
@@ -22,44 +22,39 @@
|
||||
* options that are in /etc/fstab that systemd might not have
|
||||
* respected */
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_hashmap_free_free_ Hashmap *pids = NULL;
|
||||
_cleanup_endmntent_ FILE *f = NULL;
|
||||
struct mntent* me;
|
||||
int r;
|
||||
|
||||
if (argc > 1) {
|
||||
log_error("This program takes no argument.");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
log_set_target(LOG_TARGET_AUTO);
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
if (argc > 1) {
|
||||
log_error("This program takes no arguments.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
umask(0022);
|
||||
|
||||
f = setmntent("/etc/fstab", "re");
|
||||
if (!f) {
|
||||
if (errno == ENOENT) {
|
||||
r = 0;
|
||||
goto finish;
|
||||
}
|
||||
if (errno == ENOENT)
|
||||
return 0;
|
||||
|
||||
r = log_error_errno(errno, "Failed to open /etc/fstab: %m");
|
||||
goto finish;
|
||||
return log_error_errno(errno, "Failed to open /etc/fstab: %m");
|
||||
}
|
||||
|
||||
pids = hashmap_new(NULL);
|
||||
if (!pids) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!pids)
|
||||
return log_oom();
|
||||
|
||||
while ((me = getmntent(f))) {
|
||||
_cleanup_free_ char *s = NULL;
|
||||
pid_t pid;
|
||||
int k;
|
||||
char *s;
|
||||
|
||||
/* Remount the root fs, /usr and all API VFS */
|
||||
if (!mount_point_is_api(me->mnt_dir) &&
|
||||
@@ -71,7 +66,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = safe_fork("(remount)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
return r;
|
||||
if (r == 0) {
|
||||
/* Child */
|
||||
|
||||
@@ -84,48 +79,40 @@ int main(int argc, char *argv[]) {
|
||||
/* Parent */
|
||||
|
||||
s = strdup(me->mnt_dir);
|
||||
if (!s) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!s)
|
||||
return log_oom();
|
||||
|
||||
k = hashmap_put(pids, PID_TO_PTR(pid), s);
|
||||
if (k < 0) {
|
||||
free(s);
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (k < 0)
|
||||
return log_oom();
|
||||
TAKE_PTR(s);
|
||||
}
|
||||
|
||||
r = 0;
|
||||
while (!hashmap_isempty(pids)) {
|
||||
siginfo_t si = {};
|
||||
char *s;
|
||||
_cleanup_free_ char *s = NULL;
|
||||
|
||||
if (waitid(P_ALL, 0, &si, WEXITED) < 0) {
|
||||
|
||||
if (errno == EINTR)
|
||||
continue;
|
||||
|
||||
r = log_error_errno(errno, "waitid() failed: %m");
|
||||
goto finish;
|
||||
return log_error_errno(errno, "waitid() failed: %m");
|
||||
}
|
||||
|
||||
s = hashmap_remove(pids, PID_TO_PTR(si.si_pid));
|
||||
if (s) {
|
||||
if (!is_clean_exit(si.si_code, si.si_status, EXIT_CLEAN_COMMAND, NULL)) {
|
||||
if (si.si_code == CLD_EXITED)
|
||||
log_error(MOUNT_PATH " for %s exited with exit status %i.", s, si.si_status);
|
||||
else
|
||||
log_error(MOUNT_PATH " for %s terminated by signal %s.", s, signal_to_string(si.si_status));
|
||||
if (s &&
|
||||
!is_clean_exit(si.si_code, si.si_status, EXIT_CLEAN_COMMAND, NULL)) {
|
||||
if (si.si_code == CLD_EXITED)
|
||||
log_error(MOUNT_PATH " for %s exited with exit status %i.", s, si.si_status);
|
||||
else
|
||||
log_error(MOUNT_PATH " for %s terminated by signal %s.", s, signal_to_string(si.si_status));
|
||||
|
||||
r = -ENOEXEC;
|
||||
}
|
||||
|
||||
free(s);
|
||||
r = -ENOEXEC;
|
||||
}
|
||||
}
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return r;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
+8
-9
@@ -351,7 +351,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1 /* work to do */;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
bool allow;
|
||||
_cleanup_strv_free_ char **modes = NULL, **states = NULL;
|
||||
usec_t delay = 0;
|
||||
@@ -363,22 +363,21 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
r = parse_sleep_config(arg_verb, &allow, &modes, &states, &delay);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
if (!allow) {
|
||||
log_error("Sleep mode \"%s\" is disabled by configuration, refusing.", arg_verb);
|
||||
return EXIT_FAILURE;
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
if (streq(arg_verb, "suspend-then-hibernate"))
|
||||
r = execute_s2h(delay);
|
||||
return execute_s2h(delay);
|
||||
else
|
||||
r = execute(modes, states);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return execute(modes, states);
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
@@ -89,7 +89,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_(sd_bus_unrefp) sd_bus *a = NULL, *b = NULL;
|
||||
sd_id128_t server_id;
|
||||
bool is_unix;
|
||||
@@ -101,7 +101,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
r = sd_listen_fds(0);
|
||||
if (r == 0) {
|
||||
@@ -112,7 +112,7 @@ int main(int argc, char *argv[]) {
|
||||
out_fd = SD_LISTEN_FDS_START;
|
||||
} else {
|
||||
log_error("Illegal number of file descriptors passed.");
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
is_unix =
|
||||
@@ -120,73 +120,51 @@ int main(int argc, char *argv[]) {
|
||||
sd_is_socket(out_fd, AF_UNIX, 0, 0) > 0;
|
||||
|
||||
r = sd_bus_new(&a);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to allocate bus: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to allocate bus: %m");
|
||||
|
||||
if (arg_transport == BUS_TRANSPORT_MACHINE)
|
||||
r = bus_set_address_system_machine(a, arg_bus_path);
|
||||
else
|
||||
r = sd_bus_set_address(a, arg_bus_path);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to set address to connect to: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set address to connect to: %m");
|
||||
|
||||
r = sd_bus_negotiate_fds(a, is_unix);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to set FD negotiation: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set FD negotiation: %m");
|
||||
|
||||
r = sd_bus_start(a);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to start bus client: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to start bus client: %m");
|
||||
|
||||
r = sd_bus_get_bus_id(a, &server_id);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to get server ID: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get server ID: %m");
|
||||
|
||||
r = sd_bus_new(&b);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to allocate bus: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to allocate bus: %m");
|
||||
|
||||
r = sd_bus_set_fd(b, in_fd, out_fd);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to set fds: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set fds: %m");
|
||||
|
||||
r = sd_bus_set_server(b, 1, server_id);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to set server mode: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set server mode: %m");
|
||||
|
||||
r = sd_bus_negotiate_fds(b, is_unix);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to set FD negotiation: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set FD negotiation: %m");
|
||||
|
||||
r = sd_bus_set_anonymous(b, true);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to set anonymous authentication: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set anonymous authentication: %m");
|
||||
|
||||
r = sd_bus_start(b);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to start bus client: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to start bus client: %m");
|
||||
|
||||
for (;;) {
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||
@@ -195,74 +173,51 @@ int main(int argc, char *argv[]) {
|
||||
struct timespec _ts, *ts;
|
||||
|
||||
r = sd_bus_process(a, &m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to process bus a: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to process bus a: %m");
|
||||
|
||||
if (m) {
|
||||
r = sd_bus_send(b, m, NULL);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to send message: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to send message: %m");
|
||||
}
|
||||
|
||||
if (r > 0)
|
||||
continue;
|
||||
|
||||
r = sd_bus_process(b, &m);
|
||||
if (r < 0) {
|
||||
if (r < 0)
|
||||
/* treat 'connection reset by peer' as clean exit condition */
|
||||
if (r == -ECONNRESET)
|
||||
r = 0;
|
||||
|
||||
goto finish;
|
||||
}
|
||||
return r == -ECONNRESET ? 0 : r;
|
||||
|
||||
if (m) {
|
||||
r = sd_bus_send(a, m, NULL);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to send message: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to send message: %m");
|
||||
}
|
||||
|
||||
if (r > 0)
|
||||
continue;
|
||||
|
||||
fd = sd_bus_get_fd(a);
|
||||
if (fd < 0) {
|
||||
r = fd;
|
||||
log_error_errno(r, "Failed to get fd: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (fd < 0)
|
||||
return log_error_errno(fd, "Failed to get fd: %m");
|
||||
|
||||
events_a = sd_bus_get_events(a);
|
||||
if (events_a < 0) {
|
||||
r = events_a;
|
||||
log_error_errno(r, "Failed to get events mask: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (events_a < 0)
|
||||
return log_error_errno(events_a, "Failed to get events mask: %m");
|
||||
|
||||
r = sd_bus_get_timeout(a, &timeout_a);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to get timeout: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get timeout: %m");
|
||||
|
||||
events_b = sd_bus_get_events(b);
|
||||
if (events_b < 0) {
|
||||
r = events_b;
|
||||
log_error_errno(r, "Failed to get events mask: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (events_b < 0)
|
||||
return log_error_errno(events_b, "Failed to get events mask: %m");
|
||||
|
||||
r = sd_bus_get_timeout(b, &timeout_b);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to get timeout: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get timeout: %m");
|
||||
|
||||
t = timeout_a;
|
||||
if (t == (uint64_t) -1 || (timeout_b != (uint64_t) -1 && timeout_b < timeout_a))
|
||||
@@ -290,12 +245,11 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = ppoll(p, ELEMENTSOF(p), ts, NULL);
|
||||
}
|
||||
if (r < 0) {
|
||||
log_error_errno(errno, "ppoll() failed: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(errno, "ppoll() failed: %m");
|
||||
}
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
@@ -916,47 +916,43 @@ finish:
|
||||
return r;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_(free_sysvstub_hashmapp) Hashmap *all_services = NULL;
|
||||
_cleanup_(lookup_paths_free) LookupPaths lp = {};
|
||||
SysvStub *service;
|
||||
Iterator j;
|
||||
int r;
|
||||
|
||||
if (argc > 1 && argc != 4) {
|
||||
log_error("This program takes three or no arguments.");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (argc > 1)
|
||||
arg_dest = argv[3];
|
||||
|
||||
log_set_prohibit_ipc(true);
|
||||
log_set_target(LOG_TARGET_AUTO);
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
if (argc > 1 && argc != 4) {
|
||||
log_error("This program takes three or no arguments.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (argc > 1)
|
||||
arg_dest = argv[3];
|
||||
|
||||
umask(0022);
|
||||
|
||||
r = lookup_paths_init(&lp, UNIT_FILE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to find lookup paths: %m");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to find lookup paths: %m");
|
||||
|
||||
all_services = hashmap_new(&string_hash_ops);
|
||||
if (!all_services) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
if (!all_services)
|
||||
return log_oom();
|
||||
|
||||
r = enumerate_sysv(&lp, all_services);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
r = set_dependencies_from_rcnd(&lp, all_services);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
HASHMAP_FOREACH(service, all_services, j)
|
||||
(void) load_sysv(service);
|
||||
@@ -966,8 +962,7 @@ int main(int argc, char *argv[]) {
|
||||
(void) generate_unit_file(service);
|
||||
}
|
||||
|
||||
r = 0;
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
@@ -836,7 +836,7 @@ static int ask_on_consoles(int argc, char *argv[]) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
log_set_target(LOG_TARGET_AUTO);
|
||||
@@ -847,31 +847,28 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
r = parse_argv(argc, argv);
|
||||
if (r <= 0)
|
||||
goto finish;
|
||||
return r;
|
||||
|
||||
if (arg_console && !arg_device)
|
||||
/*
|
||||
* Spawn for each console device a separate process.
|
||||
* Spawn a separate process for each console device.
|
||||
*/
|
||||
r = ask_on_consoles(argc, argv);
|
||||
else {
|
||||
return ask_on_consoles(argc, argv);
|
||||
|
||||
if (arg_device) {
|
||||
/*
|
||||
* Later on, a controlling terminal will be acquired,
|
||||
* therefore the current process has to become a session
|
||||
* leader and should not have a controlling terminal already.
|
||||
*/
|
||||
(void) setsid();
|
||||
(void) release_terminal();
|
||||
}
|
||||
|
||||
if (IN_SET(arg_action, ACTION_WATCH, ACTION_WALL))
|
||||
r = watch_passwords();
|
||||
else
|
||||
r = show_passwords();
|
||||
if (arg_device) {
|
||||
/*
|
||||
* Later on, a controlling terminal will be acquired,
|
||||
* therefore the current process has to become a session
|
||||
* leader and should not have a controlling terminal already.
|
||||
*/
|
||||
(void) setsid();
|
||||
(void) release_terminal();
|
||||
}
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
if (IN_SET(arg_action, ACTION_WATCH, ACTION_WALL))
|
||||
return watch_passwords();
|
||||
else
|
||||
return show_passwords();
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
@@ -76,7 +76,7 @@ finish_rmdir:
|
||||
return r;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
VolatileMode m = _VOLATILE_MODE_INVALID;
|
||||
const char *path;
|
||||
int r;
|
||||
@@ -87,22 +87,18 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (argc > 3) {
|
||||
log_error("Too many arguments. Expected directory and mode.");
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
r = query_volatile_mode(&m);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to determine volatile mode from kernel command line.");
|
||||
goto finish;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to determine volatile mode from kernel command line.");
|
||||
if (r == 0 && argc >= 2) {
|
||||
/* The kernel command line always wins. However if nothing was set there, the argument passed here wins instead. */
|
||||
m = volatile_mode_from_string(argv[1]);
|
||||
if (m < 0) {
|
||||
log_error("Couldn't parse volatile mode: %s", argv[1]);
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,28 +109,22 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
if (isempty(path)) {
|
||||
log_error("Directory name cannot be empty.");
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!path_is_absolute(path)) {
|
||||
log_error("Directory must be specified as absolute path.");
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
if (path_equal(path, "/")) {
|
||||
log_error("Directory cannot be the root directory.");
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (m != VOLATILE_YES) {
|
||||
r = 0;
|
||||
goto finish;
|
||||
}
|
||||
if (m != VOLATILE_YES)
|
||||
return 0;
|
||||
|
||||
r = make_volatile(path);
|
||||
|
||||
finish:
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
return make_volatile(path);
|
||||
}
|
||||
|
||||
DEFINE_MAIN_FUNCTION(run);
|
||||
|
||||
Reference in New Issue
Block a user