Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Nov 2012 18:03:57 +1100 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Eitan Adler <eadler@FreeBSD.org>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: svn commit: r243321 - head/usr.sbin/edquota
Message-ID:  <20121120172226.R1115@besplex.bde.org>
In-Reply-To: <201211200212.qAK2C1sT097754@svn.freebsd.org>
References:  <201211200212.qAK2C1sT097754@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 20 Nov 2012, Eitan Adler wrote:

> Log:
>  Remove unneeded includes.
>
>  Tested with "make universe"; there are no conditional features.

"make universe" can't find such features.  Except inversely -- when it
doesn't find them, it usually means that there is a bug in the headers.

> Modified: head/usr.sbin/edquota/edquota.c
> ==============================================================================
> --- head/usr.sbin/edquota/edquota.c	Tue Nov 20 01:57:21 2012	(r243320)
> +++ head/usr.sbin/edquota/edquota.c	Tue Nov 20 02:12:01 2012	(r243321)
> @@ -49,8 +49,6 @@ __FBSDID("$FreeBSD$");
>  * Disk quota editor.
>  */
>
> -#include <sys/param.h>
> -#include <sys/stat.h>
> #include <sys/file.h>
> #include <sys/mount.h>
> #include <sys/wait.h>
>

This removes used includes.

<sys/param.h> is a documented prerequisite of <sys/mount.h>.  sys/mount.h
has some pollution but not that until recently.  <sys/mount.h> has included
<sys/ucred.h> for a long time, and someone recently added the following
disgusting pollution to <sys/ucred.h>:
- <sys/ucred.h> includes <bsm/audit.h>
- <bsm/audit.h> includes <sys/param.h> and all of its standard pollution
   According to cc -E -MM, this is:

% f.o: f.c /usr/include/bsm/audit.h /usr/include/sys/param.h \
                                     ^^^^^^^^^^^^^^^^^^^^^^^^

Polluting headers are underlined.

%   /usr/include/sys/_null.h /usr/include/sys/types.h \
                              ^^^^^^^^^^^^^^^^^^^^^^^^

<bsm/audit.h> is of low quality.  It also includes <sys/types.h> after
<sys/param.h>.  This is a style bug.  <sys/types.h> is standard pollution
in <sys/param.h>.

%   /usr/include/sys/cdefs.h /usr/include/machine/endian.h \
%   /usr/include/x86/endian.h /usr/include/sys/_types.h \
%   /usr/include/machine/_types.h /usr/include/x86/_types.h \
%   /usr/include/sys/_pthreadtypes.h /usr/include/sys/_stdint.h \
%   /usr/include/sys/select.h /usr/include/sys/_sigset.h \
     ^^^^^^^^^^^^^^^^^^^^^^^^^

Standard pollution in <sys/types.h>.

%   /usr/include/sys/_timeval.h /usr/include/sys/timespec.h \
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^

Standard pollution in <sys/types.h>.

%   /usr/include/sys/_timespec.h /usr/include/sys/syslimits.h \
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
%   /usr/include/sys/signal.h /usr/include/machine/_limits.h \
     ^^^^^^^^^^^^^^^^^^^^^^^^^

Standard pollutions in <sys/param.h>.

%   /usr/include/x86/_limits.h /usr/include/machine/signal.h \
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
%   /usr/include/machine/trap.h /usr/include/x86/trap.h \
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^

Standard pollutions in <sys/signal.h> and thus in <sys/param.h>.

%   /usr/include/machine/param.h /usr/include/machine/_align.h \
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
%   /usr/include/x86/_align.h /usr/include/sys/limits.h
                               ^^^^^^^^^^^^^^^^^^^^^^^^^

Standard pollutions in <sys/param.h>.

To remove a single header, you must know all the standard pollutions and
check cc -E -MM output to verify that no nonstandard pollutions are
depended on.

That was for <sys/mount.h>.  Now for some others.

> -#include <sys/param.h>
> -#include <sys/stat.h>
> #include <sys/file.h>

<sys/types.h> a is documented prerequisite for <sys/stat.h>.  It was
correct to get it via <sys/param.h>.  However, <sys/stat.h> is a POSIX
header.  POSIX required <sys/types.h> before <sys/stat.h> in 1988, but
removed this requirement in 2001 or before.  FreeBSD is slowly catching
up with this:
- FreeBSD <sys/stat.h> has always been massively polluted by including
   <sys/time.h> and all if its pollution (which includes <sys/types.h>.
   The polluting <sys/time.h> became unnecessary in about 1995 and is
   mostly fixed in my version (I include <sys/timespec.h> instead).
- FreeBSD man pages were originally very inconsistent about documenting
   the <sys/types.h> prereq.  It wasn't ever a prereq in FreeBSD, but was
   required for portability.  None documented this of course.
- At about the same time that POSIX removed the prereq, lots of man pages
   were "fixed" to document the old POSIX prereq.
- man pages (e.g., stat(2)) still document the old POSIX prereq.  More code
   than before probably doesn't satisfy this.

<sys/file.h> is documented as having no prereqs (in flock(2)).  It
satisfies this by polluting itself with <sys/types.h> and other
includes.  The pollution is not documented of course.

So this commit is correct for <sys/stat.h> and <sys/file.h> except it
depends on undocumented details for the former.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121120172226.R1115>