Re: [PATCH 6/6] Use Arch instead of Debian for sr.ht builds

Alejandro Colomar via Mutt-dev <[email protected]>
Newsgroups gmane.mail.mutt.devel
Message-ID <aZ2gXqAVz2MN3pGG@devuan>
On 2026-02-24T13:56:23+0100, Alejandro Colomar wrote:
> Hi Rene,
> 
> On 2026-02-24T13:41:26+0100, Rene Kita wrote:
> > This explains why it went so smooth with Arch. m-(
> > 
> > Running the build on Arch I get multiple errors of this kind:
> > browser.c:548:17: error: initialization discards 'const' qualifier from
> > pointer target type [-Werror=discarded-qualifiers]
> >   548 |       char *c = strrchr (d, '/');
> >       |                 ^~~~~~~
> > 
> > This is in function:
> > static int examine_directory (MUTTMENU *menu, struct browser_state *state,
> > 			      const char *d, const char *prefix).
> > 
> > AFAIU, strrchr is defined as: char * strrchr(const char *s, int c).
> 
> Being Arch, I suspect you're using the latest glibc.  C23 has changed
> the prototype of string search functions to use 'QChar', which is just
> a way of saying "the const qualifier, if present on the input, is
> preserved in the output".
> <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf#subsubsection.7.26.5.6>
> 
> This makes it possible to write code that is more type-safe.
> 
> Since C23, the standard prototype for strrchr(3) is:
> 
> 	QChar *strrchr(QChar *s, int c);
> 
> which could be documented in a more C++-style way, with overloads:
> 
> 	char *strrchr(char *s, int c);
> 	const char *strrchr(const char *s, int c);
> 
> I now need to update the manual pages, and think I'm going to use the
> latter, although feel free to suggest some preference or some other way
> to document it.
> 
> The glibc commit that changed this was:
> 
> 	glibc.git cd748a63ab1a (2025-11-20; "Implement C23 const-preserving standard library macros")
> 
> which is contained in glibc-2.43.
> 
> > 
> > *c is changed later in that function, so we can't make it const. Any
> > ideas what's the best way forward from here?
> 
> If *c is later changed, and it derives from d, then d must be non-const,
> doesn't it?  Or is c later derived from another pointer?  If the latter
> is true, then we'd need to use a different local pointer variable.

After reading the source code myself, this looks like a bug.  d should
be non-const, as we modify it.

	$ grepc examine_directory . | grep -e '\<d\>' -e '\<c\>' -e { -e };
	./browser.c:static int examine_directory (MUTTMENU *menu, struct browser_state *state,
				      const char *d, const char *prefix)
	{
	  while (stat (d, &s) == -1)
	  {
	    {
	      char *c = strrchr (d, '/');
	      if (c && (c > d))
	      {
		*c = 0;
	      }
	    }
	    mutt_perror (d);
	  }
	  {
	    mutt_error (_("%s is not a directory."), d);
	  }
	  if ((dp = opendir (d)) == NULL)
	  {
	    mutt_perror (d);
	  }
	  {
	    mutt_buffer_concat_path (full_path, d, de->d_name);
	    {
	    }
	  }
	}

> 
> 
> Have a lovely day!
> Alex
> 
> -- 
> <https://www.alejandro-colomar.es>



-- 
<https://www.alejandro-colomar.es>
signature.asc (application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEES7Jt9u9GbmlWADAi64mZXMKQwqkFAmmdoPQACgkQ64mZXMKQ
wqmJvRAAoZqQiQiFw43Ps32zOUFCak2dywmhG9xFXbgPdMOaMpqoQ2/GvccIJyNP
ldrsSWsCMONQla2MBYEU783Omd2j+eOsMvCuL13EX6IqMT588ZQM6dovLuHWQL3e
4eiTzpiyW0U5TZ5sjjAeHVuIlEAEien2/vdTlkCu8w4MZeOk+BQyg6MwtvfPeICk
RWU3kvXrma9pk/Qs/9vDlnqugHjENwhTB1w7xMFnKYYTqYa0iWUzQW/sy02dqM08
qEkgNAQ3XvaaJHthnhQvs+sZv7opjfRNKvtMCwNJlQxlVfBNABiy4qkOE9mPlkRg
C7HE6/yGJK77YGcRyjQxD0XTl/uCXZNWI1pNrceT3FwuFpvglFLtPo/vSgqi1gUx
uoR3n5zGR5VVnJsVl/VxBvPU+Fs/m2yVXchior8eiCdSA1S8iI5tGKzWKM9WAXPS
ljdWalo00BsOILokLHINXOl0TfNbGL83QxkzlflXVV7mH50flSEjCT7OdHS5jLB6
2a5pYvWUijdi0aYiF1zYb5kNBHOeX+scIOzieD2ezHAbc7yQkqRHpdgV3aCOuLEc
TtdEWWTZFPgnqzJU68i1yYEWoNFo+N8p1+rxHjmvlHl1PoTM5Eu95gc0ISWPQk0e
NiUc64Cmcp+8RejeFGmeMZ/tZJQGmHOTZybXK9ePDuEgSuRb/tw=
=DcRB
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.