| diff -c -r talloc-2.0.1/talloc.c talloc/talloc.c |
| *** talloc-2.0.1/talloc.c Tue Dec 15 06:16:57 2009 |
| --- talloc/talloc.c Fri Mar 18 13:03:11 2011 |
| *************** |
| *** 30,36 **** |
| inspired by http://swapped.cc/halloc/ |
| */ |
| |
| ! #include "replace.h" |
| #include "talloc.h" |
| |
| #ifdef TALLOC_BUILD_VERSION_MAJOR |
| --- 30,37 ---- |
| inspired by http://swapped.cc/halloc/ |
| */ |
| |
| ! /* Commented out for building within Chromium */ |
| ! /* #include "replace.h" */ |
| #include "talloc.h" |
| |
| #ifdef TALLOC_BUILD_VERSION_MAJOR |
| *************** |
| *** 97,102 **** |
| --- 98,110 ---- |
| #endif |
| #endif |
| |
| + /* inline isn't supported in C files in Visual Studio 2008 on Windows */ |
| + #ifdef _MSC_VER |
| + #define INLINE |
| + #else |
| + #define INLINE inline |
| + #endif |
| + |
| /* this null_context is only used if talloc_enable_leak_report() or |
| talloc_enable_leak_report_full() is called, otherwise it remains |
| NULL |
| *************** |
| *** 224,230 **** |
| } |
| |
| /* panic if we get a bad magic value */ |
| ! static inline struct talloc_chunk *talloc_chunk_from_ptr(const void *ptr) |
| { |
| const char *pp = (const char *)ptr; |
| struct talloc_chunk *tc = discard_const_p(struct talloc_chunk, pp - TC_HDR_SIZE); |
| --- 232,238 ---- |
| } |
| |
| /* panic if we get a bad magic value */ |
| ! static INLINE struct talloc_chunk *talloc_chunk_from_ptr(const void *ptr) |
| { |
| const char *pp = (const char *)ptr; |
| struct talloc_chunk *tc = discard_const_p(struct talloc_chunk, pp - TC_HDR_SIZE); |
| *************** |
| *** 277,283 **** |
| /* |
| return the parent chunk of a pointer |
| */ |
| ! static inline struct talloc_chunk *talloc_parent_chunk(const void *ptr) |
| { |
| struct talloc_chunk *tc; |
| |
| --- 285,291 ---- |
| /* |
| return the parent chunk of a pointer |
| */ |
| ! static INLINE struct talloc_chunk *talloc_parent_chunk(const void *ptr) |
| { |
| struct talloc_chunk *tc; |
| |
| *************** |
| *** 384,390 **** |
| /* |
| Allocate a bit of memory as a child of an existing pointer |
| */ |
| ! static inline void *__talloc(const void *context, size_t size) |
| { |
| struct talloc_chunk *tc = NULL; |
| |
| --- 392,398 ---- |
| /* |
| Allocate a bit of memory as a child of an existing pointer |
| */ |
| ! static INLINE void *__talloc(const void *context, size_t size) |
| { |
| struct talloc_chunk *tc = NULL; |
| |
| *************** |
| *** 500,506 **** |
| more efficient way to add a name to a pointer - the name must point to a |
| true string constant |
| */ |
| ! static inline void _talloc_set_name_const(const void *ptr, const char *name) |
| { |
| struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); |
| tc->name = name; |
| --- 508,514 ---- |
| more efficient way to add a name to a pointer - the name must point to a |
| true string constant |
| */ |
| ! static INLINE void _talloc_set_name_const(const void *ptr, const char *name) |
| { |
| struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); |
| tc->name = name; |
| *************** |
| *** 509,515 **** |
| /* |
| internal talloc_named_const() |
| */ |
| ! static inline void *_talloc_named_const(const void *context, size_t size, const char *name) |
| { |
| void *ptr; |
| |
| --- 517,523 ---- |
| /* |
| internal talloc_named_const() |
| */ |
| ! static INLINE void *_talloc_named_const(const void *context, size_t size, const char *name) |
| { |
| void *ptr; |
| |
| *************** |
| *** 559,565 **** |
| /* |
| internal talloc_free call |
| */ |
| ! static inline int _talloc_free_internal(void *ptr, const char *location) |
| { |
| struct talloc_chunk *tc; |
| |
| --- 567,573 ---- |
| /* |
| internal talloc_free call |
| */ |
| ! static INLINE int _talloc_free_internal(void *ptr, const char *location) |
| { |
| struct talloc_chunk *tc; |
| |
| *************** |
| *** 797,803 **** |
| talloc_reference() has done. The context and pointer arguments |
| must match those given to a talloc_reference() |
| */ |
| ! static inline int talloc_unreference(const void *context, const void *ptr) |
| { |
| struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); |
| struct talloc_reference_handle *h; |
| --- 805,811 ---- |
| talloc_reference() has done. The context and pointer arguments |
| must match those given to a talloc_reference() |
| */ |
| ! static INLINE int talloc_unreference(const void *context, const void *ptr) |
| { |
| struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); |
| struct talloc_reference_handle *h; |
| *************** |
| *** 877,885 **** |
| /* |
| add a name to an existing pointer - va_list version |
| */ |
| ! static inline const char *talloc_set_name_v(const void *ptr, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); |
| |
| ! static inline const char *talloc_set_name_v(const void *ptr, const char *fmt, va_list ap) |
| { |
| struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); |
| tc->name = talloc_vasprintf(ptr, fmt, ap); |
| --- 885,893 ---- |
| /* |
| add a name to an existing pointer - va_list version |
| */ |
| ! static INLINE const char *talloc_set_name_v(const void *ptr, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0); |
| |
| ! static INLINE const char *talloc_set_name_v(const void *ptr, const char *fmt, va_list ap) |
| { |
| struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); |
| tc->name = talloc_vasprintf(ptr, fmt, ap); |
| *************** |
| *** 1134,1139 **** |
| --- 1142,1151 ---- |
| } |
| |
| |
| + static INLINE size_t min_size(size_t a, size_t b) |
| + { |
| + return a > b ? b : a; |
| + } |
| |
| /* |
| A talloc version of realloc. The context argument is only used if |
| *************** |
| *** 1143,1149 **** |
| { |
| struct talloc_chunk *tc; |
| void *new_ptr; |
| ! bool malloced = false; |
| |
| /* size zero is equivalent to free() */ |
| if (unlikely(size == 0)) { |
| --- 1155,1161 ---- |
| { |
| struct talloc_chunk *tc; |
| void *new_ptr; |
| ! int malloced = 0; |
| |
| /* size zero is equivalent to free() */ |
| if (unlikely(size == 0)) { |
| *************** |
| *** 1196,1206 **** |
| |
| if (new_ptr == NULL) { |
| new_ptr = malloc(TC_HDR_SIZE+size); |
| ! malloced = true; |
| } |
| |
| if (new_ptr) { |
| ! memcpy(new_ptr, tc, MIN(tc->size,size) + TC_HDR_SIZE); |
| } |
| } |
| else { |
| --- 1208,1218 ---- |
| |
| if (new_ptr == NULL) { |
| new_ptr = malloc(TC_HDR_SIZE+size); |
| ! malloced = 1; |
| } |
| |
| if (new_ptr) { |
| ! memcpy(new_ptr, tc, min_size(tc->size,size) + TC_HDR_SIZE); |
| } |
| } |
| else { |
| *************** |
| *** 1558,1564 **** |
| return newp; |
| } |
| |
| ! static inline char *__talloc_strlendup(const void *t, const char *p, size_t len) |
| { |
| char *ret; |
| |
| --- 1570,1576 ---- |
| return newp; |
| } |
| |
| ! static INLINE char *__talloc_strlendup(const void *t, const char *p, size_t len) |
| { |
| char *ret; |
| |
| *************** |
| *** 1581,1586 **** |
| --- 1593,1609 ---- |
| return __talloc_strlendup(t, p, strlen(p)); |
| } |
| |
| + #ifndef HAVE_STRNLEN |
| + static size_t strnlen(const char* s, size_t n) |
| + { |
| + if (unlikely(!s)) return 0; |
| + int i = 0; |
| + while (i < n && *s++ != '\0') |
| + ++i; |
| + return i; |
| + } |
| + #endif |
| + |
| /* |
| strndup with a talloc |
| */ |
| *************** |
| *** 1590,1596 **** |
| return __talloc_strlendup(t, p, strnlen(p, n)); |
| } |
| |
| ! static inline char *__talloc_strlendup_append(char *s, size_t slen, |
| const char *a, size_t alen) |
| { |
| char *ret; |
| --- 1613,1619 ---- |
| return __talloc_strlendup(t, p, strnlen(p, n)); |
| } |
| |
| ! static INLINE char *__talloc_strlendup_append(char *s, size_t slen, |
| const char *a, size_t alen) |
| { |
| char *ret; |
| *************** |
| *** 1699,1709 **** |
| int len; |
| char *ret; |
| va_list ap2; |
| - char c; |
| |
| - /* this call looks strange, but it makes it work on older solaris boxes */ |
| va_copy(ap2, ap); |
| ! len = vsnprintf(&c, 1, fmt, ap2); |
| va_end(ap2); |
| if (unlikely(len < 0)) { |
| return NULL; |
| --- 1722,1730 ---- |
| int len; |
| char *ret; |
| va_list ap2; |
| |
| va_copy(ap2, ap); |
| ! len = vsnprintf(NULL, 0, fmt, ap2); |
| va_end(ap2); |
| if (unlikely(len < 0)) { |
| return NULL; |
| *************** |
| *** 1736,1754 **** |
| return ret; |
| } |
| |
| ! static inline char *__talloc_vaslenprintf_append(char *s, size_t slen, |
| const char *fmt, va_list ap) |
| PRINTF_ATTRIBUTE(3,0); |
| |
| ! static inline char *__talloc_vaslenprintf_append(char *s, size_t slen, |
| const char *fmt, va_list ap) |
| { |
| ssize_t alen; |
| va_list ap2; |
| - char c; |
| |
| va_copy(ap2, ap); |
| ! alen = vsnprintf(&c, 1, fmt, ap2); |
| va_end(ap2); |
| |
| if (alen <= 0) { |
| --- 1757,1779 ---- |
| return ret; |
| } |
| |
| ! static INLINE char *__talloc_vaslenprintf_append(char *s, size_t slen, |
| const char *fmt, va_list ap) |
| PRINTF_ATTRIBUTE(3,0); |
| |
| ! static INLINE char *__talloc_vaslenprintf_append(char *s, size_t slen, |
| const char *fmt, va_list ap) |
| { |
| + /* ssize_t isn't present on Windows. */ |
| + #ifndef _MSC_VER |
| ssize_t alen; |
| + #else |
| + size_t alen; |
| + #endif |
| va_list ap2; |
| |
| va_copy(ap2, ap); |
| ! alen = vsnprintf(NULL, 0, fmt, ap2); |
| va_end(ap2); |
| |
| if (alen <= 0) { |
| diff -c -r talloc-2.0.1/talloc.h talloc/talloc.h |
| *** talloc-2.0.1/talloc.h Wed Oct 28 16:14:20 2009 |
| --- talloc/talloc.h Fri Mar 18 13:03:02 2011 |
| *************** |
| *** 28,33 **** |
| --- 28,37 ---- |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <stdarg.h> |
| + #ifndef _MSC_VER |
| + #include <stdint.h> |
| + #endif |
| + #include <string.h> |
| |
| #define TALLOC_VERSION_MAJOR 2 |
| #define TALLOC_VERSION_MINOR 0 |