mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
| /* 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);
 | |
| }
 |