X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Funit.c;h=3b416f945fcc20ccac996d6322ff43103f0bfbe1;hb=c74f17d96cccd4cc998fd037cb92046930188c91;hp=673af13c3eb3bf5a5e3bb3764d08908be8a82aac;hpb=d05c5031ad4c528fe6bbfed289519edb9f13180a;p=elogind.git diff --git a/src/core/unit.c b/src/core/unit.c index 673af13c3..3b416f945 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -2401,7 +2401,7 @@ bool unit_can_serialize(Unit *u) { return UNIT_VTABLE(u)->serialize && UNIT_VTABLE(u)->deserialize_item; } -int unit_serialize(Unit *u, FILE *f, FDSet *fds) { +int unit_serialize(Unit *u, FILE *f, FDSet *fds, bool serialize_jobs) { int r; assert(u); @@ -2414,14 +2414,17 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds) { if ((r = UNIT_VTABLE(u)->serialize(u, f, fds)) < 0) return r; - if (u->job) { - fprintf(f, "job\n"); - job_serialize(u->job, f, fds); - } - if (u->nop_job) { - fprintf(f, "job\n"); - job_serialize(u->nop_job, f, fds); + if (serialize_jobs) { + if (u->job) { + fprintf(f, "job\n"); + job_serialize(u->job, f, fds); + } + + if (u->nop_job) { + fprintf(f, "job\n"); + job_serialize(u->nop_job, f, fds); + } } dual_timestamp_serialize(f, "inactive-exit-timestamp", &u->inactive_exit_timestamp); @@ -2718,20 +2721,16 @@ bool unit_pending_active(Unit *u) { return false; } -int unit_kill(Unit *u, KillWho w, KillMode m, int signo, DBusError *error) { +int unit_kill(Unit *u, KillWho w, int signo, DBusError *error) { assert(u); assert(w >= 0 && w < _KILL_WHO_MAX); - assert(m >= 0 && m < _KILL_MODE_MAX); assert(signo > 0); assert(signo < _NSIG); - if (m == KILL_NONE) - return 0; - if (!UNIT_VTABLE(u)->kill) return -ENOTSUP; - return UNIT_VTABLE(u)->kill(u, w, m, signo, error); + return UNIT_VTABLE(u)->kill(u, w, signo, error); } int unit_following_set(Unit *u, Set **s) { @@ -2817,6 +2816,19 @@ int unit_add_mount_links(Unit *u) { return 0; } +int unit_patch_working_directory(Unit *u, ExecContext *c) { + assert(u); + assert(c); + + if (u->manager->running_as != MANAGER_USER) + return 0; + + if (c->working_directory) + return 0; + + return get_home_dir(&c->working_directory); +} + static const char* const unit_active_state_table[_UNIT_ACTIVE_STATE_MAX] = { [UNIT_ACTIVE] = "active", [UNIT_RELOADING] = "reloading",