[PATCH 1/3] platform: fix missing strchrnul

Matthias Andree mandree at FreeBSD.org
Wed Nov 27 08:03:30 UTC 2013


Am 27.11.2013 02:53, schrieb Daniel Borca:
> I was testing on Darwin.  More specifically, iPhoneOS6.1.sdk
> 
> Also, http://www.manpagez.com/man/alpha.php?S does not list strchrnul()
> 
> However,
> 
> #if defined(__FreeBSD__) || defined(__APPLE__)
> should really be
> #if defined(__APPLE__)
> 
> that is, the old #ifdef was _wrong_.  Seems like FreeBSD has strchrnul()
> since Feb 13 2013.
> 
> Reference:
> http://lists.freebsd.org/pipermail/svn-src-head/2013-February/044883.html

The whole #ifdef approach is massively broken and prone to mis-guess.

It denies one of the most basic considerations, and that is: operating
systems change over time, and add features missing from earlier
versions.  Looking at the operating system is insufficient.

The code needs to *test for features* of the host OS, rather than
second-guess a snapshot of an operating system that still evolves at the
point in time when some developer looked at a convenient version.

Note I am not saying you need to use a fully-fledged autoconf approach,
lighter-weight alternatives have been seen in the wild, and possibly it
suffices - for FreeBSD - to have a separate header (.h) file that checks
the major FreeBSD version and #defines a few HAVE_SOMEFUNCTION or leaves
it #undef'd, so the actual code can then

// assume this contains the #ifdef __SOMEOS__ ...
// #include <sys/params.h> #ifdef __FreeBSD_version ... #endif:
#include <bb_sysfeatures.h>

#ifdef HAVE_STRCHRNUL

This requires someone with detailed knowledge, or a good amount of time
on his hands, so some concept similar to autoconf might work in more
places with less human work and more machine work during the build.



More information about the busybox mailing list