how to deal with const
Daniel Molina Wegener
dmw at unete.cl
Sun Dec 31 05:04:29 PST 2006
On Sunday 31 December 2006 03:52, perryh at pluto.rain.com wrote:
> I'm working on a kernel project that needs strstr(3).
>
> It looks as if most of the str* functions in libkern are very
> similar, if not identical, to their counterparts in
> libc/string, but that approach does not seem to work for
> strstr (#s added):
>
> 1: char *
> 2: strstr(s, find)
> 3: const char *s, *find;
> 4: {
> 5: char c, sc;
> 6: size_t len;
> 7:
> 8: if ((c = *find++) != 0) {
> 9: len = strlen(find);
> 10: do {
> 11: do {
> 12: if ((sc = *s++) == 0)
> 13: return (NULL);
> 14: } while (sc != c);
> 15: } while (strncmp(s, find, len) != 0);
> 16: s--;
> 17: }
> 18: return ((char *)s);
> 19: }
>
> I get a "warning: cast discards qualifiers from pointer
> target type" on line 18. If I remove the cast, changing it
> to just "return (s);", I get "warning: return discards
> qualifiers from pointer target type" (and because this is the
> kernel, those "warning" messages are actually treated as
> errors).
If you need strstr(3) in your project is allready defined
in libkern. The implementation is identical, but using the
__DECONST macro.
Take a look in /usr/src/sys/libkern/strstr.c for the function
definition and /usr/src/sys/geom/label/g_label.c for usage.
The function prototype is defined in sys/libkern.h
Best regards...
--
. 0 . | Daniel Molina Wegener
. . 0 | dmw at unete dot cl
0 0 0 | FreeBSD User
More information about the freebsd-hackers
mailing list