diff options
author | Jeff Morriss <jeff.morriss@ulticom.com> | 2011-03-26 02:11:42 +0000 |
---|---|---|
committer | Jeff Morriss <jeff.morriss@ulticom.com> | 2011-03-26 02:11:42 +0000 |
commit | b838995e60c717cd0d1dd75999bde42ebffbe8ae (patch) | |
tree | 786f66bc6cefc330c4d51435a1321327f8302d91 /epan/emem.c | |
parent | 28939cef5c325b6cba6488e853fb7a90ca0d1c4e (diff) |
Remove some duplicated string manipulation code.
svn path=/trunk/; revision=36343
Diffstat (limited to 'epan/emem.c')
-rw-r--r-- | epan/emem.c | 171 |
1 files changed, 83 insertions, 88 deletions
diff --git a/epan/emem.c b/epan/emem.c index 52829206b5..dad7d69de9 100644 --- a/epan/emem.c +++ b/epan/emem.c @@ -856,21 +856,47 @@ ep_alloc0(size_t size) return memset(ep_alloc(size),'\0',size); } -gchar * -ep_strdup(const gchar* src) +void * +se_alloc0(size_t size) { - guint len = (guint) strlen(src); - gchar* dst; + return memset(se_alloc(size),'\0',size); +} + + +static gchar * +emem_strdup(const gchar *src, void *allocator(size_t)) +{ + guint len; + gchar *dst; + + /* If str is NULL, just return the string "<NULL>" so that the callers don't + * have to bother checking it. + */ + if(!src) + return "<NULL>"; - dst = memcpy(ep_alloc(len+1), src, len+1); + len = (guint) strlen(src); + dst = memcpy(allocator(len+1), src, len+1); return dst; } gchar * -ep_strndup(const gchar* src, size_t len) +ep_strdup(const gchar *src) +{ + return emem_strdup(src, ep_alloc); +} + +gchar * +se_strdup(const gchar *src) +{ + return emem_strdup(src, se_alloc); +} + +static gchar * +emem_strndup(const gchar *src, size_t len, void *allocator(size_t)) { - gchar* dst = ep_alloc(len+1); + gchar *dst = allocator(len+1); guint i; for (i = 0; (i < len) && src[i]; i++) @@ -881,14 +907,34 @@ ep_strndup(const gchar* src, size_t len) return dst; } +gchar * +ep_strndup(const gchar *src, size_t len) +{ + return emem_strndup(src, len, ep_alloc); +} + +gchar * +se_strndup(const gchar *src, size_t len) +{ + return emem_strndup(src, len, se_alloc); +} + + + void * ep_memdup(const void* src, size_t len) { return memcpy(ep_alloc(len), src, len); } -gchar * -ep_strdup_vprintf(const gchar* fmt, va_list ap) +void * +se_memdup(const void* src, size_t len) +{ + return memcpy(se_alloc(len), src, len); +} + +static gchar * +emem_strdup_vprintf(const gchar *fmt, va_list ap, void *allocator(size_t)) { va_list ap2; gsize len; @@ -898,7 +944,7 @@ ep_strdup_vprintf(const gchar* fmt, va_list ap) len = g_printf_string_upper_bound(fmt, ap); - dst = ep_alloc(len+1); + dst = allocator(len+1); g_vsnprintf (dst, (gulong) len, fmt, ap2); va_end(ap2); @@ -906,17 +952,41 @@ ep_strdup_vprintf(const gchar* fmt, va_list ap) } gchar * -ep_strdup_printf(const gchar* fmt, ...) +ep_strdup_vprintf(const gchar *fmt, va_list ap) +{ + return emem_strdup_vprintf(fmt, ap, ep_alloc); +} + +gchar * +se_strdup_vprintf(const gchar* fmt, va_list ap) +{ + return emem_strdup_vprintf(fmt, ap, se_alloc); +} + +gchar * +ep_strdup_printf(const gchar *fmt, ...) { va_list ap; - gchar* dst; + gchar *dst; - va_start(ap,fmt); + va_start(ap, fmt); dst = ep_strdup_vprintf(fmt, ap); va_end(ap); return dst; } +gchar * +se_strdup_printf(const gchar *fmt, ...) +{ + va_list ap; + gchar *dst; + + va_start(ap, fmt); + dst = se_strdup_vprintf(fmt, ap); + va_end(ap); + return dst; +} + gchar ** ep_strsplit(const gchar* string, const gchar* sep, int max_tokens) { @@ -995,81 +1065,6 @@ ep_strsplit(const gchar* string, const gchar* sep, int max_tokens) } - -void * -se_alloc0(size_t size) -{ - return memset(se_alloc(size),'\0',size); -} - -/* If str is NULL, just return the string "<NULL>" so that the callers dont - * have to bother checking it. - */ -gchar * -se_strdup(const gchar* src) -{ - guint len; - gchar* dst; - - if(!src) - return "<NULL>"; - - len = (guint) strlen(src); - dst = memcpy(se_alloc(len+1), src, len+1); - - return dst; -} - -gchar * -se_strndup(const gchar* src, size_t len) -{ - gchar* dst = se_alloc(len+1); - guint i; - - for (i = 0; (i < len) && src[i]; i++) - dst[i] = src[i]; - - dst[i] = '\0'; - - return dst; -} - -void * -se_memdup(const void* src, size_t len) -{ - return memcpy(se_alloc(len), src, len); -} - -gchar * -se_strdup_vprintf(const gchar* fmt, va_list ap) -{ - va_list ap2; - gsize len; - gchar* dst; - - G_VA_COPY(ap2, ap); - - len = g_printf_string_upper_bound(fmt, ap); - - dst = se_alloc(len+1); - g_vsnprintf (dst, (gulong) len, fmt, ap2); - va_end(ap2); - - return dst; -} - -gchar * -se_strdup_printf(const gchar* fmt, ...) -{ - va_list ap; - gchar* dst; - - va_start(ap,fmt); - dst = se_strdup_vprintf(fmt, ap); - va_end(ap); - return dst; -} - /* release all allocated memory back to the pool. */ static void emem_free_all(emem_header_t *mem) |