On Mon, Aug 22, 2022 at 02:01:25PM +0600, NRK wrote:
> On Sun, Aug 21, 2022 at 11:08:43PM +0100, Chris Down wrote:
> > I originally sent these a few years ago and the reply was that
> > const-correctness wasn't something cared about, but seeing other const
> > changes in dwm, and purely const-correctness improvements in
> > quark/st/libgrapheme, I figured maybe it's worth reevaluating and seeing
> > if they are of interest now.
> 
> I would add the attached patch to the list as well.
> 
> String literals in C are of the type `char []`, however modifying them
> is actually UB [0] and in practice it can even result in a segfault.
> 
> The `-Wwrite-strings` flag treats string literals as `const char []` and
> thus warns about cases where a string literal gets assigned to a `char *`.
> 
> P.S: I didn't add the flag to config.mk/CFLAGS in the patch since
> changing the default warning flags can be seen as an opinionated change.
> 
> [0]: https://port70.net/~nsz/c/c99/n1256.html#6.4.5p6
> 
> - NRK

> From 49148ee9fb0bba0e1e503f70016381a779672b36 Mon Sep 17 00:00:00 2001
> From: NRK <[email protected]>
> Date: Mon, 22 Aug 2022 13:56:09 +0600
> Subject: [PATCH] fix const-correctness reguarding string literals
> 
> String literals in C are of the type `char []`, however modifying them
> is actually UB [0] and in practice it can even result in a segfault.
> 
> The `-Wwrite-strings` flag treats string literals as `const char []` and
> thus warns about cases where a string literal gets assigned to a `char *`.
> 
> [0]: https://port70.net/~nsz/c/c99/n1256.html#6.4.5p6
> ---
>  dwm.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/dwm.c b/dwm.c
> index 253aba7..55dd68c 100644
> --- a/dwm.c
> +++ b/dwm.c
> @@ -1808,7 +1808,8 @@ updatebars(void)
>               .background_pixmap = ParentRelative,
>               .event_mask = ButtonPressMask|ExposureMask
>       };
> -     XClassHint ch = {"dwm", "dwm"};
> +     char s[] = "dwm";
> +     XClassHint ch = { s, s };
>       for (m = mons; m; m = m->next) {
>               if (m->barwin)
>                       continue;
> -- 
> 2.35.1
> 

I think this is fine, even when it segfaults because we want it/assume to not
be modified.

For reference in Xutil.h:
typedef struct {
        char *res_name;
        char *res_class;
} XClassHint

-- 
Kind regards,
Hiltjo

Reply via email to