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	Mon Oct 25 13:58:42 2010
***************
*** 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;
***************
*** 1736,1749 ****
  	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;
  
--- 1759,1777 ----
  	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;
  	char c;
  
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	Mon Oct 25 15:11:18 2010
***************
*** 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