X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmachine%2Fmachine.c;h=0ed18d74ece89a8c0680e6f70b73a79ba0c74728;hb=ea30eb86e5a370fb8cb94e352e075e24d940d159;hp=cf38e3fb94022ff9ab49825a8d849e4adbb31feb;hpb=f14aa1f1b2e4e99ee20393871b5f64f1378ed6c3;p=elogind.git diff --git a/src/machine/machine.c b/src/machine/machine.c index cf38e3fb9..0ed18d74e 100644 --- a/src/machine/machine.c +++ b/src/machine/machine.c @@ -94,6 +94,7 @@ void machine_free(Machine *m) { free(m->state_file); free(m->service); free(m->root_directory); + free(m->netif); free(m); } @@ -176,6 +177,21 @@ int machine_save(Machine *m) { m->timestamp.realtime, m->timestamp.monotonic); + if (m->n_netif > 0) { + unsigned i; + + fputs("NETIF=", f); + + for (i = 0; i < m->n_netif; i++) { + if (i != 0) + fputc(' ', f); + + fprintf(f, "%i", m->netif[i]); + } + + fputc('\n', f); + } + r = fflush_and_check(f); if (r < 0) goto finish; @@ -222,7 +238,7 @@ static void machine_unlink(Machine *m) { } int machine_load(Machine *m) { - _cleanup_free_ char *realtime = NULL, *monotonic = NULL, *id = NULL, *leader = NULL, *class = NULL; + _cleanup_free_ char *realtime = NULL, *monotonic = NULL, *id = NULL, *leader = NULL, *class = NULL, *netif = NULL; int r; assert(m); @@ -237,6 +253,7 @@ int machine_load(Machine *m) { "CLASS", &class, "REALTIME", &realtime, "MONOTONIC", &monotonic, + "NETIF", &netif, NULL); if (r < 0) { if (r == -ENOENT) @@ -272,6 +289,35 @@ int machine_load(Machine *m) { m->timestamp.monotonic = l; } + if (netif) { + size_t l, allocated = 0, nr = 0; + char *w, *state; + int *ni = NULL; + + FOREACH_WORD(w, l, netif, state) { + char buf[l+1]; + int ifi; + + *(char*) (mempcpy(buf, w, l)) = 0; + + if (safe_atoi(buf, &ifi) < 0) + continue; + if (ifi <= 0) + continue; + + if (!GREEDY_REALLOC(ni, allocated, nr+1)) { + free(ni); + return log_oom(); + } + + ni[nr++] = ifi; + } + + free(m->netif); + m->netif = ni; + m->n_netif = nr; + } + return r; }