AW: Cleaning up include file inconsistencies
Richard Levitte
levitte at openssl.org
Sat Jul 6 16:49:32 UTC 2019
On Sat, 06 Jul 2019 11:50:48 +0200,
Dr. Matthias St. Pierre wrote:
>
> There are more oddities in the organization of the internal header files.
>
> 1) It appears to me that there are three different levels of internal header files
>
> - headers in `include/internal`
For internal things that we want to make available for both libcrypto
and libssl (i.e. they are exported in libcrypto.so)
> - headers in `crypto/include/internal`
For internal things that we only want available inside libcrypto
(i.e. they are NOT exported in libcrypto.so)
> - headers in `crypto/<package>` along with the source files
For things that are private to that sub-system (sorry, "package"
doesn't sound right)
> Having such a finegrained distinction is not the problem, but (at least to me)
> it is not entirely clear which include file goes into which directory.
>
> 2) Some of the header files carry an `_int.h` suffix while others not,
> for seemingly no particular reason.
>
> ~/src/openssl$ find -name '*_int.h'
> ./crypto/crmf/crmf_int.h
Should have been named crmf_locl.h
> ./crypto/include/internal/err_int.h
> ./crypto/include/internal/ess_int.h
> ./crypto/include/internal/ec_int.h
> ./crypto/include/internal/rand_int.h
> ./crypto/include/internal/store_int.h
> ./crypto/include/internal/asn1_int.h
> ./crypto/include/internal/modes_int.h
> ./crypto/include/internal/cryptlib_int.h
> ./crypto/include/internal/bn_int.h
> ./crypto/include/internal/evp_int.h
> ./crypto/include/internal/x509_int.h
The reason for this is to avoid confusion between headers in
crypto/include/internal and headers in include/internal. It's not
quite as necessary as all these names seem to suggest, but we do have
these as an example:
: ; find . -name 'err*.h' | grep /include/internal/
./include/internal/err.h
./crypto/include/internal/err_int.h
> ./crypto/cmp/cmp_int.h
Should have been named cmp_locl.h
> ./crypto/x509/pcy_int.h
Should have been named pcy_locl.h
> In particular for the headers the `include/internal` folder this suffix
> is superfluous, because these files are (or should be) included via
> relative paths. So instead of
>
> #include <openssl/evp.h>
> #include "internal/evp_int.h"
>
> It could just be
>
> #include <openssl/evp.h>
> #include "internal/evp.h"
In most cases, you're right. I suspect "_int" was habitually added to
ensure we know exactly where that header comes from.
Me, I'm wondering if it wouldn't be clearer if we renamed
crypto/include/internal -> crypto/include/crypto, and thereby did
this:
#include "crypto/evp.h"
That, to me, is much clearer than the "_int" suffix.
Cheers,
Richard
--
Richard Levitte levitte at openssl.org
OpenSSL Project http://www.openssl.org/~levitte/
More information about the openssl-project
mailing list