diff --git a/src/shared/install.c b/src/shared/install.c index ca8e7d2733f..08c2915fb53 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -1810,7 +1810,8 @@ static int install_info_discover( r = install_info_traverse(ctx, lp, info, flags, ret); if (r < 0) - install_changes_add(changes, n_changes, r, name_or_path, NULL); + return install_changes_add(changes, n_changes, r, name_or_path, NULL); + return r; } @@ -1871,7 +1872,10 @@ int unit_file_verify_alias( if (!p) p = endswith(dir, ".requires"); if (!p) { - install_changes_add(changes, n_changes, -EXDEV, dst, NULL); + r = install_changes_add(changes, n_changes, -EXDEV, dst, NULL); + if (r != -EXDEV) + return r; + return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), "Invalid path \"%s\" in alias.", dir); } @@ -1879,7 +1883,9 @@ int unit_file_verify_alias( UnitNameFlags type = unit_name_classify(dir); if (type < 0) { - install_changes_add(changes, n_changes, -EXDEV, dst, NULL); + r = install_changes_add(changes, n_changes, -EXDEV, dst, NULL); + if (r != -EXDEV) + return r; return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), "Invalid unit name component \"%s\" in alias.", dir); } @@ -1891,7 +1897,10 @@ int unit_file_verify_alias( if (r < 0) return log_error_errno(r, "Failed to verify alias validity: %m"); if (r == 0) { - install_changes_add(changes, n_changes, -EXDEV, dst, info->name); + r = install_changes_add(changes, n_changes, -EXDEV, dst, info->name); + if (r != -EXDEV) + return r; + return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), "Invalid unit \"%s\" symlink \"%s\".", info->name, dst); @@ -1905,7 +1914,9 @@ int unit_file_verify_alias( UnitNameFlags type = unit_name_to_instance(info->name, &inst); if (type < 0) { - install_changes_add(changes, n_changes, -EUCLEAN, info->name, NULL); + r = install_changes_add(changes, n_changes, -EUCLEAN, info->name, NULL); + if (r != -EUCLEAN) + return r; return log_debug_errno(type, "Failed to extract instance name from \"%s\": %m", info->name); } @@ -2288,10 +2299,14 @@ static int install_context_mark_for_removal( } } else if (r < 0) { log_debug_errno(r, "Failed to find unit %s, removing name: %m", i->name); - install_changes_add(changes, n_changes, r, i->path ?: i->name, NULL); + int k = install_changes_add(changes, n_changes, r, i->path ?: i->name, NULL); + if (k != r) + return k; } else if (i->install_mode == INSTALL_MODE_MASKED) { log_debug("Unit file %s is masked, ignoring.", i->name); - install_changes_add(changes, n_changes, INSTALL_CHANGE_IS_MASKED, i->path ?: i->name, NULL); + r = install_changes_add(changes, n_changes, INSTALL_CHANGE_IS_MASKED, i->path ?: i->name, NULL); + if (r < 0) + return r; continue; } else if (i->install_mode != INSTALL_MODE_REGULAR) { log_debug("Unit %s has install mode %s, ignoring.", @@ -2439,10 +2454,8 @@ int unit_file_unmask( return -ENOMEM; if (!dry_run && unlink(path) < 0) { - if (errno != ENOENT) { - RET_GATHER(r, -errno); - install_changes_add(changes, n_changes, -errno, path, NULL); - } + if (errno != ENOENT) + RET_GATHER(r, install_changes_add(changes, n_changes, -errno, path, NULL)); continue; }