int main(int argc, char*argv[]) { _cleanup_bus_unref_ sd_bus *bus = NULL; int fd1, fd2; int r; r = sd_bus_open_system(&bus); assert_se(r >= 0); print_inhibitors(bus); fd1 = inhibit(bus, "sleep"); assert_se(fd1 >= 0); print_inhibitors(bus); fd2 = inhibit(bus, "idle:shutdown"); assert_se(fd2 >= 0); print_inhibitors(bus); safe_close(fd1); sleep(1); print_inhibitors(bus); safe_close(fd2); sleep(1); print_inhibitors(bus); return 0; }
int main(int argc, char*argv[]) { DBusConnection *bus; int fd1, fd2; bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, NULL); assert(bus); print_inhibitors(bus); fd1 = inhibit(bus, "sleep"); assert(fd1 >= 0); print_inhibitors(bus); fd2 = inhibit(bus, "idle:shutdown"); assert(fd2 >= 0); print_inhibitors(bus); close_nointr_nofail(fd1); sleep(1); print_inhibitors(bus); close_nointr_nofail(fd2); sleep(1); print_inhibitors(bus); return 0; }
int main(int argc, char *argv[]) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; _cleanup_bus_close_unref_ sd_bus *bus = NULL; int r; log_parse_environment(); log_open(); r = parse_argv(argc, argv); if (r < 0) return EXIT_FAILURE; if (r == 0) return EXIT_SUCCESS; r = sd_bus_default_system(&bus); if (r < 0) { log_error("Failed to connect to bus: %s", strerror(-r)); return EXIT_FAILURE; } if (arg_action == ACTION_LIST) { r = print_inhibitors(bus, &error); if (r < 0) { log_error("Failed to list inhibitors: %s", bus_error_message(&error, -r)); return EXIT_FAILURE; } } else { _cleanup_close_ int fd = -1; _cleanup_free_ char *w = NULL; pid_t pid; if (!arg_who) arg_who = w = strv_join(argv + optind, " "); fd = inhibit(bus, &error); if (fd < 0) { log_error("Failed to inhibit: %s", bus_error_message(&error, -r)); return EXIT_FAILURE; } pid = fork(); if (pid < 0) { log_error("Failed to fork: %m"); return EXIT_FAILURE; } if (pid == 0) { /* Child */ close_all_fds(NULL, 0); execvp(argv[optind], argv + optind); log_error("Failed to execute %s: %m", argv[optind]); _exit(EXIT_FAILURE); } r = wait_for_terminate_and_warn(argv[optind], pid); return r < 0 ? EXIT_FAILURE : r; } return 0; }
int main(int argc, char *argv[]) { int r, exit_code = 0; DBusConnection *bus = NULL; DBusError error; int fd = -1; dbus_error_init(&error); log_parse_environment(); log_open(); r = parse_argv(argc, argv); if (r <= 0) goto finish; bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error); if (!bus) { log_error("Failed to connect to bus: %s", bus_error_message(&error)); r = -EIO; goto finish; } if (arg_action == ACTION_LIST) { r = print_inhibitors(bus, &error); if (r < 0) { log_error("Failed to list inhibitors: %s", bus_error_message_or_strerror(&error, -r)); goto finish; } } else { char *w = NULL; pid_t pid; if (!arg_who) arg_who = w = strv_join(argv + optind, " "); fd = inhibit(bus, &error); free(w); if (fd < 0) { log_error("Failed to inhibit: %s", bus_error_message_or_strerror(&error, -r)); r = fd; goto finish; } pid = fork(); if (pid < 0) { log_error("Failed to fork: %m"); r = -errno; goto finish; } if (pid == 0) { /* Child */ close_nointr_nofail(fd); execvp(argv[optind], argv + optind); log_error("Failed to execute %s: %m", argv[optind]); _exit(EXIT_FAILURE); } r = wait_for_terminate_and_warn(argv[optind], pid); if (r >= 0) exit_code = r; } finish: if (bus) { dbus_connection_close(bus); dbus_connection_unref(bus); } dbus_error_free(&error); if (fd >= 0) close_nointr_nofail(fd); return r < 0 ? EXIT_FAILURE : exit_code; }