summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2008-11-03 16:35:48 +0000
committerNick Mathewson <nickm@torproject.org>2008-11-03 16:35:48 +0000
commit3f84ed3d46f52e3a147dfd205d3e76aa27254cf8 (patch)
treed6ff02d31c0fe236006f3357d60d018d0368fdec
parent7b45d530b09d52ebc5cf7b45c57d4f388e3f94ff (diff)
downloadtor-3f84ed3d46f52e3a147dfd205d3e76aa27254cf8.tar.gz
tor-3f84ed3d46f52e3a147dfd205d3e76aa27254cf8.zip
Add a new memcmpstart to use instead of strcmpstart when the thing we are comparing is not nul-terminated.
svn:r17187
-rw-r--r--src/common/util.c16
-rw-r--r--src/common/util.h3
2 files changed, 19 insertions, 0 deletions
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 <b>prefix</b> with the start of the
+ * <b>memlen</b>-byte memory chunk at <b>mem</b>. 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);