[klibc] [patch 11/12] Unpleasantness in linux/nfs_mount.h

Erik van Konijnenburg ekonijn at xs4all.nl
Sun May 22 07:52:21 PDT 2005


There is a conflict in glibc between <linux/in.h> and <netinet/in.h>:
one defines protocols with an enum, the other does the same,
but adds a self-define for every enumerated value.
	#define IPPROTO_IP IPPROTO_IP

This means the two cannot be mixed, and since loads of include files
refer to <netinet/in.h>, effectively <linux/in.h> cannot be used
with glibc.

Since <linux/nfs_mount.h> uses <linux/in.h>, that also is off-limits
for anything that wants to be compatible with glibc.

This uses the same workaround used by util-linux: just copy
the relevant declarations.  Ugly, but it's not like people
are going to change the NFS mount interface from under us
without warning.


Signed-off-by: Erik van Konijnenburg <ekonijn at xs4all.nl>

Index: exec/nfsmount/main.c
===================================================================
--- exec.orig/nfsmount/main.c	2005-05-21 13:10:26.000000000 +0200
+++ exec/nfsmount/main.c	2005-05-21 14:32:12.000000000 +0200
@@ -14,8 +14,6 @@
 #include <sys/wait.h>
 #include <unistd.h>
 
-#include <linux/nfs_mount.h>
-
 #include "nfsmount.h"
 #include "sunrpc.h"
 #include "dummypmap.h"
Index: exec/nfsmount/nfsmount.h
===================================================================
--- exec.orig/nfsmount/nfsmount.h	2005-05-21 14:37:18.000000000 +0200
+++ exec/nfsmount/nfsmount.h	2005-05-21 14:38:15.000000000 +0200
@@ -1,8 +1,64 @@
 /*
  * nfsmount/nfsmount.h
+ *
+ * We inline the contents of linux/nfs_mount.h, minus
+ * the include of linux/in.h, because of style conflicts
+ * between netinet/in.h and linux/in.h.
+ * Inlined stuff is Copyright (C) 1992  Rick Sladkey
+ */
+
+#include <sys/types.h>
+#include <linux/types.h>
+#include <linux/nfs.h>
+#include <linux/nfs2.h>
+#include <linux/nfs3.h>
+
+/*
+ * WARNING!  Do not delete or change the order of these fields.  If
+ * a new field is required then add it to the end.  The version field
+ * tracks which fields are present.  This will ensure some measure of
+ * mount-to-kernel version compatibility.  Some of these aren't used yet
+ * but here they are anyway.
  */
+#define NFS_MOUNT_VERSION	5
+
+struct nfs_mount_data {
+	int		version;		/* 1 */
+	int		fd;			/* 1 */
+	struct nfs2_fh	old_root;		/* 1 */
+	int		flags;			/* 1 */
+	int		rsize;			/* 1 */
+	int		wsize;			/* 1 */
+	int		timeo;			/* 1 */
+	int		retrans;		/* 1 */
+	int		acregmin;		/* 1 */
+	int		acregmax;		/* 1 */
+	int		acdirmin;		/* 1 */
+	int		acdirmax;		/* 1 */
+	struct sockaddr_in addr;		/* 1 */
+	char		hostname[256];		/* 1 */
+	int		namlen;			/* 2 */
+	unsigned int	bsize;			/* 3 */
+	struct nfs3_fh	root;			/* 4 */
+	int		pseudoflavor;		/* 5 */
+};
+
+/* bits in the flags field */
 
-#include <linux/nfs_mount.h>
+#define NFS_MOUNT_SOFT		0x0001	/* 1 */
+#define NFS_MOUNT_INTR		0x0002	/* 1 */
+#define NFS_MOUNT_SECURE	0x0004	/* 1 */
+#define NFS_MOUNT_POSIX		0x0008	/* 1 */
+#define NFS_MOUNT_NOCTO		0x0010	/* 1 */
+#define NFS_MOUNT_NOAC		0x0020	/* 1 */
+#define NFS_MOUNT_TCP		0x0040	/* 2 */
+#define NFS_MOUNT_VER3		0x0080	/* 3 */
+#define NFS_MOUNT_KERBEROS	0x0100	/* 3 */
+#define NFS_MOUNT_NONLM		0x0200	/* 3 */
+#define NFS_MOUNT_BROKEN_SUID	0x0400	/* 4 */
+#define NFS_MOUNT_STRICTLOCK	0x1000	/* reserved for NFSv4 */
+#define NFS_MOUNT_SECFLAVOUR	0x2000	/* 5 */
+#define NFS_MOUNT_FLAGMASK	0xFFFF
 
 extern __u32 nfs_port;
 

--



More information about the klibc mailing list