cvs commit: ports/mail/libesmtp Makefile

John Merryweather Cooper john_m_cooper at yahoo.com
Sun Jan 18 23:03:08 PST 2004


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 at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/cvs-all
> To unsubscribe, send any mail to "cvs-all-unsubscribe at freebsd.org"




More information about the cvs-all mailing list