summaryrefslogtreecommitdiffstats
path: root/daemon
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2009-04-10 12:47:34 +0100
committerRichard Jones <rjones@redhat.com>2009-04-10 12:54:56 +0100
commitdd0432e2efc2e22ddbc9fb0a2746ee1c6a9c582f (patch)
treee1408dc5ef736cd6b19db60be3b11b296ccbf1b9 /daemon
parent1c8f9c274adb342b263d083f0ac0c24e4b600974 (diff)
downloadlibguestfs-dd0432e2efc2e22ddbc9fb0a2746ee1c6a9c582f.tar.gz
libguestfs-dd0432e2efc2e22ddbc9fb0a2746ee1c6a9c582f.tar.xz
libguestfs-dd0432e2efc2e22ddbc9fb0a2746ee1c6a9c582f.zip
CHROOT_OUT must preserve errno.
Diffstat (limited to 'daemon')
-rw-r--r--daemon/daemon.h10
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 */