On Thu, Oct 13, 2011 at 01:01:26PM +0900, nozawat wrote:
> Hi
>
> > BTW, does this get rid of the compiler warning as well?
> The warning did not change.
> I build in gcc4.6.1 of Fedora15.
>
> -------
> apcsmart.c: In function 'apcsmart_hostlist':
> apcsmart.c:725:34: error: cast discards '__attribute__((const))' qualifier
> from pointer target type [-Werror=cast-qual]
> cc1: all warnings being treated as errors
Yeah, well, I meanwhile got me a setup where the gcc is new enough to
warn about this. Could be fixed with (const char **)(void*).
But that only masks an unclean interface.
I suggest three steps:
- Changing the signature of get_confignames, and CopyHostList.
This is a boring mechanical patch.
- move qsort to sort the copy, not the supposedly const char * const *
- Re-enable -Wcast-qual
see below.
======================================================================
Changing the signature of get_confignames, and CopyHostList.
diff -r 61fd9fb20b99 include/stonith/stonith.h
--- a/include/stonith/stonith.h Wed Oct 12 20:49:40 2011 +0200
+++ b/include/stonith/stonith.h Wed Oct 12 23:00:54 2011 +0200
@@ -95,7 +95,7 @@
Stonith*stonith_new(const char * type);
void stonith_delete(Stonith *);
-const char** stonith_get_confignames (Stonith* s);
+const char * const * stonith_get_confignames (Stonith* s);
/* static/global return */
/* Return number and list of valid s_names */
diff -r 61fd9fb20b99 include/stonith/stonith_plugin.h
--- a/include/stonith/stonith_plugin.h Wed Oct 12 20:49:40 2011 +0200
+++ b/include/stonith/stonith_plugin.h Wed Oct 12 23:00:54 2011 +0200
@@ -53,7 +53,7 @@
void (*destroy) (StonithPlugin*); /*(full) Destructor */
const char* (*get_info) (StonithPlugin*, int infotype);
- const char** (*get_confignames) (StonithPlugin*);
+ const char * const * (*get_confignames) (StonithPlugin*);
int (*set_config) (StonithPlugin*, StonithNVpair* list);
/* Finishes construction */
/*
@@ -104,7 +104,7 @@
const char* (*GetValue)(StonithNVpair*, const char * name);
int (*CopyAllValues) (StonithNamesToGet* out, StonithNVpair* in);
char **(*StringToHostList)(const char * hlstring);
- char **(*CopyHostList)(const char ** hlstring);
+ char **(*CopyHostList)(const char * const * hlstring);
void (*FreeHostList)(char** hostlist);
int (*TtyLock)(const char* tty);
int (*TtyUnlock)(const char* tty);
diff -r 61fd9fb20b99 lib/plugins/stonith/apcmaster.c
--- a/lib/plugins/stonith/apcmaster.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/apcmaster.c Wed Oct 12 23:00:54 2011 +0200
@@ -65,7 +65,7 @@
static StonithPlugin * apcmaster_new(const char *);
static void apcmaster_destroy(StonithPlugin *);
-static const char ** apcmaster_get_confignames(StonithPlugin *);
+static const char * const * apcmaster_get_confignames(StonithPlugin *);
static int apcmaster_set_config(StonithPlugin *, StonithNVpair *);
static const char * apcmaster_getinfo(StonithPlugin * s, int InfoType);
static int apcmaster_status(StonithPlugin * );
@@ -678,7 +678,7 @@
/*
* Get the configuration parameters names
*/
-static const char **
+static const char * const *
apcmaster_get_confignames(StonithPlugin * s)
{
static const char * ret[] = {ST_IPADDR, ST_LOGIN, ST_PASSWD, NULL};
diff -r 61fd9fb20b99 lib/plugins/stonith/apcsmart.c
--- a/lib/plugins/stonith/apcsmart.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/apcsmart.c Wed Oct 12 23:00:54 2011 +0200
@@ -109,7 +109,7 @@
static StonithPlugin * apcsmart_new(const char *);
static void apcsmart_destroy(StonithPlugin *);
-static const char** apcsmart_get_confignames(StonithPlugin*);
+static const char * const * apcsmart_get_confignames(StonithPlugin*);
static int apcsmart_set_config(StonithPlugin *, StonithNVpair*);
static const char * apcsmart_get_info(StonithPlugin * s, int InfoType);
static int apcsmart_status(StonithPlugin * );
@@ -621,7 +621,7 @@
ad->upsfd = -1;
}
}
-static const char**
+static const char * const *
apcsmart_get_confignames(StonithPlugin* sp)
{
static const char * names[] = {ST_TTYDEV, ST_HOSTLIST, NULL};
@@ -719,7 +719,7 @@
}
ERRIFNOTCONFIGED(s,NULL);
- return OurImports->CopyHostList((const char **)ad->hostlist);
+ return OurImports->CopyHostList((const char **)(void*)ad->hostlist);
}
static gboolean
diff -r 61fd9fb20b99 lib/plugins/stonith/baytech.c
--- a/lib/plugins/stonith/baytech.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/baytech.c Wed Oct 12 23:00:54 2011 +0200
@@ -37,7 +37,7 @@
static StonithPlugin * baytech_new(const char *);
static void baytech_destroy(StonithPlugin *);
static int baytech_set_config(StonithPlugin *, StonithNVpair *);
-static const char ** baytech_get_confignames(StonithPlugin * s);
+static const char * const * baytech_get_confignames(StonithPlugin * s);
static const char * baytech_get_info(StonithPlugin * s, int InfoType);
static int baytech_status(StonithPlugin *);
static int baytech_reset_req(StonithPlugin * s, int request, const char * host);
@@ -744,7 +744,7 @@
return(rc != S_OK ? rc : lorc);
}
-static const char **
+static const char * const *
baytech_get_confignames(StonithPlugin * s)
{
static const char * ret[] = {ST_IPADDR, ST_LOGIN, ST_PASSWD, NULL};
diff -r 61fd9fb20b99 lib/plugins/stonith/cyclades.c
--- a/lib/plugins/stonith/cyclades.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/cyclades.c Wed Oct 12 23:00:54 2011 +0200
@@ -45,7 +45,7 @@
static StonithPlugin * cyclades_new(const char *);
static void cyclades_destroy(StonithPlugin *);
static int cyclades_set_config(StonithPlugin *, StonithNVpair *);
-static const char ** cyclades_get_confignames(StonithPlugin * s);
+static const char * const * cyclades_get_confignames(StonithPlugin * s);
static const char * cyclades_get_info(StonithPlugin * s, int InfoType);
static int cyclades_status(StonithPlugin *);
static int cyclades_reset_req(StonithPlugin * s, int request, const char * host);
@@ -523,7 +523,7 @@
return rc;
}
-static const char **
+static const char * const *
cyclades_get_confignames(StonithPlugin * s)
{
static const char * ret[] = {ST_IPADDR, ST_LOGIN, ST_SERIALPORT, NULL};
diff -r 61fd9fb20b99 lib/plugins/stonith/external.c
--- a/lib/plugins/stonith/external.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/external.c Wed Oct 12 23:00:54 2011 +0200
@@ -46,7 +46,7 @@
static StonithPlugin * external_new(const char *);
static void external_destroy(StonithPlugin *);
static int external_set_config(StonithPlugin *, StonithNVpair *);
-static const char** external_get_confignames(StonithPlugin *);
+static const char * const * external_get_confignames(StonithPlugin *);
static const char * external_getinfo(StonithPlugin * s, int InfoType);
static int external_status(StonithPlugin * );
static int external_reset_req(StonithPlugin * s, int request, const char * host);
@@ -461,7 +461,7 @@
/*
* Return STONITH config vars
*/
-static const char**
+static const char * const *
external_get_confignames(StonithPlugin* p)
{
struct pluginDevice * sd;
@@ -544,7 +544,7 @@
sd->confignames[dircount] = NULL;
}
- return (const char **)sd->confignames;
+ return (const char * const *)sd->confignames;
}
/*
diff -r 61fd9fb20b99 lib/plugins/stonith/ibmhmc.c
--- a/lib/plugins/stonith/ibmhmc.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/ibmhmc.c Wed Oct 12 23:00:54 2011 +0200
@@ -131,7 +131,7 @@
static StonithPlugin * ibmhmc_new(const char *);
static void ibmhmc_destroy(StonithPlugin *);
static const char * ibmhmc_getinfo(StonithPlugin * s, int InfoType);
-static const char** ibmhmc_get_confignames(StonithPlugin* p);
+static const char * const * ibmhmc_get_confignames(StonithPlugin* p);
static int ibmhmc_status(StonithPlugin * );
static int ibmhmc_reset_req(StonithPlugin * s,int request,const char* host);
static char ** ibmhmc_hostlist(StonithPlugin *);
@@ -318,7 +318,7 @@
}
-static const char**
+static const char * const *
ibmhmc_get_confignames(StonithPlugin* p)
{
static const char * names[] = {ST_IPADDR, NULL};
diff -r 61fd9fb20b99 lib/plugins/stonith/meatware.c
--- a/lib/plugins/stonith/meatware.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/meatware.c Wed Oct 12 23:00:54 2011 +0200
@@ -40,7 +40,7 @@
static StonithPlugin * meatware_new(const char *);
static void meatware_destroy(StonithPlugin *);
static int meatware_set_config(StonithPlugin *, StonithNVpair *);
-static const char** meatware_get_confignames(StonithPlugin *);
+static const char * const * meatware_get_confignames(StonithPlugin *);
static const char * meatware_getinfo(StonithPlugin * s, int InfoType);
static int meatware_status(StonithPlugin * );
static int meatware_reset_req(StonithPlugin * s, int request, const char * host);
@@ -136,7 +136,7 @@
return(NULL);
}
- return OurImports->CopyHostList((const char **)nd->hostlist);
+ return OurImports->CopyHostList((const char * const *)nd->hostlist);
}
/*
@@ -265,7 +265,7 @@
/*
* Return STONITH config vars
*/
-static const char**
+static const char * const *
meatware_get_confignames(StonithPlugin* p)
{
static const char * MeatwareParams[] = {ST_HOSTLIST, NULL };
diff -r 61fd9fb20b99 lib/plugins/stonith/null.c
--- a/lib/plugins/stonith/null.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/null.c Wed Oct 12 23:00:54 2011 +0200
@@ -42,7 +42,7 @@
static void null_destroy(StonithPlugin *);
static int null_set_config(StonithPlugin*
, StonithNVpair*);
-static const char** null_get_confignames(StonithPlugin*);
+static const char * const * null_get_confignames(StonithPlugin*);
static const char * null_getinfo(StonithPlugin * s, int InfoType);
static int null_status(StonithPlugin * );
static int null_reset_req(StonithPlugin * s
@@ -126,7 +126,7 @@
struct pluginDevice* nd = (struct pluginDevice*)s;
ERRIFWRONGDEV(s, NULL);
- return OurImports->CopyHostList((const char**)nd->hostlist);
+ return OurImports->CopyHostList((const char * const *)nd->hostlist);
}
@@ -148,7 +148,7 @@
}
-static const char**
+static const char * const *
null_get_confignames(StonithPlugin* p)
{
static const char * NullParams[] = {ST_HOSTLIST, NULL };
diff -r 61fd9fb20b99 lib/plugins/stonith/nw_rpc100s.c
--- a/lib/plugins/stonith/nw_rpc100s.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/nw_rpc100s.c Wed Oct 12 23:00:54 2011 +0200
@@ -40,7 +40,7 @@
static StonithPlugin * nw_rpc100s_new(const char *);
static void nw_rpc100s_destroy(StonithPlugin *);
static int nw_rpc100s_set_config(StonithPlugin *, StonithNVpair *);
-static const char** nw_rpc100s_get_confignames(StonithPlugin *);
+static const char * const * nw_rpc100s_get_confignames(StonithPlugin *);
static const char * nw_rpc100s_getinfo(StonithPlugin * s, int InfoType);
static int nw_rpc100s_status(StonithPlugin * );
static int nw_rpc100s_reset_req(StonithPlugin * s, int request, const char * host);
@@ -678,7 +678,7 @@
/*
* Return STONITH config vars
*/
-static const char **
+static const char * const *
nw_rpc100s_get_confignames(StonithPlugin* p)
{
static const char * RpcParams[] = {ST_TTYDEV , ST_HOSTLIST, NULL };
diff -r 61fd9fb20b99 lib/plugins/stonith/rcd_serial.c
--- a/lib/plugins/stonith/rcd_serial.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/rcd_serial.c Wed Oct 12 23:00:54 2011 +0200
@@ -54,7 +54,7 @@
static StonithPlugin* rcd_serial_new(const char *);
static void rcd_serial_destroy(StonithPlugin *);
static int rcd_serial_set_config(StonithPlugin *, StonithNVpair *);
-static const char ** rcd_serial_get_confignames(StonithPlugin *);
+static const char * const * rcd_serial_get_confignames(StonithPlugin *);
static const char * rcd_serial_getinfo(StonithPlugin * s, int InfoType);
static int rcd_serial_status(StonithPlugin * );
static int rcd_serial_reset_req(StonithPlugin * s, int request, const char * host);
@@ -347,7 +347,7 @@
return(NULL);
}
- return OurImports->CopyHostList((const char **)rcd->hostlist);
+ return OurImports->CopyHostList((const char * const *)rcd->hostlist);
}
/*
@@ -497,7 +497,7 @@
/*
* Return STONITH config vars
*/
-static const char**
+static const char * const *
rcd_serial_get_confignames(StonithPlugin* p)
{
static const char * RcdParams[] = {ST_HOSTLIST, ST_TTYDEV
diff -r 61fd9fb20b99 lib/plugins/stonith/rhcs.c
--- a/lib/plugins/stonith/rhcs.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/rhcs.c Wed Oct 12 23:00:54 2011 +0200
@@ -53,7 +53,7 @@
static StonithPlugin * rhcs_new(const char *);
static void rhcs_destroy(StonithPlugin *);
static int rhcs_set_config(StonithPlugin *, StonithNVpair *);
-static const char** rhcs_get_confignames(StonithPlugin *);
+static const char * const * rhcs_get_confignames(StonithPlugin *);
static const char * rhcs_getinfo(StonithPlugin * s, int InfoType);
static int rhcs_status(StonithPlugin * );
static int rhcs_reset_req(StonithPlugin * s, int request, const char * host);
@@ -659,7 +659,7 @@
/*
* Return STONITH config vars
*/
-static const char**
+static const char * const *
rhcs_get_confignames(StonithPlugin* p)
{
struct pluginDevice * sd;
@@ -703,7 +703,7 @@
sd->confignames[dircount] = NULL;
}
- return (const char **)sd->confignames;
+ return (const char * const *)sd->confignames;
}
/*
diff -r 61fd9fb20b99 lib/plugins/stonith/rps10.c
--- a/lib/plugins/stonith/rps10.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/rps10.c Wed Oct 12 23:00:54 2011 +0200
@@ -43,7 +43,7 @@
static StonithPlugin * rps10_new(const char *);
static void rps10_destroy(StonithPlugin *);
static int rps10_set_config(StonithPlugin *, StonithNVpair *);
-static const char** rps10_get_confignames(StonithPlugin *);
+static const char * const * rps10_get_confignames(StonithPlugin *);
static const char * rps10_getinfo(StonithPlugin * s, int InfoType);
static int rps10_status(StonithPlugin * );
static int rps10_reset_req(StonithPlugin * s, int request, const char * host);
@@ -948,7 +948,7 @@
* Return the Stonith plugin configuration parameter
*
*/
-static const char**
+static const char * const *
rps10_get_confignames(StonithPlugin* p)
{
static const char * Rps10Params[] = {ST_RPS10 ,NULL };
diff -r 61fd9fb20b99 lib/plugins/stonith/ssh.c
--- a/lib/plugins/stonith/ssh.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/ssh.c Wed Oct 12 23:00:54 2011 +0200
@@ -36,7 +36,7 @@
static StonithPlugin * ssh_new(const char *);
static void ssh_destroy(StonithPlugin *);
-static const char** ssh_get_confignames(StonithPlugin *);
+static const char * const * ssh_get_confignames(StonithPlugin *);
static int ssh_set_config(StonithPlugin *, StonithNVpair*);
static const char * ssh_get_info(StonithPlugin * s, int InfoType);
static int ssh_status(StonithPlugin * );
@@ -161,7 +161,7 @@
return(NULL);
}
- return OurImports->CopyHostList((const char **)sd->hostlist);
+ return OurImports->CopyHostList((const char * const *)sd->hostlist);
}
@@ -234,7 +234,7 @@
}
}
-static const char**
+static const char * const *
ssh_get_confignames(StonithPlugin* p)
{
static const char * SshParams[] = {ST_HOSTLIST, NULL };
diff -r 61fd9fb20b99 lib/plugins/stonith/suicide.c
--- a/lib/plugins/stonith/suicide.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/suicide.c Wed Oct 12 23:00:54 2011 +0200
@@ -34,7 +34,7 @@
static StonithPlugin * suicide_new(const char *);
static void suicide_destroy(StonithPlugin *);
-static const char** suicide_get_confignames(StonithPlugin *);
+static const char * const * suicide_get_confignames(StonithPlugin *);
static int suicide_set_config(StonithPlugin *, StonithNVpair*);
static const char * suicide_get_info(StonithPlugin * s, int InfoType);
static int suicide_status(StonithPlugin * );
@@ -189,7 +189,7 @@
}
}
-static const char**
+static const char * const *
suicide_get_confignames(StonithPlugin* p)
{
/* Donnot need to initialize from external. */
diff -r 61fd9fb20b99 lib/plugins/stonith/wti_nps.c
--- a/lib/plugins/stonith/wti_nps.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/plugins/stonith/wti_nps.c Wed Oct 12 23:00:54 2011 +0200
@@ -78,7 +78,7 @@
static StonithPlugin * wti_nps_new(const char *);
static void wti_nps_destroy(StonithPlugin *);
-static const char** wti_nps_get_confignames(StonithPlugin *);
+static const char * const * wti_nps_get_confignames(StonithPlugin *);
static int wti_nps_set_config(StonithPlugin * , StonithNVpair * );
static const char * wti_nps_get_info(StonithPlugin * s, int InfoType);
static int wti_nps_status(StonithPlugin * );
@@ -689,7 +689,7 @@
* Return the Stonith plugin configuration parameter
*
*/
-static const char**
+static const char * const *
wti_nps_get_confignames(StonithPlugin * p)
{
static const char * names[] = { ST_IPADDR , ST_PASSWD , NULL};
diff -r 61fd9fb20b99 lib/stonith/expect.c
--- a/lib/stonith/expect.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/stonith/expect.c Wed Oct 12 23:00:54 2011 +0200
@@ -335,10 +335,10 @@
}
static char **
-stonith_copy_hostlist(const char** hostlist)
+stonith_copy_hostlist(const char * const * hostlist)
{
int hlleng = 1;
- const char ** here = hostlist;
+ const char * const * here = hostlist;
char ** hret;
char ** ret;
diff -r 61fd9fb20b99 lib/stonith/main.c
--- a/lib/stonith/main.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/stonith/main.c Wed Oct 12 23:00:54 2011 +0200
@@ -191,7 +191,7 @@
for(this=typelist; *this && !devfound; ++this) {
const char * SwitchType = *this;
const char * cres;
- const char ** pnames;
+ const char * const * pnames;
if ((s = stonith_new(SwitchType)) == NULL) {
@@ -318,7 +318,7 @@
void
print_confignames(Stonith *s)
{
- const char** names;
+ const char * const * names;
int i;
names = stonith_get_confignames(s);
@@ -572,7 +572,7 @@
if (!listparanames && !metadata && optfile == NULL &&
parameters == NULL && !params_from_env && nvcount == 0) {
- const char** names;
+ const char * const * names;
int needs_parms = 1;
if (s != NULL && (names = stonith_get_confignames(s)) != NULL && names[0] == NULL) {
@@ -654,7 +654,7 @@
* Configure STONITH device using cmdline arguments...
*/
if ((rc = stonith_set_config(s, nvargs)) != S_OK) {
- const char** names;
+ const char * const * names;
int j;
fprintf(stderr
, "Invalid config info for %s device\n"
diff -r 61fd9fb20b99 lib/stonith/stonith.c
--- a/lib/stonith/stonith.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/stonith/stonith.c Wed Oct 12 23:00:54 2011 +0200
@@ -166,7 +166,8 @@
get_plugin_list(const char *pltype)
{
char ** typelist = NULL;
- const char **extPI, **p;
+ const char * const *extPI;
+ const char * const *p;
int numextPI, i;
Stonith * ext;
@@ -303,7 +305,7 @@
}
}
-const char **
+const char * const *
stonith_get_confignames(Stonith* s)
{
StonithPlugin* sp = (StonithPlugin*)s;
@@ -471,7 +473,7 @@
* Everything after the last delimiter is passed along as part of
* the final argument - white space and all...
*/
- const char ** config_names;
+ const char * const * config_names;
int n_names;
int j;
const char * delims = " \t\n\r\f";
@@ -521,7 +523,7 @@
stonith_env_to_NVpair(Stonith* s)
{
/* Read the config names values from the environment */
- const char ** config_names;
+ const char * const * config_names;
int n_names;
int j;
StonithNVpair* ret;
======================================================================
move qsort to sort the copy, not the supposedly const char * const *
diff -r 61fd9fb20b99 lib/stonith/stonith.c
--- a/lib/stonith/stonith.c Wed Oct 12 20:49:40 2011 +0200
+++ b/lib/stonith/stonith.c Wed Oct 12 23:00:54 2011 +0200
@@ -185,9 +186,6 @@
/* count the external plugins */
for (numextPI = 0, p = extPI; *p; p++, numextPI++);
- /* sort the external plugins */
- qsort(extPI, numextPI, sizeof(char *), qsort_string_cmp);
-
typelist = (char **)
MALLOC((numextPI+1)*sizeof(char *));
if (typelist == NULL) {
@@ -213,6 +211,10 @@
}
stonith_delete(ext);
+
+ /* sort the list of plugin names */
+ qsort(typelist, numextPI, sizeof(char *), qsort_string_cmp);
+
return typelist;
err:
stonith_free_hostlist(typelist);
======================================================================
Re-enable -Wcast-qual
diff -r 61fd9fb20b99 configure.ac
--- a/configure.ac Wed Oct 12 20:49:40 2011 +0200
+++ b/configure.ac Wed Oct 12 23:00:54 2011 +0200
@@ -1182,12 +1182,12 @@
CFLAGS="$CFLAGS -ggdb3 -O0"
# We had to eliminate -Wnested-externs because of libtool changes
- # -Wcast-qual gives errors with GCC 4.6
EXTRA_FLAGS="-fgnu89-inline
-fstack-protector-all
-Wall
-Waggregate-return
-Wbad-function-cast
+ -Wcast-qual
-Wcast-align
-Wdeclaration-after-statement
-Wendif-labels
_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev Home Page:
http://linux-ha.org/