X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fac-power%2Fac-power.c;h=2f25734612bfedb5366636f283036b0a16c34239;hp=37313cf144d2051c8d250de9824d068bf0eb33c2;hb=75e52a16f9ef476f1d18ec6d9c84e00149b80d03;hpb=dce818b390a857a11f7dd634684500675cf79833 diff --git a/src/ac-power/ac-power.c b/src/ac-power/ac-power.c index 37313cf14..2f2573461 100644 --- a/src/ac-power/ac-power.c +++ b/src/ac-power/ac-power.c @@ -19,93 +19,19 @@ along with systemd; If not, see . ***/ -#include -#include -#include -#include -#include - #include "util.h" -static int on_ac_power(void) { - int r; - - struct udev *udev; - struct udev_enumerate *e = NULL; - struct udev_list_entry *item = NULL, *first = NULL; - bool found_offline = false, found_online = false; - - if (!(udev = udev_new())) { - r = -ENOMEM; - goto finish; - } - - if (!(e = udev_enumerate_new(udev))) { - r = -ENOMEM; - goto finish; - } - - if (udev_enumerate_add_match_subsystem(e, "power_supply") < 0) { - r = -EIO; - goto finish; - } - - if (udev_enumerate_scan_devices(e) < 0) { - r = -EIO; - goto finish; - } - - first = udev_enumerate_get_list_entry(e); - udev_list_entry_foreach(item, first) { - struct udev_device *d; - const char *type, *online; - - if (!(d = udev_device_new_from_syspath(udev, udev_list_entry_get_name(item)))) { - r = -ENOMEM; - goto finish; - } - - if (!(type = udev_device_get_sysattr_value(d, "type"))) - goto next; - - if (!streq(type, "Mains")) - goto next; - - if (!(online = udev_device_get_sysattr_value(d, "online"))) - goto next; - - if (streq(online, "1")) { - found_online = true; - break; - } else if (streq(online, "0")) - found_offline = true; - - next: - udev_device_unref(d); - } - - r = found_online || !found_offline; - -finish: - if (e) - udev_enumerate_unref(e); - - if (udev) - udev_unref(udev); - - return r; -} - int main(int argc, char *argv[]) { int r; /* This is mostly intended to be used for scripts which want * to detect whether AC power is plugged in or not. */ - if ((r = on_ac_power()) < 0) { - log_error("Failed to read AC status: %s", strerror(-r)); + r = on_ac_power(); + if (r < 0) { + log_error_errno(r, "Failed to read AC status: %m"); return EXIT_FAILURE; } - return r == 0; + return r != 0 ? EXIT_SUCCESS : EXIT_FAILURE; }