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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to