X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fcondition.c;h=30199c10e3bbbeedab5ec05d05db37cdd21b4e2b;hp=32a37ccad61c514ff1807767535afad5462a134d;hb=a5c32cff1f56afe6f0c6c70d91a88a7a8238b2d7;hpb=742a862bb803641b78a40f6b498486397a321294 diff --git a/src/core/condition.c b/src/core/condition.c index 32a37ccad..30199c10e 100644 --- a/src/core/condition.c +++ b/src/core/condition.c @@ -36,6 +36,7 @@ #include "condition.h" #include "virt.h" #include "path-util.h" +#include "fileio.h" Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate) { Condition *c; @@ -221,6 +222,16 @@ static bool test_host(const char *parameter) { return b; } +static bool test_ac_power(const char *parameter) { + int r; + + r = parse_boolean(parameter); + if (r < 0) + return true; + + return (on_ac_power() != 0) == !!r; +} + bool condition_test(Condition *c) { assert(c); @@ -294,6 +305,9 @@ bool condition_test(Condition *c) { case CONDITION_HOST: return test_host(c->parameter) == !c->negate; + case CONDITION_AC_POWER: + return test_ac_power(c->parameter) == !c->negate; + case CONDITION_NULL: return !c->negate; @@ -364,6 +378,7 @@ static const char* const condition_type_table[_CONDITION_TYPE_MAX] = { [CONDITION_VIRTUALIZATION] = "ConditionVirtualization", [CONDITION_SECURITY] = "ConditionSecurity", [CONDITION_HOST] = "ConditionHost", + [CONDITION_AC_POWER] = "ConditionACPower", [CONDITION_NULL] = "ConditionNull" };