]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add a memdup function to util
authorNick Mathewson <nickm@torproject.org>
Sun, 18 Jun 2006 07:22:36 +0000 (07:22 +0000)
committerNick Mathewson <nickm@torproject.org>
Sun, 18 Jun 2006 07:22:36 +0000 (07:22 +0000)
svn:r6635

src/common/util.c
src/common/util.h

index 2af0cf7b407f6117cabbd7d1da2cd9da239ea2e6..00888aa72f442968239b1785998c33ac9f5c30f5 100644 (file)
@@ -190,6 +190,22 @@ _tor_strndup(const char *s, size_t n DMALLOC_PARAMS)
   return dup;
 }
 
+/** Allocate a chunk of <b>len</b> bytes, with the same contents starting at
+ * <b>mem</b>. */
+void *
+_tor_memdup(const void *mem, size_t len DMALLOC_PARAMS)
+{
+  char *dup;
+  tor_assert(mem);
+  dup = _tor_malloc(len DMALLOC_FN_ARGS);
+  /* Performance note: Ordinarily we prefer strlcpy to strncpy.  But
+   * this function gets called a whole lot, and platform strncpy is
+   * much faster than strlcpy when strlen(s) is much longer than n.
+   */
+  memcpy(dup, mem, len);
+  return dup;
+}
+
 /* =====
  * String manipulation
  * ===== */
index cdcd64f6b4f0c5d8d057ca25ee210613e4f28223..0518136816388940fbd947083a879493a0e43087 100644 (file)
@@ -67,6 +67,7 @@ void *_tor_malloc_zero(size_t size DMALLOC_PARAMS);
 void *_tor_realloc(void *ptr, size_t size DMALLOC_PARAMS);
 char *_tor_strdup(const char *s DMALLOC_PARAMS);
 char *_tor_strndup(const char *s, size_t n DMALLOC_PARAMS);
+void *_tor_memdup(const void *mem, size_t len DMALLOC_PARAMS);
 #ifdef USE_DMALLOC
 extern int dmalloc_free(const char *file, const int line, void *pnt,
                         const int func_id);
@@ -85,6 +86,7 @@ extern int dmalloc_free(const char *file, const int line, void *pnt,
 #define tor_realloc(ptr, size) _tor_realloc(ptr, size DMALLOC_ARGS)
 #define tor_strdup(s)          _tor_strdup(s DMALLOC_ARGS)
 #define tor_strndup(s, n)      _tor_strndup(s, n DMALLOC_ARGS)
+#define tor_memdup(s, n)      _tor_strndup(s, n DMALLOC_ARGS)
 
 /* String manipulation */
 #define HEX_CHARACTERS "0123456789ABCDEFabcdef"