[OpenAFS-devel] Refactoring the Solaris libafs code base

Russ Allbery rra@stanford.edu
Thu, 28 Dec 2006 11:18:34 -0800


Jeffrey Altman <jaltman@secure-endpoints.com> writes:

> Are there any symbols from fcntl.h that are being used by anything other
> than code within AFS_NT40_ENV ?

> I prefer to pull in as few headers as necessary to correctly compile
> the code.

It's a lot of this sort of nonsense:

#ifdef AFS_NT40_ENV
#include <fcntl.h>
#else
#include <sys/file.h>
#include <unistd.h>
#include <sys/stat.h>
#if defined(AFS_SUN5_ENV) || defined(AFS_NBSD_ENV)
#include <sys/fcntl.h>
#include <sys/resource.h>
#endif
#endif

(src/vol/ihandle.c).

The way to write that would be:

#include <fcntl.h>
#ifndef AFS_NT40_ENV
# include <sys/stat.h>
# include <unistd.h>
#endif
#if defined(AFS_SUN5_ENV) || defined(AFS_NBSD_ENV)
# include <sys/resource.h>
#endif

(Of course, even better would be to always use getrlimit and setrlimit for
all Unix platforms, not just Solaris and NetBSD, but that's a larger
change.)

Including <sys/fcntl.h> instead of <fcntl.h> is always wrong.  Including
<sys/file.h> is always wrong unless the code is explicitly calling flock
or referencing one of the LOCK_* constants.

Also note the indentation after the #.  This is valid C89 and even works
in K&R compilers, and it makes this sort of thing *so* much easier to
read.

-- 
Russ Allbery (rra@stanford.edu)             <http://www.eyrie.org/~eagle/>