summaryrefslogtreecommitdiff
path: root/src/remount-api-vfs.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-12-30 15:34:21 +0100
committerLennart Poettering <lennart@poettering.net>2011-12-30 15:34:21 +0100
commitadb2ce5f694cb528f9294219941b1e37dc6a9530 (patch)
treef1bdcebf5c6dde3fb21a37c05a92a3ebee0a330d /src/remount-api-vfs.c
parent54a7b863dd3937893abae47b20b6f655b8e9252a (diff)
remount-api-vfs: handle another OOM condition
Diffstat (limited to 'src/remount-api-vfs.c')
-rw-r--r--src/remount-api-vfs.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/remount-api-vfs.c b/src/remount-api-vfs.c
index 8bbc021dc4..7b146551a8 100644
--- a/src/remount-api-vfs.c
+++ b/src/remount-api-vfs.c
@@ -54,12 +54,14 @@ int main(int argc, char *argv[]) {
umask(0022);
- if (!(f = setmntent("/etc/fstab", "r"))) {
+ f = setmntent("/etc/fstab", "r");
+ if (!f) {
log_error("Failed to open /etc/fstab: %m");
goto finish;
}
- if (!(pids = hashmap_new(trivial_hash_func, trivial_compare_func))) {
+ pids = hashmap_new(trivial_hash_func, trivial_compare_func);
+ if (!pids) {
log_error("Failed to allocate set");
goto finish;
}
@@ -76,9 +78,10 @@ int main(int argc, char *argv[]) {
log_debug("Remounting %s", me->mnt_dir);
- if ((pid = fork()) < 0) {
+ pid = fork();
+ if (pid < 0) {
log_error("Failed to fork: %m");
- ret = 1;
+ ret = EXIT_FAILURE;
continue;
}
@@ -101,8 +104,15 @@ int main(int argc, char *argv[]) {
/* Parent */
s = strdup(me->mnt_dir);
+ if (!s) {
+ log_error("Out of memory.");
+ ret = EXIT_FAILURE;
+ continue;
+ }
+
- if ((k = hashmap_put(pids, UINT_TO_PTR(pid), s)) < 0) {
+ k = hashmap_put(pids, UINT_TO_PTR(pid), s);
+ if (k < 0) {
log_error("Failed to add PID to set: %s", strerror(-k));
ret = EXIT_FAILURE;
continue;
@@ -124,7 +134,8 @@ int main(int argc, char *argv[]) {
break;
}
- if ((s = hashmap_remove(pids, UINT_TO_PTR(si.si_pid)))) {
+ s = hashmap_remove(pids, UINT_TO_PTR(si.si_pid));
+ if (s) {
if (!is_clean_exit(si.si_code, si.si_status)) {
if (si.si_code == CLD_EXITED)
log_error("/bin/mount for %s exited with exit status %i.", s, si.si_status);