Replaced evil pointer magic with offsetof()
authorNikolaus Rath <Nikolaus@rath.org>
Thu, 12 Jan 2017 23:17:54 +0000 (15:17 -0800)
committerNikolaus Rath <Nikolaus@rath.org>
Thu, 12 Jan 2017 23:19:04 +0000 (15:19 -0800)
This triggered undefined behaviour warnings from UBSan.

example/cuse.c

index 15e2d37312fa1eb31144a2e32470c7a537f78fb8..cfbf7537ef8931288356888f4bbda04b27ebcd54 100644 (file)
@@ -141,11 +141,11 @@ static void fioc_do_rw(fuse_req_t req, void *addr, const void *in_buf,
 
        /* prepare size outputs */
        out_iov[0].iov_base =
-               addr + (unsigned long)&(((struct fioc_rw_arg *)0)->prev_size);
+               addr + offsetof(struct fioc_rw_arg, prev_size);
        out_iov[0].iov_len = sizeof(arg->prev_size);
 
        out_iov[1].iov_base =
-               addr + (unsigned long)&(((struct fioc_rw_arg *)0)->new_size);
+               addr + offsetof(struct fioc_rw_arg, new_size);
        out_iov[1].iov_len = sizeof(arg->new_size);
 
        /* prepare client buf */