svn commit: r188098 - head/lib/libc/string
Christoph Mallon
christoph.mallon at gmx.de
Tue Feb 3 12:35:20 PST 2009
Warner Losh schrieb:
> Author: imp
> Date: Tue Feb 3 20:25:36 2009
> New Revision: 188098
> URL: http://svn.freebsd.org/changeset/base/188098
>
> Log:
> Fix the functions to match prototypes. The K&R definitions differ
> from the ANSI-C prototype due to the 'int promotion' rule.
>
> Modified:
> head/lib/libc/string/memchr.c
> head/lib/libc/string/strmode.c
> head/lib/libc/string/wmemset.c
>
> Modified: head/lib/libc/string/memchr.c
> ==============================================================================
> --- head/lib/libc/string/memchr.c Tue Feb 3 20:01:51 2009 (r188097)
> +++ head/lib/libc/string/memchr.c Tue Feb 3 20:25:36 2009 (r188098)
> @@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$");
> #include <string.h>
>
> void *
> -memchr(const void *s, unsigned char c, size_t n)
> +memchr(const void *s, int c, size_t n)
> {
> if (n != 0) {
> const unsigned char *p = s;
>
This is not correct either, because now *p (of type unsigned char) gets
compared with c (now type int). The manpage of memchr() states that
"The memchr() function locates the first occurrence of c (converted to
an unsigned char) in string b."
The part in parentheses now is missing. This will break when you pass a
negative number (e.g. -1, which should locate a byte with all bits set)
to memchr().
More information about the svn-src-head
mailing list