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
