]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
varlinkctl: if returned error is an errno, print it as one in log message
authorLennart Poettering <lennart@poettering.net>
Mon, 26 May 2025 11:19:43 +0000 (13:19 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 26 May 2025 20:51:47 +0000 (05:51 +0900)
src/varlinkctl/varlinkctl.c

index d34ef55cf8b7b11b55e1ad9b9fc82fbd1fc731da..5bd091f20f5fccd2ff1a88e761bf207fd8440f59 100644 (file)
@@ -532,8 +532,14 @@ static int reply_callback(
                                  "Method call returned expected error: %s", error);
 
                         r = 0;
-                } else
-                        r = *ret = log_error_errno(SYNTHETIC_ERRNO(EBADE), "Method call failed: %s", error);
+                } else {
+                        /* If we can translate this to an errno, let's print that as errno and return it, otherwise, return a generic error code */
+                        r = sd_varlink_error_to_errno(error, parameters);
+                        if (r != -EBADR)
+                                *ret = log_error_errno(r, "Method call failed: %m");
+                        else
+                                r = *ret = log_error_errno(SYNTHETIC_ERRNO(EBADE), "Method call failed: %s", error);
+                }
         } else
                 r = 0;
 
@@ -626,8 +632,13 @@ static int verb_call(int argc, char *argv[], void *userdata) {
                                          "Method call %s() returned expected error: %s", method, error);
 
                                 r = 0;
-                        } else
-                                r = log_error_errno(SYNTHETIC_ERRNO(EBADE), "Method call %s() failed: %s", method, error);
+                        } else {
+                                r = sd_varlink_error_to_errno(error, reply);
+                                if (r != -EBADR)
+                                        log_error_errno(r, "Method call %s() failed: %m", method);
+                                else
+                                        r = log_error_errno(SYNTHETIC_ERRNO(EBADE), "Method call %s() failed: %s", method, error);
+                        }
                 } else
                         r = 0;
 
@@ -706,8 +717,13 @@ static int verb_call(int argc, char *argv[], void *userdata) {
                                          "Method call %s() returned expected error: %s", method, error);
 
                                 r = 0;
-                        } else
-                                r = log_error_errno(SYNTHETIC_ERRNO(EBADE), "Method call %s() failed: %s", method, error);
+                        } else {
+                                r = sd_varlink_error_to_errno(error, reply);
+                                if (r != -EBADR)
+                                        log_error_errno(r, "Method call %s() failed: %m", method);
+                                else
+                                        r = log_error_errno(SYNTHETIC_ERRNO(EBADE), "Method call %s() failed: %s", method, error);
+                        }
                 } else
                         r = 0;