diff options
author | Richard Jones <rjones@redhat.com> | 2009-04-10 12:47:34 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2009-04-10 12:54:56 +0100 |
commit | dd0432e2efc2e22ddbc9fb0a2746ee1c6a9c582f (patch) | |
tree | e1408dc5ef736cd6b19db60be3b11b296ccbf1b9 | |
parent | 1c8f9c274adb342b263d083f0ac0c24e4b600974 (diff) | |
download | libguestfs-dd0432e2efc2e22ddbc9fb0a2746ee1c6a9c582f.tar.gz libguestfs-dd0432e2efc2e22ddbc9fb0a2746ee1c6a9c582f.tar.xz libguestfs-dd0432e2efc2e22ddbc9fb0a2746ee1c6a9c582f.zip |
CHROOT_OUT must preserve errno.
-rw-r--r-- | daemon/daemon.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/daemon/daemon.h b/daemon/daemon.h index e2b6a2a3..b2396a19 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -19,12 +19,14 @@ #ifndef GUESTFSD_DAEMON_H #define GUESTFSD_DAEMON_H -#include "../src/guestfs_protocol.h" - #include <stdarg.h> +#include <errno.h> + #include <rpc/types.h> #include <rpc/xdr.h> +#include "../src/guestfs_protocol.h" + /* in guestfsd.c */ extern void xwrite (int sock, const void *buf, size_t len); extern void xread (int sock, void *buf, size_t len); @@ -78,8 +80,10 @@ extern void reply (xdrproc_t xdrp, char *ret); * (2) You must not change directory! cwd must always be "/", otherwise * we can't escape our own chroot. * (3) All paths specified must be absolute. + * (4) CHROOT_OUT does not affect errno. */ #define CHROOT_IN chroot ("/sysroot"); -#define CHROOT_OUT chroot ("."); +#define CHROOT_OUT \ + do { int old_errno = errno; chroot ("."); errno = old_errno; } while (0) #endif /* GUESTFSD_DAEMON_H */ |