Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Jan 2004 23:02:59 -0800
From:      John Merryweather Cooper <john_m_cooper@yahoo.com>
To:        Max Khon <fjoe@FreeBSD.org>
Cc:        ports-committers@FreeBSD.org
Subject:   Re: cvs commit: ports/mail/libesmtp Makefile
Message-ID:  <400CD2A3.3090409@yahoo.com>
In-Reply-To: <20040118204455.GA35450@FreeBSD.org>
References:  <200401181147.i0IBl79Q029549@repoman.freebsd.org> <20040118204455.GA35450@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
I was away in Seattle, so viewing the code was a might difficult.  Now 
that I'm back home, I have to agree that the internal memrchr() fix 
better preserves the semantics of RFC 2818 (which parses from tail to head).

I wonder since we have both a strchr() and a strrchr() in libc why this 
is not echoed with memchr() and a memrchr() since these functions are so 
similar.

Also, the implementation of memrchr() seems to make some very 
i386-specific assumptions about pointers.  Couldn't this be better 
implemented wrapping strrchr() to handle NUL and size_t?

Other than that, it works.  :)

jmc

Max Khon wrote:

> Hello!
> 
> On Sun, Jan 18, 2004 at 03:47:07AM -0800, Clement LAFORET wrote:
> 
> 
>>clement     2004/01/18 03:47:07 PST
>>
>>  FreeBSD ports repository
>>
>>  Modified files:
>>    mail/libesmtp        Makefile 
>>  Log:
>>  s/memrchr/memchr/.
>>  It fixes an 'undefined reference to `memrchr''.
>>  
>>  Approved by:        maintainer
>>  Approved by:        erwin (mentor) (implicitly)
> 
> 
> This fix is totally incorrect. memrchr is not a typo and was there
> intentionally (please take a look at the comments in the patched file one
> line before the places where memrchr is used).
> 
> The correct fix is to add an implementation of memrchr.c to smtp-tls.c
> (attached).
> 
> /fjoe
> 
> 
> ------------------------------------------------------------------------
> 
> --- smtp-tls.c.orig	Mon Jan 19 02:36:32 2004
> +++ smtp-tls.c	Mon Jan 19 02:41:25 2004
> @@ -450,6 +450,20 @@
>    return 1;
>  }
>  
> +#if defined(__FreeBSD__)
> +void *
> +memrchr(const void *v, int c, size_t size)
> +{
> +	const unsigned char *p = (const unsigned char *) v + size;
> +
> +	while (size-- > 0) {
> +		if (*--p == c)
> +			return (void *) p;
> +	}
> +	return NULL;
> +}
> +#endif
> +
>  /* Perform a domain name comparison where the reference may contain
>     wildcards.  This implements the comparison from RFC 2818.
>     Each component of the domain name is matched separately, working from
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> cvs-all@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/cvs-all
> To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?400CD2A3.3090409>