diff options
author | Nick Mathewson <nickm@torproject.org> | 2006-06-18 07:22:36 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2006-06-18 07:22:36 +0000 |
commit | af8096815e126dcab718b2eef6e500ed2aa83912 (patch) | |
tree | 1c9f9c8c26f4fc6d47712f702b529ad1ab6f3c73 | |
parent | 78428dccdbd47af0ca8d39b40c8a3e512d1c1036 (diff) | |
download | tor-af8096815e126dcab718b2eef6e500ed2aa83912.tar.gz tor-af8096815e126dcab718b2eef6e500ed2aa83912.zip |
Add a memdup function to util
svn:r6635
-rw-r--r-- | src/common/util.c | 16 | ||||
-rw-r--r-- | src/common/util.h | 2 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/common/util.c b/src/common/util.c index 2af0cf7b40..00888aa72f 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -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 * ===== */ diff --git a/src/common/util.h b/src/common/util.h index cdcd64f6b4..0518136816 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -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" |