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>