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

Reply via email to