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

Rene Kita <[email protected]>
Newsgroups gmane.mail.mutt.devel
Message-ID <[email protected]>
On Tue, Feb 24, 2026 at 09:05:51PM +0800, Kevin J. McCarthy wrote:
> On Tue, Feb 24, 2026 at 01:41:26PM +0100, Rene Kita wrote:
> > On Tue, Feb 24, 2026 at 07:23:26PM +0800, Kevin J. McCarthy 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).
> > 
> > *c is changed later in that function, so we can't make it const. Any
> > ideas what's the best way forward from here?
> 
> Ah, that was my mistake from 7 years ago!  I changed the parameter type when
> I was converting to buffers and the compiler didn't flag anything, so I
> failed to notice d was sneakily being modified.
> 
> The "d" parameters buffers all come from the pool, so they won't be NULL.  I
> think the best thing to do is change the parameter type back to char *d and
> just directly pass the parameter->data.  But let me take a closer look
> tomorrow and fix it up.

I silenced all warnings on Arch by casting just to get a list of places
where the error did occur. So the following is not meant as a solution,
but as a list of other places we might have the same problem:

diff --git a/browser.c b/browser.c
index 9ff9fc60..2dba3e96 100644
--- a/browser.c
+++ b/browser.c
@@ -545,7 +545,7 @@ static int examine_directory (MUTTMENU *menu, struct browser_state *state,
     if (errno == ENOENT)
     {
       /* The last used directory is deleted, try to use the parent dir. */
-      char *c = strrchr (d, '/');
+      char *c = (char *)strrchr (d, '/');

       if (c && (c > d))
       {
diff --git a/mh.c b/mh.c
index 4c4c9695..978c619a 100644
--- a/mh.c
+++ b/mh.c
@@ -690,7 +690,7 @@ static void maildir_parse_flags (HEADER * h, const char *path)
   h->read = 0;
   h->replied = 0;

-  if ((p = strrchr (path, ':')) != NULL && mutt_strncmp (p + 1, "2,", 2) == 0)
+  if ((p = (char *)strrchr (path, ':')) != NULL && mutt_strncmp (p + 1, "2,", 2) == 0)
   {
     p += 3;

@@ -2119,7 +2119,7 @@ static void maildir_canon_filename (BUFFER *dest, const char *src)
 {
   char *t, *u;

-  if ((t = strrchr (src, '/')))
+  if ((t = (char *)strrchr (src, '/')))
     src = t + 1;

   mutt_buffer_strcpy (dest, src);

diff --git a/muttlib.c b/muttlib.c
index 18f3ebf0..7c4870df 100644
--- a/muttlib.c
+++ b/muttlib.c
@@ -510,7 +510,7 @@ void _mutt_buffer_expand_path (BUFFER *src, int flags)
         else
         {
           struct passwd *pw;
-          if ((t = strchr (s + 1, '/')))
+          if ((t = (char *)strchr (s + 1, '/')))
             *t = 0;

           if ((pw = getpwnam (s + 1)))

diff --git a/parse.c b/parse.c
index 141947f4..8bc49efc 100644
--- a/parse.c
+++ b/parse.c
@@ -831,7 +831,7 @@ static const char *uncomment_timezone (char *buf, size_t buflen, const char *tz)
   if (*tz != '(')
     return tz; /* no need to do anything */
   tz = skip_email_wsp(tz + 1);
-  if ((p = strpbrk (tz, " )")) == NULL)
+  if ((p = (char *)strpbrk (tz, " )")) == NULL)
     return tz;
   len = p - tz;
   if (len > buflen - 1)
@@ -1001,7 +1001,7 @@ time_t mutt_parse_date (const char *s, HEADER *h)
         {
           struct tz_t *tz;

-          tz = bsearch (ptz, TimeZones, sizeof TimeZones/sizeof (struct tz_t),
+          tz = (struct tz_t *)bsearch (ptz, TimeZones, sizeof TimeZones/sizeof (struct tz_t),
                         sizeof (struct tz_t),
                         (int (*)(const void *, const void *)) ascii_strcasecmp
                         /* This is safe to do: A pointer to a struct equals

diff --git a/rfc1524.c b/rfc1524.c
index 273614b1..fff0f7e0 100644
--- a/rfc1524.c
+++ b/rfc1524.c
@@ -230,7 +230,7 @@ static int rfc1524_mailcap_parse (BODY *a,
    */

   /* find length of basetype */
-  if ((ch = strchr (type, '/')) == NULL)
+  if ((ch = (char *)strchr (type, '/')) == NULL)
     return FALSE;
   btlen = ch - type;

@@ -509,10 +509,10 @@ void mutt_rfc1524_expand_filename (const char *nametemplate,
   /* first, ignore leading path components.
    */

-  if (nametemplate && (s = strrchr (nametemplate, '/')))
+  if (nametemplate && (s = (char *)strrchr (nametemplate, '/')))
     nametemplate = s + 1;

-  if (oldfile && (s = strrchr (oldfile, '/')))
+  if (oldfile && (s = (char *)strrchr (oldfile, '/')))
     oldfile = s + 1;

   if (!nametemplate)

diff --git a/sendlib.c b/sendlib.c
index f0e34d99..9012cffa 100644
--- a/sendlib.c
+++ b/sendlib.c
@@ -2129,7 +2129,7 @@ static int write_one_header (FILE *fp, int pfxw, int max, int wraplen,
   }
   else
   {
-    t = strchr (start, ':');
+    t = (char *)strchr (start, ':');
     if (!t || t >= end)
     {
       muttdbg(1, "mwoh: warning: header not in 'key: value' format!");

diff --git a/url.c b/url.c
index c1578f42..cdf365b3 100644
--- a/url.c
+++ b/url.c
@@ -81,7 +81,7 @@ url_scheme_t url_check_scheme (const char *s)
   char *t;
   int i;

-  if (!s || !(t = strchr (s, ':')))
+  if (!s || !(t = (char *)strchr (s, ':')))
     return U_UNKNOWN;
   if ((size_t)(t - s) >= sizeof (sbuf) - 1)
     return U_UNKNOWN;
@@ -301,7 +301,7 @@ int url_parse_mailto (ENVELOPE *e, char **body, const char *src)

   LIST *last = NULL;

-  if (!(t = strchr (src, ':')))
+  if (!(t = (char *)strchr (src, ':')))
     return -1;

   /* copy string for safe use of strtok() */
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.