}
int bus_error_set_errnofv(sd_bus_error *e, int error, const char *format, va_list ap) {
+ PROTECT_ERRNO;
int r;
if (error < 0)
if (format) {
char *m;
- /* First, let's try to fill in the supplied message */
+ /* Then, let's try to fill in the supplied message */
+ errno = error; /* Make sure that %m resolves to the specified error */
r = vasprintf(&m, format, ap);
if (r >= 0) {