| /* xmemdup.c -- Duplicate a memory buffer, using xmalloc. | 
 |    This trivial function is in the public domain. | 
 |    Jeff Garzik, September 1999.  */ | 
 |  | 
 | /* | 
 |  | 
 | @deftypefn Replacement void* xmemdup (void *@var{input}, @ | 
 |   size_t @var{copy_size}, size_t @var{alloc_size}) | 
 |  | 
 | Duplicates a region of memory without fail.  First, @var{alloc_size} bytes | 
 | are allocated, then @var{copy_size} bytes from @var{input} are copied into | 
 | it, and the new memory is returned.  If fewer bytes are copied than were | 
 | allocated, the remaining memory is zeroed. | 
 |  | 
 | @end deftypefn | 
 |  | 
 | */ | 
 |  | 
 | #ifdef HAVE_CONFIG_H | 
 | #include "config.h" | 
 | #endif | 
 | #include "ansidecl.h" | 
 | #include "libiberty.h" | 
 |  | 
 | #include <sys/types.h> /* For size_t. */ | 
 | #ifdef HAVE_STRING_H | 
 | #include <string.h> | 
 | #else | 
 | # ifdef HAVE_STRINGS_H | 
 | #  include <strings.h> | 
 | # endif | 
 | #endif | 
 |  | 
 | PTR | 
 | xmemdup (const PTR input, size_t copy_size, size_t alloc_size) | 
 | { | 
 |   PTR output = xmalloc (alloc_size); | 
 |   if (alloc_size > copy_size) | 
 |     memset ((char *) output + copy_size, 0, alloc_size - copy_size); | 
 |   return (PTR) memcpy (output, input, copy_size); | 
 | } |