In various cases, we would say 'return log_warning()' or 'return log_error()'. Those
functions return 0 if no error is passed in. For log_warning or log_error this doesn't
make sense, and we generally want to propagate the error. In the few cases where
the error should be ignored, I think it's better to split it in two, and call 'return 0'
on a separate line.
n = strcspn(v, " ");
buf = strndupa(v, n);
- if (safe_atoi(buf, &fdpair[0]) < 0 || !fdset_contains(fds, fdpair[0]))
- return log_debug("Unable to process exec-runtime netns fd specification.");
+
+ r = safe_atoi(buf, &fdpair[0]);
+ if (r < 0)
+ return log_debug_errno(r, "Unable to parse exec-runtime specification netns-socket-0=%s: %m", buf);
+ if (!fdset_contains(fds, fdpair[0]))
+ return log_debug_errno(SYNTHETIC_ERRNO(EBADF),
+ "exec-runtime specification netns-socket-0= refers to unknown fd %d: %m", fdpair[0]);
fdpair[0] = fdset_remove(fds, fdpair[0]);
if (v[n] != ' ')
goto finalize;
n = strcspn(v, " ");
buf = strndupa(v, n);
- if (safe_atoi(buf, &fdpair[1]) < 0 || !fdset_contains(fds, fdpair[1]))
- return log_debug("Unable to process exec-runtime netns fd specification.");
+ r = safe_atoi(buf, &fdpair[1]);
+ if (r < 0)
+ return log_debug_errno(r, "Unable to parse exec-runtime specification netns-socket-1=%s: %m", buf);
+ if (!fdset_contains(fds, fdpair[0]))
+ return log_debug_errno(SYNTHETIC_ERRNO(EBADF),
+ "exec-runtime specification netns-socket-1= refers to unknown fd %d: %m", fdpair[1]);
fdpair[1] = fdset_remove(fds, fdpair[1]);
}
if (r < 0)
return log_error_errno(r, "Failed to extract instance: %m");
if (isempty(name))
- return log_error("Unit %s is missing the instance name.", *i);
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "Unit %s is missing the instance name.", *i);
r = unit_name_template(*i, &template);
if (r < 0)
return log_error_errno(r, "Failed to extract template: %m");
if (arg_template && !streq(arg_template, template))
- return log_error("Unit %s template %s does not match specified template %s.",
- *i, template, arg_template);
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "Unit %s template %s does not match specified template %s.",
+ *i, template, arg_template);
} else {
name = strdup(*i);
if (!name)
#if HAVE_LIBIDN2
r = idn2_to_unicode_8z8z(label, &utf8, 0);
if (r != IDN2_OK)
- return log_error("Failed to undo IDNA: %s", idn2_strerror(r));
+ return log_error_errno(SYNTHETIC_ERRNO(EUCLEAN),
+ "Failed to undo IDNA: %s", idn2_strerror(r));
assert(utf8_is_valid(utf8));
r = strlen(utf8);
if (streq(key, "systemd.unit")) {
if (proc_cmdline_value_missing(key, value))
return 0;
- if (!unit_name_is_valid(value, UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE))
- return log_warning("Unit name specified on %s= is not valid, ignoring: %s", key, value);
+ if (!unit_name_is_valid(value, UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE)) {
+ log_warning("Unit name specified on %s= is not valid, ignoring: %s", key, value);
+ return 0;
+ }
return free_and_strdup_warn(ret, key);
r = write_string_file_atomic_label_ts(path, message, ts);
if (r == -EROFS)
- return log_debug("Cannot create \"%s\", file system is read-only.", path);
+ return log_debug_errno(r, "Cannot create \"%s\", file system is read-only.", path);
if (r < 0)
return log_error_errno(r, "Failed to write \"%s\": %m", path);
return 0;
runlevel = get_current_runlevel(c);
if (runlevel < 0)
return runlevel;
- if (runlevel == 0)
- return log_warning("Failed to get new runlevel, utmp update skipped.");
+ if (runlevel == 0) {
+ log_warning("Failed to get new runlevel, utmp update skipped.");
+ return 0;
+ }
if (previous == runlevel)
return 0;