Hi Crystal,

On 2026-02-18T21:58:24+0000, Crystal Kolipe via Mutt-dev wrote:
> On Wed, Feb 18, 2026 at 03:29:57PM +0100, Alejandro Colomar via Mutt-dev 
> wrote:
> > BTW, with the macros shown above, one could implement:
> > 
> >     #define streq(a,b)  (strcmp(a,b) == 0)
> > 
> >     #define isspace_c(c)            (!streq(strchrnul(MUTT_CTYPE_SPACE_C, 
> > c), ""))
> >     #define isspace_rfc5322_fws(c)  
> > (!streq(strchrnul(MUTT_CTYPE_RFC5322_FWS, c), ""))
> > 
> > Although, in general, using the strspn(3) family of functions directly
> > seems more ergonomic.
> 
> Note that strchrnul() is not available natively on OpenBSD.

D'oh!  Well, I guess we could add it as a fallback there.
I hope POSIX takes this API eventually.

Here's a naive definition:

        char *
        strchrnul(const char *s, int c)
        {
                char  *p;

                p = strchr(s, c);
                if (p == NULL)
                        return (char *) s + strlen(s);
                return p;
        }

Here's another one, which might be more or less readable:

        char *
        strchrnul(const char *s, int c)
        {
                char  r[2] = {c, '\0'};

                return (char *) s + strcspn(s, r);
        }

Disclaimer: I haven't tested these yet.


Have a lovely night!
Alex

-- 
<https://www.alejandro-colomar.es>

Attachment: signature.asc
Description: PGP signature

Reply via email to