diff options
author | Richard Jones <rjones@trick.home.annexia.org> | 2009-06-22 12:40:57 +0100 |
---|---|---|
committer | Richard Jones <rjones@trick.home.annexia.org> | 2009-06-22 12:40:57 +0100 |
commit | 3dfc0a8c5da8f3a4a6c13e936d4306b79b231dde (patch) | |
tree | 83f42445cf4cc17dfcd42be4fda15396bfdd4f15 /daemon | |
parent | 7c2e6fd3e98840c91b0bac8e13e2eb564810ba04 (diff) | |
download | libguestfs-3dfc0a8c5da8f3a4a6c13e936d4306b79b231dde.tar.gz libguestfs-3dfc0a8c5da8f3a4a6c13e936d4306b79b231dde.tar.xz libguestfs-3dfc0a8c5da8f3a4a6c13e936d4306b79b231dde.zip |
Make CHROOT_IN/OUT macros should loudly if the syscall fails.
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/daemon.h | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/daemon/daemon.h b/daemon/daemon.h index 115db093..70f0beef 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -162,11 +162,22 @@ 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. + * (4) Neither macro affects errno. */ -#define CHROOT_IN chroot ("/sysroot"); -#define CHROOT_OUT \ - do { int old_errno = errno; chroot ("."); errno = old_errno; } while (0) +#define CHROOT_IN \ + do { \ + int __old_errno = errno; \ + if (chroot ("/sysroot") == -1) \ + perror ("CHROOT_IN: sysroot"); \ + errno = __old_errno; \ + } while (0) +#define CHROOT_OUT \ + do { \ + int __old_errno = errno; \ + if (chroot (".") == -1) \ + perror ("CHROOT_OUT: ."); \ + errno = __old_errno; \ + } while (0) /* Marks functions which are not implemented. * NB. Cannot be used for FileIn functions. |