Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 30 Dec 2006 22:52:12 -0800
From:      perryh@pluto.rain.com
To:        freebsd-hackers@freebsd.org
Subject:   how to deal with const
Message-ID:  <45975e1c.zZgcyHPeHeBwZNlg%perryh@pluto.rain.com>

next in thread | raw e-mail | index | archive | help
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).

What is the accepted method of dealing with this sort of thing?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?45975e1c.zZgcyHPeHeBwZNlg%perryh>