/* Handle systems without setns. */
-#ifndef HAVE_SETNS
-static int
-setns (int fd, int nstype)
+static inline int
+do_setns (int fd, int nstype)
{
-#ifdef __NR_setns
+#ifdef HAVE_SETNS
+ return setns (fd, nstype);
+#elif defined __NR_setns
return syscall (__NR_setns, fd, nstype);
#else
errno = ENOSYS;
return -1;
#endif
}
+
+/* Handle systems without MSG_CMSG_CLOEXEC. */
+
+#ifndef MSG_CMSG_CLOEXEC
+#define MSG_CMSG_CLOEXEC 0
#endif
/* A Linux namespace. */
{
debug_printf ("mnsh: send: ");
mnsh_debug_print_message (type, fd, int1, int2, buf, bufsiz);
- debug_printf (" -> %ld\n", size);
+ debug_printf (" -> %s\n", pulongest (size));
}
return size;
if (size < 0)
{
if (debug_linux_namespaces)
- debug_printf ("namespace-helper: recv failed (%ld)\n", size);
+ debug_printf ("namespace-helper: recv failed (%s)\n",
+ pulongest (size));
mnsh_maybe_mourn_peer ();
if (size < fixed_size || (msg.msg_flags & (MSG_TRUNC | MSG_CTRUNC)))
{
if (debug_linux_namespaces)
- debug_printf ("namespace-helper: recv truncated (%ld 0x%x)\n",
- size, msg.msg_flags);
+ debug_printf ("namespace-helper: recv truncated (%s 0x%x)\n",
+ pulongest (size), msg.msg_flags);
mnsh_maybe_mourn_peer ();
static ssize_t
mnsh_handle_setns (int sock, int fd, int nstype)
{
- int result = setns (fd, nstype);
+ int result = do_setns (fd, nstype);
return mnsh_return_int (sock, result, errno);
}
if (fd < 0)
goto error;
- old_chain = make_cleanup_close (fd);
+ make_cleanup_close (fd);
if (fstat (fd, &sb) != 0)
goto error;