summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-10-11 19:33:48 -0400
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-10-13 17:56:54 -0400
commit51d122af23533b0b8318911c4fc8b128ad8eafb7 (patch)
tree1690a73e00c06ac56bb8ff405ea28aa1dd600099 /src
parenta3e7f417d72ba3251fd6b3a228a2721a4b725a03 (diff)
Introduce _cleanup_fdset_free_
Diffstat (limited to 'src')
-rw-r--r--src/core/manager.c22
-rw-r--r--src/nspawn/nspawn.c4
-rw-r--r--src/shared/fdset.h7
3 files changed, 15 insertions, 18 deletions
diff --git a/src/core/manager.c b/src/core/manager.c
index 58dacdc8b5..b45a2e11a5 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)
@@ -2317,8 +2318,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 +2333,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 +2388,6 @@ int manager_reload(Manager *m) {
m->send_reloading_done = true;
-finish:
- if (f)
- fclose(f);
-
- if (fds)
- fdset_free(fds);
-
return r;
}
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index fc4a8a36c8..15e48739b9 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -1223,7 +1223,7 @@ int main(int argc, char *argv[]) {
bool saved_attr_valid = false;
struct winsize ws;
int kmsg_socket_pair[2] = { -1, -1 };
- FDSet *fds = NULL;
+ _cleanup_fdset_free_ FDSet *fds = NULL;
log_parse_environment();
log_open();
@@ -1725,7 +1725,5 @@ finish:
free(arg_directory);
free(arg_machine);
- fdset_free(fds);
-
return r;
}
diff --git a/src/shared/fdset.h b/src/shared/fdset.h
index a7bd5e2b40..1a26005183 100644
--- a/src/shared/fdset.h
+++ b/src/shared/fdset.h
@@ -22,6 +22,7 @@
***/
#include "set.h"
+#include "util.h"
typedef struct FDSet FDSet;
@@ -47,3 +48,9 @@ int fdset_iterate(FDSet *s, Iterator *i);
#define FDSET_FOREACH(fd, fds, i) \
for ((i) = ITERATOR_FIRST, (fd) = fdset_iterate((fds), &(i)); (fd) >= 0; (fd) = fdset_iterate((fds), &(i)))
+
+static inline void fdset_freep(FDSet **fds) {
+ if (*fds)
+ fdset_free(*fds);
+}
+#define _cleanup_fdset_free_ _cleanup_(fdset_freep)