From: Nick Mathewson Date: Mon, 3 Nov 2008 16:35:48 +0000 (+0000) Subject: Add a new memcmpstart to use instead of strcmpstart when the thing we are comparing... X-Git-Tag: tor-0.2.1.7-alpha~26 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3f84ed3d46f52e3a147dfd205d3e76aa27254cf8;p=thirdparty%2Ftor.git Add a new memcmpstart to use instead of strcmpstart when the thing we are comparing is not nul-terminated. svn:r17187 --- diff --git a/src/common/util.c b/src/common/util.c index cc94ccd00a..dc15c6b03a 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -484,6 +484,22 @@ strcasecmpend(const char *s1, const char *s2) return strncasecmp(s1+(n1-n2), s2, n2); } +/** Compare the value of the string prefix with the start of the + * memlen-byte memory chunk at mem. Return as for strcmp. + * + * [As memcmp(mem, prefix, strlen(prefix)) but returns -1 if memlen is less + * than strlen(prefix).] + */ +int +memcmpstart(const void *mem, size_t memlen, + const char *prefix) +{ + size_t plen = strlen(prefix); + if (memlen < plen) + return -1; + return memcmp(mem, prefix, plen); +} + /** Return a pointer to the first char of s that is not whitespace and * not a comment, or to the terminating NUL if no such character exists. */ diff --git a/src/common/util.h b/src/common/util.h index 0474f0fcf3..ea890d988c 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -181,6 +181,9 @@ int strcasecmpstart(const char *s1, const char *s2) int strcmpend(const char *s1, const char *s2) ATTR_PURE ATTR_NONNULL((1,2)); int strcasecmpend(const char *s1, const char *s2) ATTR_PURE ATTR_NONNULL((1,2)); +int memcmpstart(const void *mem, size_t memlen, + const char *prefix) ATTR_PURE; + void tor_strstrip(char *s, const char *strip) ATTR_NONNULL((1,2)); long tor_parse_long(const char *s, int base, long min, long max, int *ok, char **next);