Compiling the latest, I saw these:

  vsf_ykd.c:349: warning: pointer of type 'void *' used in arithmetic
  cpg.c:692: warning: pointer of type 'void *' used in arithmetic
  cpg.c:696: warning: pointer of type 'void *' used in arithmetic
  cpg.c:878: warning: pointer of type 'void *' used in arithmetic
  cpg.c:888: warning: pointer of type 'void *' used in arithmetic
  votequorum.c:997: warning: pointer of type 'void *' used in arithmetic

since they really do cause trouble in some environments,
I've fixed them like this:

>From d8059e8fb572a4807cf2e9a90eb77c02ef6838c4 Mon Sep 17 00:00:00 2001
From: Jim Meyering <[email protected]>
Date: Tue, 24 Mar 2009 12:01:55 +0100
Subject: [PATCH 1/2] avoid performing 'void *' arithmetic, and add a few const 
attributes

---
 services/cpg.c |   23 ++++++++++++-----------
 1 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/services/cpg.c b/services/cpg.c
index d8b4a2b..ae1a665 100644
--- a/services/cpg.c
+++ b/services/cpg.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006-2008 Red Hat, Inc.
+ * Copyright (c) 2006-2009 Red Hat, Inc.
  *
  * All rights reserved.
  *
@@ -139,7 +139,7 @@ static void message_handler_req_exec_cpg_procleave (
        unsigned int nodeid);

 static void message_handler_req_exec_cpg_joinlist (
-       void *message,
+       const void *message,
        unsigned int nodeid);

 static void message_handler_req_exec_cpg_mcast (
@@ -513,7 +513,7 @@ static int count_groups(void)
        return num_groups;
 }

-static struct group_info *get_group(mar_cpg_name_t *name)
+static struct group_info *get_group(const mar_cpg_name_t *name)
 {
        struct list_head *iter;
        struct group_info *gi = NULL;
@@ -686,14 +686,15 @@ static void exec_cpg_procjoin_endian_convert (void *msg)
        req_exec_cpg_procjoin->reason = swab32(req_exec_cpg_procjoin->reason);
 }

-static void exec_cpg_joinlist_endian_convert (void *msg)
+static void exec_cpg_joinlist_endian_convert (void *msg_v)
 {
+       char *msg = msg_v;
        mar_res_header_t *res = (mar_res_header_t *)msg;
        struct join_list_entry *jle = (struct join_list_entry *)(msg + 
sizeof(mar_res_header_t));

        /* XXX shouldn't mar_res_header be swabbed? */

-       while ((void*)jle < msg + res->size) {
+       while ((const char*)jle < msg + res->size) {
                jle->pid = swab32(jle->pid);
                swab_mar_cpg_name_t (&jle->group_name);
                jle++;
@@ -725,7 +726,7 @@ static void exec_cpg_mcast_endian_convert (void *msg)
 }

 static void do_proc_join(
-       mar_cpg_name_t *name,
+       const mar_cpg_name_t *name,
        uint32_t pid,
        unsigned int nodeid,
        int reason)
@@ -871,11 +872,12 @@ static void message_handler_req_exec_cpg_procleave (

 /* Got a proclist from another node */
 static void message_handler_req_exec_cpg_joinlist (
-       void *message,
+       const void *message_v,
        unsigned int nodeid)
 {
-       mar_res_header_t *res = (mar_res_header_t *)message;
-       struct join_list_entry *jle = (struct join_list_entry *)(message + 
sizeof(mar_res_header_t));
+       const char *message = message_v;
+       const mar_res_header_t *res = (const mar_res_header_t *)message;
+       const struct join_list_entry *jle = (const struct join_list_entry 
*)(message + sizeof(mar_res_header_t));

        log_printf(LOG_LEVEL_NOTICE, "got joinlist message from node %d\n",
                nodeid);
@@ -885,7 +887,7 @@ static void message_handler_req_exec_cpg_joinlist (
                return;
        }

-       while ((void*)jle < message + res->size) {
+       while ((const char*)jle < message + res->size) {
                do_proc_join(&jle->group_name, jle->pid, nodeid,
                        CONFCHG_CPG_REASON_NODEUP);
                jle++;
@@ -1225,4 +1227,3 @@ static void message_handler_req_lib_cpg_groups_get (void 
*conn, void *message)
        api->ipc_response_send(conn, &res_lib_cpg_groups_get,
                sizeof(res_lib_cpg_groups_get));
 }
-
-- 
1.6.2.rc1.285.gc5f54


>From 6b4af4d65d019def21df452ee42ccaee5111957d Mon Sep 17 00:00:00 2001
From: Jim Meyering <[email protected]>
Date: Tue, 24 Mar 2009 12:10:29 +0100
Subject: [PATCH 2/2] Do not perform arithmetic on "void*" pointers.

* exec/vsf_ykd.c (ykd_deliver_fn): Do not perform "void*" arithmetic.
* services/votequorum.c (quorum_deliver_fn): Likewise.
---
 exec/vsf_ykd.c        |    4 ++--
 services/votequorum.c |    2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/exec/vsf_ykd.c b/exec/vsf_ykd.c
index c993d7f..9542fa4 100644
--- a/exec/vsf_ykd.c
+++ b/exec/vsf_ykd.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2005 MontaVista Software, Inc.
- * Copyright (c) 2006-2008 Red Hat, Inc.
+ * Copyright (c) 2006-2009 Red Hat, Inc.
  *
  * All rights reserved.
  *
@@ -346,7 +346,7 @@ static void ykd_deliver_fn (
        int all_received = 1;
        int state_position = 0;
        int i;
-       char *msg_state = iovec->iov_base + sizeof (struct ykd_header);
+       char *msg_state = (char *)(iovec->iov_base) + sizeof (struct 
ykd_header);
        
        /*
         * If this is a localhost address, this node is always primary
diff --git a/services/votequorum.c b/services/votequorum.c
index 537276d..2f4c397 100644
--- a/services/votequorum.c
+++ b/services/votequorum.c
@@ -994,7 +994,7 @@ static void quorum_deliver_fn(unsigned int nodeid, struct 
iovec *iovec, int iov_
        if (header->tgtport == 0 &&
            (header->tgtid == us->node_id ||
             header->tgtid == 0)) {
-               buf = iovec->iov_base + sizeof(struct q_protheader);
+               buf = (char *)(iovec->iov_base) + sizeof(struct q_protheader);
                switch (*buf) {

                case VOTEQUORUM_MSG_NODEINFO:
-- 
1.6.2.rc1.285.gc5f54
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to