svn commit: r188098 - head/lib/libc/string

M. Warner Losh imp at bsdimp.com
Wed Feb 4 09:33:29 PST 2009


In message: <20090204154414.1949765y56lfhi80 at webmail.leidinger.net>
            Alexander Leidinger <Alexander at leidinger.net> writes:
: Quoting Bruce Evans <brde at optusnet.com.au> (from Wed, 4 Feb 2009  
: 22:27:59 +1100 (EST)):
: 
: > On Tue, 3 Feb 2009, Christoph Mallon wrote:
: >
: >> Warner Losh schrieb:
: >>> Modified: head/lib/libc/string/strmode.c
: >>> ==============================================================================
: >>> --- head/lib/libc/string/strmode.c	Tue Feb  3 20:01:51 2009 (r188097)
: >>> +++ head/lib/libc/string/strmode.c	Tue Feb  3 20:25:36 2009 (r188098)
: >>> @@ -38,7 +38,7 @@ __FBSDID("$FreeBSD$");
: >>> #include <string.h>
: >>>  void
: >>> -strmode(mode_t mode, char *p)
: >>> +strmode(/* mode_t */ int mode, char *p)
: >>> {
: >>> 	 /* print type */
: >>> 	switch (mode & S_IFMT) {
: >>
: >> The manpage states that the first parameter of strmode() is a  
: >> mode_t. What's wrong - the implementation (both in header and  
: >> definition) or the documentation?
: >
: > The man page is wrong.  strtomode() should take an int arg (actually
: > the default (unary) promotion of a mode_t) for the the same reasons
: > that memchr() does -- because these interfaces should be usable by K&R
: > compilers and/or by standard C compilers without a protoype in scope.
: > Even if this is no longer required, binary compatibily requires the
: > interfaces to be the same as the ones that used to be required.  The
: > requirement for binary compatibility also prevents "fixing" interfaces
: > to be "ANSI" in headers (if you "fix" prototypes there then you will
: > get obscure runtime errors instead of tinderbox errors).
: 
: Is this also true for the current use of symbol versioning in our  
: libc? I thought this is supposed to "fix" this problem (assuming we  
: add an UPDATING entry that users have to make sure that they to a full  
: installworld to habe the includes and the lib in sync)?

Maybe, but it is a problem worth fixing?  What we have now is correct
for both cases (prototypes and no prototypes) on all the architectures
that FreeBSD supports (or even kinda supports).  Does it make sense to
add a lot of extra hair just to have a slightly more proper prototype?

Warner


More information about the svn-src-all mailing list