svn commit: r188080 - head/lib/libc/string
Christoph Mallon
christoph.mallon at gmx.de
Tue Feb 3 12:28:53 PST 2009
Daniel Gerzo schrieb:
> Author: danger (doc committer)
> Date: Tue Feb 3 17:58:20 2009
> New Revision: 188080
> URL: http://svn.freebsd.org/changeset/base/188080
>
> Log:
> - ANSIfy function definitions
> - use nul when we are looking for a terminating character where appropriate
>
> Approved by: imp
[...]
> Modified: head/lib/libc/string/memchr.c
> ==============================================================================
> --- head/lib/libc/string/memchr.c Tue Feb 3 17:13:37 2009 (r188079)
> +++ head/lib/libc/string/memchr.c Tue Feb 3 17:58:20 2009 (r188080)
> @@ -39,10 +39,7 @@ __FBSDID("$FreeBSD$");
> #include <string.h>
>
> void *
> -memchr(s, c, n)
> - const void *s;
> - unsigned char c;
> - size_t n;
> +memchr(const void *s, unsigned char c, size_t n)
> {
> if (n != 0) {
> const unsigned char *p = s;
K&R style function definitions work slightly different than ANSI.
void f(x)
char x;
{}
fits to the prototype declaration
void f(int x);
int in the prototype because it has to fit to the default promoted type
of the parameter of the K&R function definition!
So just moving types < int from the K&R declaration list into the
parameter list will break things (as it does here with memchr(), because
the prototype declaration correctly uses type int).
Conversely void g(char x); void g(x) char x; {} are NOT compatible, but
GCC incorrectly accepts this.
More information about the svn-src-head
mailing list