On Tue, Feb 20, 2018 at 02:26:46PM +0100, Martin Wilck wrote: > Fix the warnings that were caused by adding the -Wcast-qual compiler > flag in the previous patch. > Reviewed-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> > Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> > --- > kpartx/devmapper.c | 3 ++- > libmpathcmd/mpath_cmd.c | 2 +- > libmultipath/checkers/rbd.c | 4 ++-- > libmultipath/devmapper.c | 3 ++- > libmultipath/discovery.c | 12 ++++++------ > libmultipath/list.h | 4 ++-- > libmultipath/memory.h | 8 +++++++- > libmultipath/structs.c | 2 +- > libmultipath/structs.h | 2 +- > libmultipath/uevent.c | 6 +++--- > libmultipath/util.c | 6 +++--- > multipathd/main.c | 10 +++++----- > 12 files changed, 35 insertions(+), 27 deletions(-) > > diff --git a/kpartx/devmapper.c b/kpartx/devmapper.c > index 4469fa848de8..eb9dac639175 100644 > --- a/kpartx/devmapper.c > +++ b/kpartx/devmapper.c > @@ -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; > } > > diff --git a/libmpathcmd/mpath_cmd.c b/libmpathcmd/mpath_cmd.c > index af618cff917c..29d148ce8aff 100644 > --- a/libmpathcmd/mpath_cmd.c > +++ b/libmpathcmd/mpath_cmd.c > @@ -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; > } > diff --git a/libmultipath/checkers/rbd.c b/libmultipath/checkers/rbd.c > index 2c1800976e40..b1d99b4c81f6 100644 > --- a/libmultipath/checkers/rbd.c > +++ b/libmultipath/checkers/rbd.c > @@ -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; > diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c > index f61838cbe369..607aea8dc1fc 100644 > --- a/libmultipath/devmapper.c > +++ b/libmultipath/devmapper.c > @@ -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) > diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c > index 98bddee52c8f..645224c1029c 100644 > --- a/libmultipath/discovery.c > +++ b/libmultipath/discovery.c > @@ -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'; > diff --git a/libmultipath/list.h b/libmultipath/list.h > index 2b1dcf396695..c9110ac9de7e 100644 > --- a/libmultipath/list.h > +++ b/libmultipath/list.h > @@ -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) );}) > > /* > diff --git a/libmultipath/memory.h b/libmultipath/memory.h > index 927619b58a62..63f59d80584c 100644 > --- a/libmultipath/memory.h > +++ b/libmultipath/memory.h > @@ -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)) > > diff --git a/libmultipath/structs.c b/libmultipath/structs.c > index 1ade1a6705ad..4db08451824d 100644 > --- a/libmultipath/structs.c > +++ b/libmultipath/structs.c > @@ -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; > diff --git a/libmultipath/structs.h b/libmultipath/structs.h > index 71b37cc20674..bccc845a1222 100644 > --- a/libmultipath/structs.h > +++ b/libmultipath/structs.h > @@ -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); > diff --git a/libmultipath/uevent.c b/libmultipath/uevent.c > index 8f4129ca7fd0..685ef3362c6d 100644 > --- a/libmultipath/uevent.c > +++ b/libmultipath/uevent.c > @@ -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 > diff --git a/libmultipath/util.c b/libmultipath/util.c > index 0b43d29d1236..d3dd3eb524d0 100644 > --- a/libmultipath/util.c > +++ b/libmultipath/util.c > @@ -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; > } > diff --git a/multipathd/main.c b/multipathd/main.c > index a8a0c302e8fe..b900bb3ec2e3 100644 > --- a/multipathd/main.c > +++ b/multipathd/main.c > @@ -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; > } > > @@ -532,7 +532,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; > } > > @@ -1028,11 +1028,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; > } > > -- > 2.16.1 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel