On 18/02/2012 19:11, Jamey Sharp wrote: > On Sat, Feb 18, 2012 at 05:21:24PM +0000, Jon TURNEY wrote: >> Casting a (const char *) to (caddr_t) to assign to iovec.io_base >> seems pointless. caddr_t isn't used anywhere else in xcb or libX11 > > According to the libxcb git history, I replaced (caddr_t) with (char *) > in 2006 to "help DragonFly and Solaris". I'd be fine with this patch if > it explicitly cast to (char *), which I believe suppresses the constness > warning.
Updated patch attached. But you still get a warning that you are discarding constness, because you are :-) Using an explicit (char *) cast just changes the warning from: /opt/wip/jhbuild/git/xorg/lib/libX11/src/xcb_io.c: In function '_XSend': /opt/wip/jhbuild/git/xorg/lib/libX11/src/xcb_io.c:481:18: warning: assignment discards qualifiers from pointer target type /opt/wip/jhbuild/git/xorg/lib/libX11/src/xcb_io.c:483:18: warning: assignment discards qualifiers from pointer target type to: /opt/wip/jhbuild/git/xorg/lib/libX11/src/xcb_io.c: In function '_XSend': /opt/wip/jhbuild/git/xorg/lib/libX11/src/xcb_io.c:481:2: warning: cast discards qualifiers from pointer target type [-Wcast-qual] /opt/wip/jhbuild/git/xorg/lib/libX11/src/xcb_io.c:483:2: warning: cast discards qualifiers from pointer target type [-Wcast-qual] >> Note: there's a warning about dropping constness here, but that's >> going to be unfixable as long as xcb_writev() takes a non-const struct >> iovec as a parameter. > > C's rules regarding const always confuse me, but I'm pretty sure even > that wouldn't help. If the struct iovec is declared const, that just > means XCB won't change where the iov_base pointers point. It doesn't > mean XCB promises to refrain from writing through those pointers. You are correct, I mis-stated the issue here. You are always going to get a warning here because struct iovec can't represent the constness correctly. I'm guessing xcb functions don't modify the iovec itself, so it could be const, but that's a separate issue.
>From 616b7284ee91c39450f98ac5c93a9e719b148ffd Mon Sep 17 00:00:00 2001 From: Jon TURNEY <jon.tur...@dronecode.org.uk> Date: Fri, 28 Oct 2011 11:09:20 -0500 Subject: [PATCH lib/libX11] Don't use caddr_t casts (caddr_t) isn't used anywhere else in xcb or libX11. Cast to (char *) for consistency. Removing this cast allows building for MinGW without patching. v2: Cast to (char *) rather than just dropping the cast Signed-off-by: Jon TURNEY <jon.tur...@dronecode.org.uk> --- src/xcb_io.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/xcb_io.c b/src/xcb_io.c index 0af47d8..300ef57 100644 --- a/src/xcb_io.c +++ b/src/xcb_io.c @@ -478,9 +478,9 @@ void _XSend(Display *dpy, const char *data, long size) vec[0].iov_base = dpy->buffer; vec[0].iov_len = dpy->bufptr - dpy->buffer; - vec[1].iov_base = (caddr_t) data; + vec[1].iov_base = (char *)data; vec[1].iov_len = size; - vec[2].iov_base = (caddr_t) pad; + vec[2].iov_base = (char *)pad; vec[2].iov_len = -size & 3; for(ext = dpy->flushes; ext; ext = ext->next_flush) -- 1.7.9
_______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel