From: Richard Jones Date: Fri, 10 Apr 2009 11:47:34 +0000 (+0100) Subject: CHROOT_OUT must preserve errno. X-Git-Tag: 0.8~7 X-Git-Url: http://git.annexia.org/?a=commitdiff_plain;h=dd0432e2efc2e22ddbc9fb0a2746ee1c6a9c582f;p=libguestfs.git CHROOT_OUT must preserve errno. --- diff --git a/daemon/daemon.h b/daemon/daemon.h index e2b6a2a..b2396a1 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 +#include + #include #include +#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 */