![Zbigniew Jędrzejewski-Szmek](/assets/img/avatar_default.png)
$ systemctl --user status hoohoo hoohoo.service Loaded: loaded (/home/zbyszek/.config/systemd/user/hoohoo.service; static) Active: inactive (dead) start condition failed at Tue 2013-06-25 18:08:42 EDT; 1s ago ConditionPathExists=/tmp/hoo was not met Full information is exported over D-Bus: [(condition, trigger, negate, param, state),...] where state is one of "failed" (<0), "untested" (0), "OK" (>0). I've decided to use 0 for "untested", because it might be useful to differentiate different types of failure later on, without breaking compatibility. systemctl shows the failing condition, if there was a non-trigger failing condition, or says "none of the trigger conditions were met", because there're often many trigger conditions, and they must all fail for the condition to fail, so printing them all would consume a lot of space, and bring unnecessary attention to something that is quite low-level.
73 lines
2.1 KiB
C
73 lines
2.1 KiB
C
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
|
|
|
#pragma once
|
|
|
|
/***
|
|
This file is part of systemd.
|
|
|
|
Copyright 2010 Lennart Poettering
|
|
|
|
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 <stdbool.h>
|
|
|
|
#include "list.h"
|
|
|
|
typedef enum ConditionType {
|
|
CONDITION_PATH_EXISTS,
|
|
CONDITION_PATH_EXISTS_GLOB,
|
|
CONDITION_PATH_IS_DIRECTORY,
|
|
CONDITION_PATH_IS_SYMBOLIC_LINK,
|
|
CONDITION_PATH_IS_MOUNT_POINT,
|
|
CONDITION_PATH_IS_READ_WRITE,
|
|
CONDITION_DIRECTORY_NOT_EMPTY,
|
|
CONDITION_FILE_NOT_EMPTY,
|
|
CONDITION_FILE_IS_EXECUTABLE,
|
|
CONDITION_KERNEL_COMMAND_LINE,
|
|
CONDITION_VIRTUALIZATION,
|
|
CONDITION_SECURITY,
|
|
CONDITION_CAPABILITY,
|
|
CONDITION_HOST,
|
|
CONDITION_AC_POWER,
|
|
CONDITION_NULL,
|
|
_CONDITION_TYPE_MAX,
|
|
_CONDITION_TYPE_INVALID = -1
|
|
} ConditionType;
|
|
|
|
typedef struct Condition {
|
|
ConditionType type;
|
|
|
|
bool trigger:1;
|
|
bool negate:1;
|
|
|
|
char *parameter;
|
|
|
|
int state;
|
|
|
|
LIST_FIELDS(struct Condition, conditions);
|
|
} Condition;
|
|
|
|
Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate);
|
|
void condition_free(Condition *c);
|
|
void condition_free_list(Condition *c);
|
|
|
|
bool condition_test_list(const char *unit, Condition *c);
|
|
|
|
void condition_dump(Condition *c, FILE *f, const char *prefix);
|
|
void condition_dump_list(Condition *c, FILE *f, const char *prefix);
|
|
|
|
const char* condition_type_to_string(ConditionType t) _const_;
|
|
int condition_type_from_string(const char *s) _pure_;
|