This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: Cast "const char *" pointers to "char *" to avoid compiler warnings.
- From: "Richard Earnshaw (lists)" <Richard dot Earnshaw at arm dot com>
- To: Christophe Lyon <christophe dot lyon at linaro dot org>, newlib at sourceware dot org
- Date: Tue, 2 Oct 2018 10:26:50 +0100
- Subject: Re: Cast "const char *" pointers to "char *" to avoid compiler warnings.
- References: <CAKdteOaix2wyhp62oQrmf6TigBOBdJK1cVDJMzFqqM2b47KHOw@mail.gmail.com>
On 01/10/18 22:33, Christophe Lyon wrote:
> Hi,
>
> GCC complains that some assignments loose the const-ness of several
> data. This small patch adds explicit (char *) casts, but I'm not
> familiar enough with what newlib does with these to be sure that they
> are not modified. Maybe the proper fix would be to declare the
> destinations as "const"?
>
> Christophe
>
>
> newlib-4.txt
>
>
> commit 349a08c43cd4baf0d93f28ea8ca7351bf9606d50
> Author: Christophe Lyon <christophe.lyon@linaro.org>
> Date: Mon Oct 1 18:53:37 2018 +0000
>
> Cast "const char *" pointers to "char *" to avoid compiler warnings.
>
> 2018-10-01 Christophe Lyon <christophe.lyon@linaro.org>
>
> * newlib/libc/ctype/ctype_.c (__set_ctype): Cast "_ctype_" to "char *".
> * newlib/libc/ctype/jp2uc.c (_jp2uc_l, _uc2jp_l): Cast output of
> "__locale_charset()" and "__current_locale_charset()" to "char *".
> * newlib/libc/locale/locale.c (__loadlocale): Cast "new_locale" to
> "char *".
>
> diff --git a/newlib/libc/ctype/ctype_.c b/newlib/libc/ctype/ctype_.c
> index 28727e8..851fc06 100644
> --- a/newlib/libc/ctype/ctype_.c
> +++ b/newlib/libc/ctype/ctype_.c
> @@ -176,7 +176,7 @@ __set_ctype (struct __locale_t *loc, const char *charset)
> # if defined(ALLOW_NEGATIVE_CTYPE_INDEX)
> ctype_ptr = _ctype_b;
> # else
> - ctype_ptr = _ctype_;
> + ctype_ptr = (char *) _ctype_;
> # endif
> }
> # if defined(ALLOW_NEGATIVE_CTYPE_INDEX)
> diff --git a/newlib/libc/ctype/jp2uc.c b/newlib/libc/ctype/jp2uc.c
> index b89b5ea..00272eb 100644
> --- a/newlib/libc/ctype/jp2uc.c
> +++ b/newlib/libc/ctype/jp2uc.c
> @@ -166,7 +166,7 @@ __uc2jp (wint_t c, int type)
> wint_t
> _jp2uc_l (wint_t c, struct __locale_t * l)
> {
> - char * cs = l ? __locale_charset(l) : __current_locale_charset();
> + char * cs = l ? (char *) __locale_charset(l) : (char *) __current_locale_charset();
Why not change cs to const char *? It's only used to call strcmp.
Probably most other casts should be similarly considered.
Generally, this patch feels wrong, IMO.
R.
> if (0 == strcmp (cs, "JIS"))
> c = __jp2uc (c, JP_JIS);
> else if (0 == strcmp (cs, "SJIS"))
> @@ -186,7 +186,7 @@ _jp2uc (wint_t c)
> wint_t
> _uc2jp_l (wint_t c, struct __locale_t * l)
> {
> - char * cs = l ? __locale_charset(l) : __current_locale_charset();
> + char * cs = l ? (char *) __locale_charset(l) : (char *) __current_locale_charset();
> if (0 == strcmp (cs, "JIS"))
> c = __uc2jp (c, JP_JIS);
> else if (0 == strcmp (cs, "SJIS"))
> diff --git a/newlib/libc/locale/locale.c b/newlib/libc/locale/locale.c
> index 791a775..79da35f 100644
> --- a/newlib/libc/locale/locale.c
> +++ b/newlib/libc/locale/locale.c
> @@ -515,7 +515,7 @@ restart:
> }
> # define FAIL goto restart
> #else
> - locale = new_locale;
> + locale = (char *) new_locale;
> # define FAIL return NULL
> #endif
>
>