X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=daemon%2Fdaemon.h;h=70f0beef9decbd640c8514dee05b0d2540e5a69f;hb=826020fe18bf2eee43f8afea392874bb88c0650a;hp=c3b9120932eaee6b23bffc8c988afe68f77f90cd;hpb=875dc84cc01dacb1e254e294a66e179b96fbdbc6;p=libguestfs.git diff --git a/daemon/daemon.h b/daemon/daemon.h index c3b9120..70f0bee 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -139,7 +139,13 @@ extern void reply (xdrproc_t xdrp, char *ret); /* Helper for functions which need either an absolute path in the * mounted filesystem, OR a /dev/ device which exists. + * * NB. Cannot be used for FileIn functions. + * + * NB #2: Functions which mix filenames and device paths should be + * avoided, and existing functions should be deprecated. This is + * because we intend in future to make device parameters a distinct + * type from filenames. */ #define NEED_ROOT_OR_IS_DEVICE(path,errcode) \ do { \ @@ -156,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.