This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH roland/parambits] split sys/param.h into bits/param.h


There is a lot of duplication across the sys/param.h implementations.
Only a little really needs to vary by operating system.
This makes sys/param.h a first-class shared header and splits out
bits/param.h for the OS-dependent parts.

Compile-tested on x86_64-linux-gnu.  This does change the effect of 
#include <sys/param.h> on *-*-linux* configurations a little bit, in
that I harmonized the #include's <sys/param.h> does somewhat.  The
traditional BSD header provided BYTE_ORDER and NSIG, so <endian.h>
and <signal.h> are now included implicitly by <sys/param.h>.

If nobody sees any problems in a few days, I'll merge the branch.


Thanks,
Roland


2012-08-15  Roland McGrath  <roland@hack.frob.com>

	* bits/param.h: New file.
	* misc/sys/param.h: New file.
	* include/sys/param.h: New file.
	* misc/Makefile (headers): Add bits/param.h.
	* sysdeps/generic/sys/param.h: File removed.
	* sysdeps/unix/sysv/linux/bits/param.h: New file.
	* sysdeps/unix/sysv/linux/sys/param.h: File removed.
	* sysdeps/mach/hurd/bits/param.h: New file.
	* sysdeps/mach/hurd/sys/param.h: New file.

diff --git a/bits/param.h b/bits/param.h
new file mode 100644
index 0000000..8a2bc71
--- /dev/null
+++ b/bits/param.h
@@ -0,0 +1,33 @@
+/* Old-style Unix parameters and limits.  Stub version.
+   Copyright (C) 1995-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PARAM_H
+# error "Never use <bits/param.h> directly; include <sys/param.h> instead."
+#endif
+
+/* This header is expected to define a few particular macros.
+
+   The traditional BSD macros that correspond directly to POSIX <limits.h>
+   macros don't need to be defined here if <bits/local_lim.h> defines the
+   POSIX limit macro, as the common <sys/param.h> code will define each
+   traditional name to its POSIX name if available.
+
+   This file should define at least:
+
+        EXEC_PAGESIZE
+*/
diff --git a/include/sys/param.h b/include/sys/param.h
new file mode 100644
index 0000000..7a0cfb1
--- /dev/null
+++ b/include/sys/param.h
@@ -0,0 +1 @@
+#include <misc/sys/param.h>
diff --git a/misc/Makefile b/misc/Makefile
index d1c0a02..a3d10e7 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -25,7 +25,8 @@ headers	:= sys/uio.h bits/uio.h sys/ioctl.h bits/ioctls.h bits/ioctl-types.h \
 	   sys/ptrace.h sys/file.h sys/dir.h sys/cdefs.h \
 	   ar.h a.out.h libgen.h stab.h bits/stab.def sgtty.h \
 	   ttyent.h paths.h sys/reboot.h \
-	   sys/mman.h sys/param.h fstab.h mntent.h search.h err.h error.h \
+	   sys/mman.h sys/param.h bits/param.h \
+	   fstab.h mntent.h search.h err.h error.h \
 	   sys/queue.h sysexits.h syscall.h sys/syscall.h sys/swap.h \
 	   sys/select.h ustat.h sys/ustat.h bits/ustat.h sys/sysinfo.h \
 	   regexp.h bits/select.h bits/mman.h sys/xattr.h \
diff --git a/sysdeps/generic/sys/param.h b/misc/sys/param.h
similarity index 52%
rename from sysdeps/generic/sys/param.h
rename to misc/sys/param.h
index c829e97..0eafd68 100644
--- a/sysdeps/generic/sys/param.h
+++ b/misc/sys/param.h
@@ -1,5 +1,5 @@
-/* Compatibility header for old-style Unix parameters and limits.  Stub version.
-   Copyright (C) 2012 Free Software Foundation, Inc.
+/* Compatibility header for old-style Unix parameters and limits.
+   Copyright (C) 1995-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -17,40 +17,61 @@
    <http://www.gnu.org/licenses/>.  */
 
 #ifndef _SYS_PARAM_H
-
 #define _SYS_PARAM_H    1
-#include <features.h>
 
 #define __need_NULL
 #include <stddef.h>
 
 #include <sys/types.h>
-#include <errno.h>
-#include <signal.h>
-#include <endian.h>
 #include <limits.h>
+#include <endian.h>                     /* Define BYTE_ORDER et al.  */
+#include <signal.h>                     /* Define NSIG.  */
+
+/* This file defines some things in system-specific ways.  */
+#include <bits/param.h>
+
 
+/* BSD names for some <limits.h> values.  */
 
-/* BSD names for some <limits.h> values.  We do not define the BSD names
-   for the values which are not statically limited, such as NOFILE.  */
+#define NBBY		CHAR_BIT
 
-#define NBBY            CHAR_BIT
-#ifdef NGROUPS_MAX
-# define NGROUPS         NGROUPS_MAX
+#if !defined NGROUPS && defined NGROUPS_MAX
+# define NGROUPS	NGROUPS_MAX
 #endif
-#ifdef SYMLOOP_MAX
-# define MAXSYMLINKS     SYMLOOP_MAX
+#if !defined MAXSYMLINKS && defined SYMLOOP_MAX
+# define MAXSYMLINKS	SYMLOOP_MAX
 #endif
-#define CANBSIZ         MAX_CANON /* XXX ? */
-
+#if !defined CANBSIZ && defined MAX_CANON
+# define CANBSIZ	MAX_CANON
+#endif
+#if !defined MAXPATHLEN && defined PATH_MAX
+# define MAXPATHLEN	PATH_MAX
+#endif
+#if !defined NOFILE && defined OPEN_MAX
+# define NOFILE		OPEN_MAX
+#endif
+#ifndef NCARGS
+# ifdef ARG_MAX
+#  define NCARGS	ARG_MAX
+# else
 /* ARG_MAX is unlimited, but we define NCARGS for BSD programs that want to
    compare against some fixed limit.  */
-#define NCARGS          INT_MAX
+# define NCARGS		INT_MAX
+# endif
+#endif
 
 
 /* Magical constants.  */
-#define NOGROUP 65535           /* Marker for empty group set member.  */
-#define NODEV   ((dev_t) -1)    /* Non-existent device.  */
+#ifndef NOGROUP
+# define NOGROUP	65535     /* Marker for empty group set member.  */
+#endif
+#ifndef NODEV
+# define NODEV		((dev_t) -1)    /* Non-existent device.  */
+#endif
+
+
+/* Unit of `st_blocks'.  */
+#define DEV_BSIZE       512
 
 
 /* Bit map related macros.  */
@@ -61,18 +82,20 @@
 
 /* Macros for counting and rounding.  */
 #ifndef howmany
-# define howmany(x, y)  (((x)+((y)-1))/(y))
+# define howmany(x, y)  (((x) + ((y) - 1)) / (y))
+#endif
+#ifdef __GNUC__
+# define roundup(x, y)  (__builtin_constant_p (y) && powerof2 (y)             \
+                         ? (((x) + (y) - 1) & ~((y) - 1))                     \
+                         : ((((x) + ((y) - 1)) / (y)) * (y)))
+#else
+# define roundup(x, y)  ((((x) + ((y) - 1)) / (y)) * (y))
 #endif
-#define roundup(x, y)   ((((x)+((y)-1))/(y))*(y))
-#define powerof2(x)     ((((x)-1)&(x))==0)
+#define powerof2(x)     ((((x) - 1) & (x)) == 0)
 
 /* Macros for min/max.  */
 #define MIN(a,b) (((a)<(b))?(a):(b))
 #define MAX(a,b) (((a)>(b))?(a):(b))
 
 
-/* Unit of `st_blocks'.  */
-#define DEV_BSIZE       512
-
-
-#endif   /* sys/param.h */
+#endif  /* sys/param.h */
diff --git a/sysdeps/mach/hurd/sys/param.h b/sysdeps/mach/hurd/bits/param.h
similarity index 73%
rename from sysdeps/mach/hurd/sys/param.h
rename to sysdeps/mach/hurd/bits/param.h
index e58d517..d52c1ed 100644
--- a/sysdeps/mach/hurd/sys/param.h
+++ b/sysdeps/mach/hurd/bits/param.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 1993-2012 Free Software Foundation, Inc.
+/* Old-style Unix parameters and limits.  Hurd version.
+   Copyright (C) 1993-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -15,6 +16,10 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#ifndef _SYS_PARAM_H
+# error "Never use <bits/param.h> directly; include <sys/param.h> instead."
+#endif
+
 /* This file is deprecated and is provided only for compatibility with
    Unix systems.  It is unwise to include this file on programs which
    are intended only for GNU systems.
@@ -52,24 +57,6 @@
  */
 
 
-#ifndef	_SYS_PARAM_H
-
-#define	_SYS_PARAM_H	1
-#include <features.h>
-
-#define __need_NULL
-#include <stddef.h>
-
-#include <sys/types.h>
-#include <errno.h>
-#include <signal.h>
-#include <endian.h>
-#include <limits.h>
-#ifdef notyet
-# include <ufs/param.h>
-#endif
-
-
 /* What versions of BSD we are compatible with.  */
 #define	BSD	199306		/* System version (year & month). */
 #define BSD4_3	1
@@ -81,46 +68,12 @@
 /* BSD names for some <limits.h> values.  We do not define the BSD names
    for the values which are not statically limited, such as NOFILE.  */
 
-#define	NBBY		CHAR_BIT
-#define	NGROUPS		NGROUPS_MAX
-#define	CANBSIZ		MAX_CANON /* XXX ? */
-
-/* ARG_MAX is unlimited, but we define NCARGS for BSD programs that want to
-   compare against some fixed limit.  */
-#define	NCARGS		INT_MAX
 
 /* There is nothing quite equivalent in GNU to Unix "mounts", but there is
    no limit on the number of simultaneously attached filesystems.  */
 #define NMOUNT		INT_MAX
 
 
-/* Magical constants.  */
-#define	NOGROUP	65535		/* Marker for empty group set member.  */
-#define	NODEV	((dev_t) -1)	/* Non-existent device.  */
-
-
-/* Bit map related macros.  */
-#define	setbit(a,i)	((a)[(i)/NBBY] |= 1<<((i)%NBBY))
-#define	clrbit(a,i)	((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
-#define	isset(a,i)	((a)[(i)/NBBY] & (1<<((i)%NBBY)))
-#define	isclr(a,i)	(((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
-
-/* Macros for counting and rounding.  */
-#ifndef howmany
-# define howmany(x, y)	(((x)+((y)-1))/(y))
-#endif
-#define	roundup(x, y)	((((x)+((y)-1))/(y))*(y))
-#define powerof2(x)	((((x)-1)&(x))==0)
-
-/* Macros for min/max.  */
-#define	MIN(a,b) (((a)<(b))?(a):(b))
-#define	MAX(a,b) (((a)>(b))?(a):(b))
-
-
-/* Unit of `st_blocks'.  */
-#define DEV_BSIZE       512
-
-
 /* Scale factor for scaled integers used to count %cpu time and load avgs.
 
    The number of CPU `tick's that map to a unique `%age' can be expressed
diff --git a/sysdeps/unix/sysv/linux/bits/param.h b/sysdeps/unix/sysv/linux/bits/param.h
new file mode 100644
index 0000000..36ca088
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/bits/param.h
@@ -0,0 +1,42 @@
+/* Old-style Unix parameters and limits.  Linux version.
+   Copyright (C) 1995-2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PARAM_H
+# error "Never use <bits/param.h> directly; include <sys/param.h> instead."
+#endif
+
+#ifndef ARG_MAX
+# define __undef_ARG_MAX
+#endif
+
+#include <linux/limits.h>
+#include <linux/param.h>
+
+/* The kernel headers define ARG_MAX.  The value is wrong, though.  */
+#ifdef __undef_ARG_MAX
+# undef ARG_MAX
+# undef __undef_ARG_MAX
+#endif
+
+#define	MAXSYMLINKS	20
+
+/* The following are not really correct but it is a value we used for a
+   long time and which seems to be usable.  People should not use NOFILE
+   and NCARGS anyway.  */
+#define NOFILE		256
+#define	NCARGS		131072
diff --git a/sysdeps/unix/sysv/linux/sys/param.h b/sysdeps/unix/sysv/linux/sys/param.h
deleted file mode 100644
index c419b86..0000000
--- a/sysdeps/unix/sysv/linux/sys/param.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Copyright (C) 1995-1997,2000,2001,2003,2008,2011
-   Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _SYS_PARAM_H
-#define _SYS_PARAM_H	1
-
-#ifndef ARG_MAX
-# define __undef_ARG_MAX
-#endif
-
-#include <limits.h>
-#include <linux/limits.h>
-#include <linux/param.h>
-
-/* The kernel headers defines ARG_MAX.  The value is wrong, though.  */
-#ifdef __undef_ARG_MAX
-# undef ARG_MAX
-# undef __undef_ARG_MAX
-#endif
-
-/* BSD names for some <limits.h> values.  */
-
-#define	NBBY		CHAR_BIT
-#ifndef	NGROUPS
-# define NGROUPS	NGROUPS_MAX
-#endif
-#define	MAXSYMLINKS	20
-#define	CANBSIZ		MAX_CANON
-#define MAXPATHLEN	PATH_MAX
-/* The following are not really correct but it is a value we used for a
-   long time and which seems to be usable.  People should not use NOFILE
-   and NCARGS anyway.  */
-#define NOFILE		256
-#define	NCARGS		131072
-
-
-#include <sys/types.h>
-
-/* Bit map related macros.  */
-#define	setbit(a,i)	((a)[(i)/NBBY] |= 1<<((i)%NBBY))
-#define	clrbit(a,i)	((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
-#define	isset(a,i)	((a)[(i)/NBBY] & (1<<((i)%NBBY)))
-#define	isclr(a,i)	(((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
-
-/* Macros for counting and rounding.  */
-#ifndef howmany
-# define howmany(x, y)	(((x) + ((y) - 1)) / (y))
-#endif
-#ifdef __GNUC__
-# define roundup(x, y)	(__builtin_constant_p (y) && powerof2 (y)	      \
-			 ? (((x) + (y) - 1) & ~((y) - 1))		      \
-			 : ((((x) + ((y) - 1)) / (y)) * (y)))
-#else
-# define roundup(x, y)	((((x) + ((y) - 1)) / (y)) * (y))
-#endif
-#define powerof2(x)	((((x) - 1) & (x)) == 0)
-
-/* Macros for min/max.  */
-#define	MIN(a,b) (((a)<(b))?(a):(b))
-#define	MAX(a,b) (((a)>(b))?(a):(b))
-
-
-/* Unit of `st_blocks'.  */
-#define DEV_BSIZE       512
-
-
-#endif	/* sys/param.h */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]