misc/149014: make ZFS makefiles use the libraries from build directory

Tuco tuco.xyz at gmail.com
Tue Jul 27 23:30:02 UTC 2010


>Number:         149014
>Category:       misc
>Synopsis:       make ZFS makefiles use the libraries from build directory
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jul 27 23:30:01 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Tuco
>Release:        Debian GNU/kFreeBSD
>Organization:
>Environment:
>Description:

Hello

A few declarations in ZFS libraries/utilities collide with Glibc namespace, making it impossible to compile on GNU environment.

Here is a patch that either renames them or avoids the conflict with preprocessor checks.

>How-To-Repeat:

>Fix:


Patch attached with submission follows:

diff -ur cddl/compat/opensolaris/include/solaris.h cddl/compat/opensolaris/include/solaris.h
--- cddl/compat/opensolaris/include/solaris.h	2008-04-22 03:43:00.000000000 -0400
+++ cddl/compat/opensolaris/include/solaris.h	2010-07-26 19:18:00.428981335 -0400
@@ -5,6 +5,9 @@
 
 #include <sys/ccompile.h>
 
+/* GNU libc has its own dirent64 declaration */
+#ifndef __GLIBC__
 #define	dirent64	dirent
+#endif
 
 #endif	/* !_SOLARIS_H_ */
diff -ur cddl/compat/opensolaris/misc/fsshare.c cddl/compat/opensolaris/misc/fsshare.c
--- cddl/compat/opensolaris/misc/fsshare.c	2008-03-28 18:16:18.000000000 -0400
+++ cddl/compat/opensolaris/misc/fsshare.c	2010-07-26 19:48:58.456848324 -0400
@@ -67,7 +70,7 @@
  * mountpoint specified in the 'skip' argument.
  */
 static char *
-getline(FILE *fd, const char *skip)
+xgetline(FILE *fd, const char *skip)
 {
 	static char line[MAXLINESIZE];
 	size_t len, skiplen;
@@ -198,7 +201,7 @@
 
 	/* Place big, fat warning at the begining of the file. */
 	fprintf(newfd, "%s", FILE_HEADER);
-	while (oldfd != NULL && (line = getline(oldfd, mountpoint)) != NULL)
+	while (oldfd != NULL && (line = xgetline(oldfd, mountpoint)) != NULL)
 		fprintf(newfd, "%s\n", line);
 	if (oldfd != NULL && ferror(oldfd) != 0) {
 		error = ferror(oldfd);
diff -ur cddl/compat/opensolaris/misc/mnttab.c cddl/compat/opensolaris/misc/mnttab.c
--- cddl/compat/opensolaris/misc/mnttab.c	2008-11-17 15:49:29.000000000 -0500
+++ cddl/compat/opensolaris/misc/mnttab.c	2010-07-26 18:46:46.354168277 -0400
@@ -63,7 +63,7 @@
 }
 
 char *
-hasmntopt(struct mnttab *mnt, char *opt)
+solaris_hasmntopt(struct mnttab *mnt, char *opt)
 {
 	char tmpopts[MNT_LINE_MAX];
 	char *f, *opts = tmpopts;
diff -ur cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
--- cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c	2008-11-17 15:49:29.000000000 -0500
+++ cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c	2010-07-26 18:46:46.353151407 -0400
@@ -2166,11 +2166,11 @@
 	case ZFS_PROP_NBMAND:
 		*val = getprop_uint64(zhp, prop, source);
 
-		if (hasmntopt(&mnt, mntopt_on) && !*val) {
+		if (solaris_hasmntopt(&mnt, mntopt_on) && !*val) {
 			*val = B_TRUE;
 			if (src)
 				*src = ZPROP_SRC_TEMPORARY;
-		} else if (hasmntopt(&mnt, mntopt_off) && *val) {
+		} else if (solaris_hasmntopt(&mnt, mntopt_off) && *val) {
 			*val = B_FALSE;
 			if (src)
 				*src = ZPROP_SRC_TEMPORARY;
diff -ur cddl/contrib/opensolaris/lib/libzpool/common/kernel.c cddl/contrib/opensolaris/lib/libzpool/common/kernel.c
--- cddl/contrib/opensolaris/lib/libzpool/common/kernel.c	2009-07-09 16:22:05.000000000 -0400
+++ cddl/contrib/opensolaris/lib/libzpool/common/kernel.c	2010-07-26 18:46:46.363308187 -0400
@@ -463,7 +463,7 @@
 /*ARGSUSED*/
 int
 vn_rdwr(int uio, vnode_t *vp, void *addr, ssize_t len, offset_t offset,
-	int x1, int x2, rlim64_t x3, void *x4, ssize_t *residp)
+	int x1, int x2, solaris_rlim64_t x3, void *x4, ssize_t *residp)
 {
 	ssize_t iolen, split;
 
diff -ur cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h
--- cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h	2009-07-09 16:22:05.000000000 -0400
+++ cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h	2010-07-26 18:46:46.368459207 -0400
@@ -105,8 +105,8 @@
 
 #define	ZFS_LOG(...)	do {  } while (0)
 
-typedef u_longlong_t      rlim64_t;
-#define	RLIM64_INFINITY	((rlim64_t)-3)
+typedef u_longlong_t      solaris_rlim64_t;
+#define	RLIM64_INFINITY	((solaris_rlim64_t)-3)
 
 #ifdef ZFS_DEBUG
 extern void dprintf_setup(int *argc, char **argv);
@@ -438,7 +438,7 @@
 extern int vn_openat(char *path, int x1, int oflags, int mode, vnode_t **vpp,
     int x2, int x3, vnode_t *vp, int fd);
 extern int vn_rdwr(int uio, vnode_t *vp, void *addr, ssize_t len,
-    offset_t offset, int x1, int x2, rlim64_t x3, void *x4, ssize_t *residp);
+    offset_t offset, int x1, int x2, solaris_rlim64_t x3, void *x4, ssize_t *residp);
 extern void vn_close(vnode_t *vp, int openflag, cred_t *cr, kthread_t *td);
 
 #define	vn_remove(path, x1, x2)		remove(path)
diff -ur sys/cddl/compat/opensolaris/sys/dirent.h sys/cddl/compat/opensolaris/sys/dirent.h
--- sys/cddl/compat/opensolaris/sys/dirent.h	2008-03-28 18:16:18.000000000 -0400
+++ sys/cddl/compat/opensolaris/sys/dirent.h	2010-07-26 19:18:26.928512005 -0400
@@ -32,7 +32,10 @@
 #include_next <sys/dirent.h>
 
 typedef	struct dirent	dirent64_t;
+/* GNU libc has its own dirent64 declaration */
+#ifndef __GLIBC__
 #define	dirent64	dirent
+#endif
 #define	ino64_t		ino_t
 
 #define	d_ino	d_fileno
diff -ur sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	2009-10-12 16:36:55.000000000 -0400
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	2010-07-26 18:46:46.380558137 -0400
@@ -677,7 +677,7 @@
 zfs_write(vnode_t *vp, uio_t *uio, int ioflag, cred_t *cr, caller_context_t *ct)
 {
 	znode_t		*zp = VTOZ(vp);
-	rlim64_t	limit = MAXOFFSET_T;
+	solaris_rlim64_t	limit = MAXOFFSET_T;
 	ssize_t		start_resid = uio->uio_resid;
 	ssize_t		tx_bytes;
 	uint64_t	end_size;


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list