Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 Aug 2018 16:41:35 -0500
From:      Benjamin Kaduk <bjkfbsd@gmail.com>
To:        "cem@FreeBSD.org" <cem@freebsd.org>
Cc:        src-committers <src-committers@freebsd.org>, svn-src-all@freebsd.org,  svn-src-head@freebsd.org
Subject:   Re: svn commit: r337535 - head/sbin/init
Message-ID:  <CAJ5_RoC5s-oVrkPx%2BCcF5oRhzqYniGcaF6hEZN7oFLonrV7Vfw@mail.gmail.com>
In-Reply-To: <CAG6CVpU8jwQJiNsf6B5Gq75QHEoGaT4K-dCK6Drc59ETPH4VRw@mail.gmail.com>
References:  <201808091217.w79CH3gO096411@repo.freebsd.org> <CAJ5_RoBVWZgMgoNGkTkCMB9kU5Ci1GcN-p_Ad-FMMwhO%2BQX5VA@mail.gmail.com> <CAG6CVpU8jwQJiNsf6B5Gq75QHEoGaT4K-dCK6Drc59ETPH4VRw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Aug 9, 2018 at 11:03 AM, Conrad Meyer <cem@freebsd.org> wrote:

> On Thu, Aug 9, 2018 at 5:52 AM, Benjamin Kaduk <bjkfbsd@gmail.com> wrote:
> > On Thu, Aug 9, 2018 at 7:17 AM, Edward Tomasz Napierala <
> trasz@freebsd.org>
> > wrote:
> >>   Use NULLs instead of casted zeroes, for consistency.
> >
> > It's probably helpful to note explicitly that these are not in argument=
s
> to
> > varargs functions,
>
> I don't think it's helpful.
>
> > in which case the explicit cast is needed in order to produce a program
> that
> > will have
> > correct behavior on all compliant compilers/systems.
>
> Here "compliant" means "minimally compliant to the C standard."  Use
> of NULL in varargs is functionally correct on all FreeBSD systems.
>
> >  (We do define NULL to
> > be a zero-with-cast,
> > but programs
>
> (Ones that care about portability to weird systems.)  I don't think
> BSD's 500 line init =E2=80=94 hyper local to FreeBSD =E2=80=94 is a stron=
g candidate
> for portability.
>
> > should not assume that NULL will be of pointer type -- "An
> > integer constant
> > expression with the value 0, or such an expression cast to type void *,
> is
> > called a null pointer constant".)
>
> Right.  The problem only arises when both conditions are met:
>
> 1. The system's varargs representation is smaller than the pointer
> representation, and
> 2. The runtime headers do not defined NULL as a pointer-typed value.
> (3. The function being invoked is actually varargs?)
>
> Neither is true on FreeBSD and v7-style init is not a useful place to
> call for portability.
>

I don't really feel a need to continue the discussion that was already
started in response
to  r336835 (in addition to the current thread), so I'll limit myself to
asking whether we
want to be writing standard C or a FreeBSD-specific dialect of C.  My
understanding was
that we had some experience with the latter (e.g., heavy patching of the
compiler) and
it ended up with us in a bad place, which would tend to support writing
standard C or
as close to it as we can.  (Yes, I know that we have non-standard printf
specifiers and the like.)

-Ben



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ5_RoC5s-oVrkPx%2BCcF5oRhzqYniGcaF6hEZN7oFLonrV7Vfw>