libmultipath: fix compiler warnings for -Wcast-qual
authorMartin Wilck <mwilck@suse.com>
Mon, 5 Mar 2018 23:14:52 +0000 (00:14 +0100)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Wed, 7 Mar 2018 09:39:11 +0000 (10:39 +0100)
Fix the warnings that were caused by adding the -Wcast-qual compiler
flag in the previous patch.

Signed-off-by: Martin Wilck <mwilck@suse.com>
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
12 files changed:
kpartx/devmapper.c
libmpathcmd/mpath_cmd.c
libmultipath/checkers/rbd.c
libmultipath/devmapper.c
libmultipath/discovery.c
libmultipath/list.h
libmultipath/memory.h
libmultipath/structs.c
libmultipath/structs.h
libmultipath/uevent.c
libmultipath/util.c
multipathd/main.c

index 4469fa8..eb9dac6 100644 (file)
@@ -11,6 +11,7 @@
 #include <sys/sysmacros.h>
 #include "devmapper.h"
 
+#define FREE_CONST(p) do { free((void*)(long)p); p = NULL; } while(0)
 #define _UUID_PREFIX "part"
 #define UUID_PREFIX _UUID_PREFIX "%d-"
 #define _UUID_PREFIX_LEN (sizeof(_UUID_PREFIX) - 1)
@@ -695,7 +696,7 @@ int dm_find_part(const char *parent, const char *delim, int part,
        } else
                *part_uuid = uuid;
 out:
-       free((void*)tmp);
+       FREE_CONST(tmp);
        return r;
 }
 
index af618cf..29d148c 100644 (file)
@@ -64,7 +64,7 @@ static size_t write_all(int fd, const void *buf, size_t len)
                }
                if (!n)
                        return total;
-               buf = n + (char *)buf;
+               buf = n + (const char *)buf;
                len -= n;
                total += n;
        }
index 2c18009..b1d99b4 100644 (file)
@@ -288,7 +288,7 @@ void libcheck_free(struct checker * c)
 static int rbd_is_blacklisted(struct rbd_checker_context *ct, char *msg)
 {
        char *addr_tok, *start, *save;
-       char *cmd[2];
+       const char *cmd[2];
        char *blklist, *stat;
        size_t blklist_len, stat_len;
        int ret;
@@ -436,7 +436,7 @@ static int sysfs_write_rbd_remove(const char *buf, int buf_len)
 
 static int rbd_rm_blacklist(struct rbd_checker_context *ct)
 {
-       char *cmd[2];
+       const char *cmd[2];
        char *stat, *cmd_str;
        size_t stat_len;
        int ret;
index f61838c..607aea8 100644 (file)
@@ -27,6 +27,7 @@
 #include <sys/types.h>
 #include <time.h>
 
+#define FREE_CONST(p) do { free((void*)(unsigned long)p); p = NULL; } while(0)
 #define MAX_WAIT 5
 #define LOOPS_PER_SEC 5
 
@@ -1426,7 +1427,7 @@ void dm_reassign_deps(char *table, const char *dep, const char *newdep)
        n += strlen(newdep);
        p += strlen(dep);
        strcat(n, p);
-       free(newtable);
+       FREE_CONST(newtable);
 }
 
 int dm_reassign_table(const char *name, char *old, char *new)
index a56e295..da75131 100644 (file)
@@ -121,7 +121,7 @@ path_discover (vector pathvec, struct config * conf,
        if (!devname)
                return PATHINFO_FAILED;
 
-       pp = find_path_by_dev(pathvec, (char *)devname);
+       pp = find_path_by_dev(pathvec, devname);
        if (!pp) {
                char devt[BLK_DEV_SIZE];
                dev_t devnum = udev_device_get_devnum(udevice);
@@ -905,12 +905,12 @@ static int
 parse_vpd_pg83(const unsigned char *in, size_t in_len,
               char *out, size_t out_len)
 {
-       unsigned char *d;
-       unsigned char *vpd = NULL;
+       const unsigned char *d;
+       const unsigned char *vpd = NULL;
        int len = -ENODATA, vpd_type, vpd_len, prio = -1, i, naa_prio;
 
-       d = (unsigned char *)in + 4;
-       while (d < (unsigned char *)in + in_len) {
+       d = in + 4;
+       while (d < in + in_len) {
                /* Select 'association: LUN' */
                if ((d[1] & 0x30) != 0) {
                        d += d[3] + 4;
@@ -1027,7 +1027,7 @@ parse_vpd_pg83(const unsigned char *in, size_t in_len,
                                out[len] = '\0';
                        }
                } else if (vpd_type == 0x1) {
-                       unsigned char *p;
+                       const unsigned char *p;
                        int p_len;
 
                        out[0] = '1';
index 2b1dcf3..c9110ac 100644 (file)
@@ -18,8 +18,8 @@
  * @member:    the name of the member within the struct.
  *
  */
-#define container_of(ptr, type, member) ({                     \
-       const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
+#define container_of(ptr, type, member) ({             \
+       typeof( ((type *)0)->member ) *__mptr = (ptr);  \
        (type *)( (char *)__mptr - offsetof(type,member) );})
 
 /*
index 927619b..63f59d8 100644 (file)
@@ -43,6 +43,7 @@ int debug;
                      (__FILE__), (char *)(__FUNCTION__), (__LINE__)) )
 #define STRDUP(n)    ( dbg_strdup((n), \
                      (__FILE__), (char *)(__FUNCTION__), (__LINE__)) )
+#define FREE_CONST(p) do { FREE((void*)(unsigned long)p); } while(0)
 
 /* Memory debug prototypes defs */
 extern void *dbg_malloc(unsigned long, char *, char *, int);
@@ -54,7 +55,12 @@ extern void dbg_free_final(char *);
 #else
 
 #define MALLOC(n)    (calloc(1,(n)))
-#define FREE(p)      do { free((void*)p); p = NULL; } while(0)
+#define FREE(p)      do { free(p); p = NULL; } while(0)
+/*
+ * Double cast to avoid warnings with -Wcast-qual
+ * use this for valid free() operations on const pointers
+ */
+#define FREE_CONST(p) do { free((void*)(unsigned long)p); p = NULL; } while(0)
 #define REALLOC(p,n) (realloc((p),(n)))
 #define STRDUP(n)    (strdup(n))
 
index 1ade1a6..4db0845 100644 (file)
@@ -418,7 +418,7 @@ find_mp_by_str (vector mpvec, char * str)
 }
 
 struct path *
-find_path_by_dev (vector pathvec, char * dev)
+find_path_by_dev (vector pathvec, const char * dev)
 {
        int i;
        struct path * pp;
index 71b37cc..bccc845 100644 (file)
@@ -387,7 +387,7 @@ struct multipath * find_mp_by_str (vector mp, char * wwid);
 struct multipath * find_mp_by_minor (vector mp, int minor);
 
 struct path * find_path_by_devt (vector pathvec, const char * devt);
-struct path * find_path_by_dev (vector pathvec, char * dev);
+struct path * find_path_by_dev (vector pathvec, const char * dev);
 struct path * first_path (struct multipath * mpp);
 
 int pathcountgr (struct pathgroup *, int);
index 8f4129c..685ef33 100644 (file)
@@ -157,7 +157,7 @@ static int uevent_get_env_positive_int(const struct uevent *uev,
 void
 uevent_get_wwid(struct uevent *uev)
 {
-       char *uid_attribute;
+       const char *uid_attribute;
        const char *val;
        struct config * conf;
 
@@ -167,8 +167,8 @@ uevent_get_wwid(struct uevent *uev)
 
        val = uevent_get_env_var(uev, uid_attribute);
        if (val)
-               uev->wwid = (char*)val;
-       free(uid_attribute);
+               uev->wwid = val;
+       FREE_CONST(uid_attribute);
 }
 
 bool
index 0b43d29..d3dd3eb 100644 (file)
@@ -32,7 +32,7 @@ strchop(char *str)
 int
 basenamecpy (const char * str1, char * str2, int str2len)
 {
-       char *p;
+       const char *p;
 
        if (!str1 || !strlen(str1))
                return 0;
@@ -43,7 +43,7 @@ basenamecpy (const char * str1, char * str2, int str2len)
        if (!str2)
                return 0;
 
-       p = (char *)str1 + (strlen(str1) - 1);
+       p = str1 + (strlen(str1) - 1);
 
        while (*--p != '/' && p != str1)
                continue;
@@ -454,7 +454,7 @@ int safe_write(int fd, const void *buf, size_t count)
                        return -errno;
                }
                count -= r;
-               buf = (char *)buf + r;
+               buf = (const char *)buf + r;
        }
        return 0;
 }
index c700a95..5458fa5 100644 (file)
@@ -408,7 +408,7 @@ uev_add_map (struct uevent * uev, struct vectors * vecs)
        pthread_testcancel();
        rc = ev_add_map(uev->kernel, alias, vecs);
        lock_cleanup_pop(vecs->lock);
-       FREE(alias);
+       FREE_CONST(alias);
        return rc;
 }
 
@@ -514,7 +514,7 @@ uev_remove_map (struct uevent * uev, struct vectors * vecs)
        remove_map_and_stop_waiter(mpp, vecs, 1);
 out:
        lock_cleanup_pop(vecs->lock);
-       FREE(alias);
+       FREE_CONST(alias);
        return 0;
 }
 
@@ -1010,11 +1010,11 @@ uev_pathfail_check(struct uevent *uev, struct vectors *vecs)
                                pp->dev);
 out_lock:
        lock_cleanup_pop(vecs->lock);
-       FREE(devt);
-       FREE(action);
+       FREE_CONST(devt);
+       FREE_CONST(action);
        return r;
 out:
-       FREE(action);
+       FREE_CONST(action);
        return 1;
 }