Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Jan 2001 20:01:45 +1100 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Warner Losh <imp@harmony.village.org>
Cc:        Daniel Eischen <eischen@vigrid.com>, "Jacques A. Vidrine" <n@nectar.com>, arch@FreeBSD.ORG
Subject:   Re: Request For Review: libc/libc_r changes to allow -lc_r 
Message-ID:  <Pine.BSF.4.21.0101221935540.27700-100000@besplex.bde.org>
In-Reply-To: <200101212136.f0LLaM901943@harmony.village.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 21 Jan 2001, Warner Losh wrote:

> In message <Pine.SUN.3.91.1010121162703.14751A-100000@pcnet1.pcnet.com> Daniel Eischen writes:
> : Oops, sorry, I missed the second question.  You need _foo to be
> : used within libc, so that when libc_r/libpthread is linked in,
> : it can provide a replacement function for it.  We also need to
> : determine if the function is a cancellation point or not, so
> : if you just had foo and __sys_foo, libc_r/libpthread would have
> : no way of knowing if foo was called from within libc or from
> : the user application.  The former is not a cancellation point,
> : while the latter is (if foo is read for example).
> 
> I understand that.  I guess my question is why name it _foo instead of
> __foo?  I see the need for the tripartiteness, just not the need to
> call it _foo.

(1) Underscores are verbose and ugly.
(2) _foo is usually sufficient.  _[a-z] is not entirely in the user
    namespace like you are claimed.  From the 1990 ISO standard:
    "All identifiers that begin with an underscore are always
    reserved for use as identifiers with file scope in both the
    ordinary identifier and tag name spaces".  In practice, this
    means that the implementation can use names beginning with
    _[a-z] except for macro names and global variables that are
    used in macros.  E.g., errno must be defined as (*__error())
    and not as (*_error()), since the latter would break the
    standard-conforming application code:
      #include <errno.h>
      void foo(void) { int _error = errno; }
    A single underscore is sufficient in all other cases.  E.g.,
    struct member names are in a nested namespace so they don't
    conflict with variable names at all.  They may still need a
    single underscore so that they don't conflict with macro
    names.
(3) We have some precedence for using _foo.
(4) NetBSD uses _foo (at least in old versions).

Bruce



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0101221935540.27700-100000>