summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--daemon/proto.c9
-rwxr-xr-xsrc/generator.ml1
-rw-r--r--src/guestfs.pod5
3 files changed, 10 insertions, 5 deletions
diff --git a/daemon/proto.c b/daemon/proto.c
index 6fa243ff..628e86c1 100644
--- a/daemon/proto.c
+++ b/daemon/proto.c
@@ -179,7 +179,7 @@ main_loop (int _sock)
}
}
-static void send_error (const char *msg);
+static void send_error (int errnum, const char *msg);
void
reply_with_error (const char *fs, ...)
@@ -191,7 +191,7 @@ reply_with_error (const char *fs, ...)
vsnprintf (err, sizeof err, fs, args);
va_end (args);
- send_error (err);
+ send_error (0, err);
}
void
@@ -207,11 +207,11 @@ reply_with_perror_errno (int err, const char *fs, ...)
snprintf (buf2, sizeof buf2, "%s: %s", buf1, strerror (err));
- send_error (buf2);
+ send_error (err, buf2);
}
static void
-send_error (const char *msg)
+send_error (int errnum, const char *msg)
{
XDR xdr;
char buf[GUESTFS_ERROR_LEN + 200];
@@ -236,6 +236,7 @@ send_error (const char *msg)
exit (EXIT_FAILURE);
}
+ err.linux_errno = errnum;
err.error_message = (char *) msg;
if (!xdr_guestfs_message_error (&xdr, &err)) {
diff --git a/src/generator.ml b/src/generator.ml
index 7d35ac14..233f8bd2 100755
--- a/src/generator.ml
+++ b/src/generator.ml
@@ -6331,6 +6331,7 @@ enum guestfs_message_status {
pr "\
struct guestfs_message_error {
+ int linux_errno; /* Linux errno if available. */
string error_message<GUESTFS_ERROR_LEN>;
};
diff --git a/src/guestfs.pod b/src/guestfs.pod
index a4d9c572..4dafb074 100644
--- a/src/guestfs.pod
+++ b/src/guestfs.pod
@@ -724,7 +724,7 @@ The error message you get from this is also a little obscure.
This could be fixed in the generator by specially marking parameters
and return values which take bytes or other units.
-=item Protocol should return errno with error messages.
+=item Library should return errno with error messages.
It would be a nice-to-have to be able to get the original value of
'errno' from inside the appliance along error paths (where set).
@@ -732,6 +732,9 @@ Currently L<guestmount(1)> goes through hoops to try to reverse the
error message string into an errno, see the function error() in
fuse/guestmount.c.
+In libguestfs 1.5.4, the protocol was changed so that the
+Linux errno is sent back from the daemon.
+
=back
=head2 PROTOCOL LIMITS