From: Michal Privoznik <[email protected]>
There's new commit in glibc [1] which makes memchr(), strchr(),
strrchr(), strpbrk() and strstr() reflect type of the input
string. If it's a constant string, then the return type of these
functions is also 'const char *'. But this change tickles
-Wincompatible-pointer-types-discards-qualifiers warning.
And indeed, there are some places where we use a 'char *' typed
variable to store the retval, or even misuse the fact 'char *' is
returned and modify const string.
To fix this, a couple of different approaches is used:
a) switch variable type to 'const char *',
b) switch argument to 'char *' (in a few places we have
strdup()-ed) the const string already,
c) strdup() the string and use b).
1:
https://sourceware.org/git/?p=glibc.git;a=commit;h=cd748a63ab1a7ae846175c532a3daab341c62690
Signed-off-by: Michal Privoznik <[email protected]>
---
src/interface/interface_backend_udev.c | 2 +-
src/libxl/xen_common.c | 10 +++++-----
src/libxl/xen_xm.c | 10 ++++++----
src/node_device/node_device_udev.c | 2 +-
src/nwfilter/nwfilter_ebiptables_driver.c | 4 ++--
src/qemu/qemu_monitor_json.c | 2 +-
src/qemu/qemu_nbdkit.c | 2 +-
src/rpc/virnetsshsession.c | 5 +++--
src/storage/storage_util.c | 2 +-
src/storage_file/storage_source.c | 4 ++--
src/util/vircgroup.c | 2 +-
src/util/virfile.c | 2 +-
src/util/virstoragefile.c | 4 ++--
src/util/virsysinfo.c | 8 ++++----
src/util/virxml.c | 3 ++-
src/vmware/vmware_conf.c | 2 +-
tools/vsh.c | 6 +++---
17 files changed, 37 insertions(+), 33 deletions(-)
diff --git a/src/interface/interface_backend_udev.c
b/src/interface/interface_backend_udev.c
index 48eacdcdc2..c6d14aa803 100644
--- a/src/interface/interface_backend_udev.c
+++ b/src/interface/interface_backend_udev.c
@@ -927,7 +927,7 @@ udevGetIfaceDef(struct udev *udev, const char *name)
g_autoptr(virInterfaceDef) ifacedef = NULL;
unsigned int mtu;
const char *mtu_str;
- char *vlan_parent_dev = NULL;
+ const char *vlan_parent_dev = NULL;
const char *devtype;
/* Allocate our interface definition structure */
diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c
index 666c6cae20..890ef11723 100644
--- a/src/libxl/xen_common.c
+++ b/src/libxl/xen_common.c
@@ -802,20 +802,20 @@ static virDomainChrDef *
xenParseSxprChar(const char *value,
const char *tty)
{
- const char *prefix;
+ g_autofree char *prefix = NULL;
char *tmp;
virDomainChrDef *def;
if (!(def = virDomainChrDefNew(NULL)))
return NULL;
- prefix = value;
+ prefix = g_strdup(value);
if (g_path_is_absolute(value)) {
def->source->type = VIR_DOMAIN_CHR_TYPE_DEV;
def->source->data.file.path = g_strdup(value);
} else {
- if ((tmp = strchr(value, ':')) != NULL) {
+ if ((tmp = strchr(prefix, ':')) != NULL) {
*tmp = '\0';
value = tmp + 1;
}
@@ -1019,7 +1019,7 @@ xenParseCharDev(virConf *conf, virDomainDef *def, const
char *nativeFormat)
static int
xenParseVifBridge(virDomainNetDef *net, const char *bridge)
{
- char *vlanstr;
+ const char *vlanstr;
unsigned int tag;
if ((vlanstr = strchr(bridge, '.'))) {
@@ -1144,7 +1144,7 @@ xenParseVif(char *entry, const char *vif_typename)
for (keyval = keyvals; keyval && *keyval; keyval++) {
const char *key = *keyval;
- char *val = strchr(key, '=');
+ const char *val = strchr(key, '=');
virSkipSpaces(&key);
diff --git a/src/libxl/xen_xm.c b/src/libxl/xen_xm.c
index 274b35153b..4327a9391d 100644
--- a/src/libxl/xen_xm.c
+++ b/src/libxl/xen_xm.c
@@ -154,9 +154,11 @@ xenParseXMDisk(char *entry, int hvm)
src = virDomainDiskGetSource(disk);
if (src) {
size_t len;
+ const char *sep;
+
/* The main type phy:, file:, tap: ... */
- if ((tmp = strchr(src, ':')) != NULL) {
- len = tmp - src;
+ if ((sep = strchr(src, ':')) != NULL) {
+ len = sep - src;
tmp = g_strndup(src, len);
virDomainDiskSetDriver(disk, tmp);
@@ -173,9 +175,9 @@ xenParseXMDisk(char *entry, int hvm)
STREQ_NULLABLE(virDomainDiskGetDriver(disk), "tap2")) {
char *driverType;
- if (!(tmp = strchr(src, ':')))
+ if (!(sep = strchr(src, ':')))
goto error;
- len = tmp - src;
+ len = sep - src;
driverType = g_strndup(src, len);
diff --git a/src/node_device/node_device_udev.c
b/src/node_device/node_device_udev.c
index 27e62febe8..20a525bcec 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -1187,7 +1187,7 @@ static int
udevGetCCWAddress(const char *sysfs_path,
virNodeDevCapData *data)
{
- char *p;
+ const char *p;
g_autofree virCCWDeviceAddress *ccw_addr = g_new0(virCCWDeviceAddress, 1);
if ((p = strrchr(sysfs_path, '/')) == NULL ||
diff --git a/src/nwfilter/nwfilter_ebiptables_driver.c
b/src/nwfilter/nwfilter_ebiptables_driver.c
index 4578152670..859347409c 100644
--- a/src/nwfilter/nwfilter_ebiptables_driver.c
+++ b/src/nwfilter/nwfilter_ebiptables_driver.c
@@ -2604,7 +2604,7 @@ ebtablesRemoveSubChainsQuery(virFirewall *fw,
const char *chainprefixes = opaque;
for (i = 0; lines[i] != NULL; i++) {
- char *tmp = strstr(lines[i], "-j ");
+ const char *tmp = strstr(lines[i], "-j ");
VIR_DEBUG("Considering '%s'", lines[i]);
@@ -2708,7 +2708,7 @@ ebtablesRenameTmpSubAndRootChainsQuery(virFirewall *fw,
char newchain[MAX_CHAINNAME_LENGTH];
for (i = 0; lines[i] != NULL; i++) {
- char *tmp = strstr(lines[i], "-j ");
+ const char *tmp = strstr(lines[i], "-j ");
VIR_DEBUG("Considering '%s'", lines[i]);
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 494d7ef515..a602b1e65b 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -241,7 +241,7 @@ qemuMonitorJSONIOProcess(qemuMonitor *mon,
/*VIR_DEBUG("Data %d bytes [%s]", len, data);*/
while (used < len) {
- char *nl = strstr(data + used, LINE_ENDING);
+ const char *nl = strstr(data + used, LINE_ENDING);
if (nl) {
int got = nl - (data + used);
diff --git a/src/qemu/qemu_nbdkit.c b/src/qemu/qemu_nbdkit.c
index c1bc6bc363..542a6b1f44 100644
--- a/src/qemu/qemu_nbdkit.c
+++ b/src/qemu/qemu_nbdkit.c
@@ -146,7 +146,7 @@ qemuNbdkitCapsQueryBuildConfig(qemuNbdkitCaps *nbdkit)
size_t i;
g_autofree char *output = NULL;
g_auto(GStrv) lines = NULL;
- const char *line;
+ char *line;
g_autoptr(virCommand) cmd = virCommandNewArgList(nbdkit->path,
"--dump-config",
NULL);
diff --git a/src/rpc/virnetsshsession.c b/src/rpc/virnetsshsession.c
index 316521d4cf..83c8630480 100644
--- a/src/rpc/virnetsshsession.c
+++ b/src/rpc/virnetsshsession.c
@@ -216,13 +216,14 @@ virNetSSHKbIntCb(const char *name G_GNUC_UNUSED,
/* fill data structures for auth callback */
for (i = 0; i < num_prompts; i++) {
- askcred[i].prompt = g_strdup((char*)prompts[i].text);
+ char *prompt = g_strdup((char*)prompts[i].text);
/* remove colon and trailing spaces from prompts, as default behavior
* of libvirt's auth callback is to add them */
- if ((tmp = strrchr(askcred[i].prompt, ':')))
+ if ((tmp = strrchr(prompt, ':')))
*tmp = '\0';
+ askcred[i].prompt = prompt;
askcred[i].type = prompts[i].echo ? credtype_echo : credtype_noecho;
}
diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
index 8f7fc6cc01..e2b41de1f2 100644
--- a/src/storage/storage_util.c
+++ b/src/storage/storage_util.c
@@ -3773,7 +3773,7 @@ getOldStyleBlockDevice(const char *lun_path G_GNUC_UNUSED,
const char *block_name,
char **block_device)
{
- char *blockp = NULL;
+ const char *blockp = NULL;
/* old-style; just parse out the sd */
if (!(blockp = strrchr(block_name, ':'))) {
diff --git a/src/storage_file/storage_source.c
b/src/storage_file/storage_source.c
index 843910a0d8..1883225a8b 100644
--- a/src/storage_file/storage_source.c
+++ b/src/storage_file/storage_source.c
@@ -45,8 +45,8 @@ VIR_LOG_INIT("storage_source");
static bool
virStorageSourceBackinStoreStringIsFile(const char *backing)
{
- char *colon;
- char *slash;
+ const char *colon;
+ const char *slash;
if (!backing)
return false;
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 532a7e5690..3d66d3acb2 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -517,7 +517,7 @@ int
virCgroupSetValueRaw(const char *path,
const char *value)
{
- char *tmp;
+ const char *tmp;
VIR_DEBUG("Set path '%s' to value '%s'", path, value);
if (virFileWriteStr(path, value, 0) < 0) {
diff --git a/src/util/virfile.c b/src/util/virfile.c
index a5c9fbe0d9..f195d02e29 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -3359,7 +3359,7 @@ char *
virFileSanitizePath(const char *path)
{
const char *cur = path;
- char *uri;
+ const char *uri;
char *cleanpath;
int idx = 0;
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 031baa1407..22bda87643 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -119,8 +119,8 @@ virStorageFileGetNPIVKey(const char *path,
char **key)
{
int status;
- const char *serial;
- const char *port;
+ char *serial;
+ char *port;
g_autofree char *outbuf = NULL;
g_autoptr(virCommand) cmd = NULL;
diff --git a/src/util/virsysinfo.c b/src/util/virsysinfo.c
index c017ad34b7..b638fbd16c 100644
--- a/src/util/virsysinfo.c
+++ b/src/util/virsysinfo.c
@@ -219,7 +219,7 @@ static int
virSysinfoParsePPCSystem(const char *base, virSysinfoSystemDef **sysdef)
{
int ret = -1;
- char *eol = NULL;
+ const char *eol = NULL;
const char *cur;
virSysinfoSystemDef *def;
@@ -267,7 +267,7 @@ static void
virSysinfoParsePPCProcessor(const char *base, virSysinfoDef *ret)
{
const char *cur;
- char *eol, *tmp_base;
+ const char *eol, *tmp_base;
virSysinfoProcessorDef *processor;
while ((tmp_base = strstr(base, "processor")) != NULL) {
@@ -336,7 +336,7 @@ static int
virSysinfoParseARMSystem(const char *base, virSysinfoSystemDef **sysdef)
{
int ret = -1;
- char *eol = NULL;
+ const char *eol = NULL;
const char *cur;
virSysinfoSystemDef *def;
@@ -384,7 +384,7 @@ static void
virSysinfoParseARMProcessor(const char *base, virSysinfoDef *ret)
{
const char *cur;
- char *eol, *tmp_base;
+ const char *eol, *tmp_base;
virSysinfoProcessorDef *processor;
char *processor_type = NULL;
diff --git a/src/util/virxml.c b/src/util/virxml.c
index 77c7b5a8f4..274f072598 100644
--- a/src/util/virxml.c
+++ b/src/util/virxml.c
@@ -368,7 +368,8 @@ virXMLCheckIllegalChars(const char *nodeName,
const char *str,
const char *illegal)
{
- char *c;
+ const char *c;
+
if ((c = strpbrk(str, illegal))) {
virReportError(VIR_ERR_XML_DETAIL,
_("invalid char in %1$s: %2$c"), nodeName, *c);
diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c
index a598b512dc..11db044b52 100644
--- a/src/vmware/vmware_conf.c
+++ b/src/vmware/vmware_conf.c
@@ -305,7 +305,7 @@ vmwareDomainConfigDisplay(vmwareDomainPtr pDomain,
virDomainDef *def)
static int
vmwareParsePath(const char *path, char **directory, char **filename)
{
- char *separator;
+ const char *separator;
separator = strrchr(path, '/');
diff --git a/tools/vsh.c b/tools/vsh.c
index 4aacc5feac..69d3930e43 100644
--- a/tools/vsh.c
+++ b/tools/vsh.c
@@ -413,7 +413,7 @@ vshCmddefCheckInternals(vshControl *ctl,
case VSH_OT_ALIAS: {
size_t j;
g_autofree char *name = NULL;
- char *p;
+ const char *p;
if (opt->required ||
opt->positional ||
@@ -502,7 +502,7 @@ vshCmdGetOption(vshControl *ctl,
alias of option and its default value */
alias = g_strdup(n->def->help);
name = alias;
- if ((value = strchr(name, '='))) {
+ if ((value = strchr(alias, '='))) {
*value = '\0';
if (*optstr) {
if (report)
@@ -1660,7 +1660,7 @@ vshCommandParse(vshControl *ctl,
* value
* -- (terminate accepting '--option', fill only positional args)
*/
- const char *optionname = tkdata + 2;
+ char *optionname = tkdata + 2;
char *sep;
if (!STRPREFIX(tkdata, "--")) {
--
2.51.2