Date: Tue, 3 Apr 2007 14:39:51 +1200 From: Andrew Thompson <thompsa@freebsd.org> To: freebsd-hackers@freebsd.org Subject: Re: hash.h warnings Message-ID: <20070403023951.GA40811@heff.fud.org.nz> In-Reply-To: <3AD42FD0-08D2-4417-B8B4-EEC810B4F3F2@u.washington.edu> References: <20070325083805.GA68655@heff.fud.org.nz> <3AD42FD0-08D2-4417-B8B4-EEC810B4F3F2@u.washington.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
--/9DWx/yDrRhgMJTb Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sun, Mar 25, 2007 at 03:18:42AM -0700, Garrett Cooper wrote: > On Mar 25, 2007, at 1:38 AM, Andrew Thompson wrote: > > >Hi, > > > > > >There was a discussion late last year about how to fix the warnings in > >sys/sys/hash.h. > > > >http://lists.freebsd.org/pipermail/freebsd-net/2006-October/ > >012098.html > > > >@/sys/hash.h: In function `hash32_stre': > >@/sys/hash.h:97: warning: cast discards qualifiers from pointer > >target type > >@/sys/hash.h: In function `hash32_strne': > >@/sys/hash.h:116: warning: cast discards qualifiers from pointer > >target type > > After looking at the source it appears that part of the problem stems > from the fact that p is an unsigned char pointer, where ep is a > signed char double pointer. So you're losing some precision in the > process (hence where the error's coming from I believe). > > So, if you modified buf (the pointer that p is pointing to) or ep to > be compatible with one another, you probably wouldn't get this warning.. I have come up with this patch, can anyone tell me if its correct. There are no consumers of hash32_stre or hash32_strne in the src tree or openbgpd/openospfd which hash.h was imported for. Andrew --/9DWx/yDrRhgMJTb Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="hash.diff" Index: sys/sys/hash.h =================================================================== RCS file: /home/ncvs/src/sys/sys/hash.h,v retrieving revision 1.2 diff -u -p -r1.2 hash.h --- sys/sys/hash.h 12 Mar 2006 15:34:33 -0000 1.2 +++ sys/sys/hash.h 3 Apr 2007 02:31:04 -0000 @@ -86,7 +86,7 @@ hash32_strn(const void *buf, size_t len, * namei() hashing of path name parts. */ static __inline uint32_t -hash32_stre(const void *buf, int end, char **ep, uint32_t hash) +hash32_stre(const void *buf, int end, const char **ep, uint32_t hash) { const unsigned char *p = buf; @@ -94,7 +94,7 @@ hash32_stre(const void *buf, int end, ch hash = HASHSTEP(hash, *p++); if (ep) - *ep = (char *)p; + *ep = p; return hash; } @@ -105,7 +105,8 @@ hash32_stre(const void *buf, int end, ch * as a helper for the namei() hashing of path name parts. */ static __inline uint32_t -hash32_strne(const void *buf, size_t len, int end, char **ep, uint32_t hash) +hash32_strne(const void *buf, size_t len, int end, const char **ep, + uint32_t hash) { const unsigned char *p = buf; @@ -113,7 +114,7 @@ hash32_strne(const void *buf, size_t len hash = HASHSTEP(hash, *p++); if (ep) - *ep = (char *)p; + *ep = p; return hash; } Index: share/man/man9/hash.9 =================================================================== RCS file: /home/ncvs/src/share/man/man9/hash.9,v retrieving revision 1.3 diff -u -p -r1.3 hash.9 --- share/man/man9/hash.9 19 Oct 2006 11:03:44 -0000 1.3 +++ share/man/man9/hash.9 3 Apr 2007 02:19:23 -0000 @@ -47,9 +47,9 @@ .Ft uint32_t .Fn hash32_strn "const void *buf" "size_t len" "uint32_t hash" .Ft uint32_t -.Fn hash32_stre "const void *buf" "int end" "char **ep" "uint32_t hash" +.Fn hash32_stre "const void *buf" "int end" "const char **ep" "uint32_t hash" .Ft uint32_t -.Fn hash32_strne "const void *buf" "size_t len" "int end" "char **ep" "uint32_t hash" +.Fn hash32_strne "const void *buf" "size_t len" "int end" "const char **ep" "uint32_t hash" .Sh DESCRIPTION The .Fn hash32 --/9DWx/yDrRhgMJTb--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070403023951.GA40811>