target: introduce target_get_runlevel() for distilling SysV compatible runlevel information from a target

This commit is contained in:
Lennart Poettering 2010-04-10 04:52:21 +02:00
parent 11857f8daf
commit e293f0f07d
2 changed files with 33 additions and 1 deletions

View File

@ -89,6 +89,35 @@ static UnitActiveState target_active_state(Unit *u) {
return state_translation_table[TARGET(u)->state];
}
int target_get_runlevel(Target *t) {
static const struct {
const char *special;
const int runlevel;
} table[] = {
{ SPECIAL_RUNLEVEL5_TARGET, '5' },
{ SPECIAL_RUNLEVEL4_TARGET, '4' },
{ SPECIAL_RUNLEVEL3_TARGET, '3' },
{ SPECIAL_RUNLEVEL2_TARGET, '2' },
{ SPECIAL_RUNLEVEL1_TARGET, '1' },
{ SPECIAL_RUNLEVEL0_TARGET, '0' },
{ SPECIAL_RUNLEVEL6_TARGET, '6' },
};
unsigned i;
assert(t);
/* Tries to determine if this is a SysV runlevel and returns
* it if that is so. */
for (i = 0; i < ELEMENTSOF(table); i++)
if (unit_has_name(UNIT(t), table[i].special))
return table[i].runlevel;
return 0;
}
const UnitVTable target_vtable = {
.suffix = ".target",

View File

@ -29,7 +29,8 @@ typedef struct Target Target;
typedef enum TargetState {
TARGET_DEAD,
TARGET_ACTIVE,
_TARGET_STATE_MAX
_TARGET_STATE_MAX,
_TARGET_STATE_INVALID = -1
} TargetState;
struct Target {
@ -40,4 +41,6 @@ struct Target {
extern const UnitVTable target_vtable;
int target_get_runlevel(Target *t);
#endif