X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fmanager.c;h=c75c1e1a4ebace040fc5753131d549dde5352147;hb=f3669545238702f8ffee7b743ca4347b785b558a;hp=bc57e4a1fd31ce1a14293ec5fc770d4afb92b38c;hpb=a57f7e2c828b852eb32fd810dcea041bb2975501;p=elogind.git diff --git a/src/core/manager.c b/src/core/manager.c index bc57e4a1f..c75c1e1a4 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -236,7 +236,7 @@ static void draw_cylon(char buffer[], size_t buflen, unsigned width, unsigned po *p++ = '*'; if (pos < width-1) p = mempset(p, ' ', width-1-pos); - p = stpcpy(p, ANSI_HIGHLIGHT_OFF); + strcpy(p, ANSI_HIGHLIGHT_OFF); } } @@ -257,6 +257,7 @@ static void manager_print_jobs_in_progress(Manager *m) { /* m->n_running_jobs must be consistent with the contents of m->jobs, * so the above loop must have succeeded in finding j. */ assert(counter == print_nr + 1); + assert(j); cylon_pos = m->jobs_in_progress_iteration % 14; if (cylon_pos >= 8) @@ -485,6 +486,7 @@ static int manager_default_environment(Manager *m) { int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) { Manager *m; int r = -ENOMEM; + bool try_bus_connect = false; assert(_m); assert(running_as >= 0); @@ -556,15 +558,18 @@ int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) { if (r < 0) goto fail; - /* Try to connect to the busses, if possible. */ - if ((running_as == SYSTEMD_USER && getenv("DBUS_SESSION_BUS_ADDRESS")) || - running_as == SYSTEMD_SYSTEM) { - r = bus_init(m, reexecuting || running_as != SYSTEMD_SYSTEM); - if (r < 0) - goto fail; - } else + if (running_as == SYSTEMD_SYSTEM) + try_bus_connect = reexecuting; + else if (getenv("DBUS_SESSION_BUS_ADDRESS")) + try_bus_connect = true; + else log_debug("Skipping DBus session bus connection attempt - no DBUS_SESSION_BUS_ADDRESS set..."); + /* Try to connect to the busses, if possible. */ + r = bus_init(m, try_bus_connect); + if (r < 0) + goto fail; + m->taint_usr = dir_is_empty("/usr") > 0; *_m = m; @@ -671,7 +676,7 @@ static unsigned manager_dispatch_gc_queue(Manager *m) { unit_gc_sweep(u, gc_marker); - LIST_REMOVE(Unit, gc_queue, m->gc_queue, u); + LIST_REMOVE(gc_queue, m->gc_queue, u); u->in_gc_queue = false; n++; @@ -1791,7 +1796,7 @@ int manager_loop(Manager *m) { manager_check_finished(m); /* There might still be some zombies hanging around from - * before we were exec()'ed. Leat's reap them */ + * before we were exec()'ed. Let's reap them. */ r = manager_dispatch_sigchld(m); if (r < 0) return r; @@ -2057,7 +2062,7 @@ void manager_dispatch_bus_query_pid_done( int manager_open_serialization(Manager *m, FILE **_f) { char *path = NULL; - int fd; + int fd = -1; FILE *f; assert(_f); @@ -2317,8 +2322,8 @@ int manager_distribute_fds(Manager *m, FDSet *fds) { int manager_reload(Manager *m) { int r, q; - FILE *f; - FDSet *fds; + _cleanup_fclose_ FILE *f = NULL; + _cleanup_fdset_free_ FDSet *fds = NULL; assert(m); @@ -2332,20 +2337,18 @@ int manager_reload(Manager *m) { fds = fdset_new(); if (!fds) { m->n_reloading --; - r = -ENOMEM; - goto finish; + return -ENOMEM; } r = manager_serialize(m, f, fds, false); if (r < 0) { m->n_reloading --; - goto finish; + return r; } if (fseeko(f, 0, SEEK_SET) < 0) { m->n_reloading --; - r = -errno; - goto finish; + return -errno; } /* From here on there is no way back. */ @@ -2389,13 +2392,6 @@ int manager_reload(Manager *m) { m->send_reloading_done = true; -finish: - if (f) - fclose(f); - - if (fds) - fdset_free(fds); - return r; } @@ -2665,14 +2661,16 @@ void manager_undo_generators(Manager *m) { } int manager_environment_add(Manager *m, char **environment) { - char **e = NULL; assert(m); + e = strv_env_merge(2, m->environment, environment); if (!e) return -ENOMEM; + strv_free(m->environment); m->environment = e; + return 0; }