xref: /netbsd-src/external/gpl3/gcc/dist/libiberty/xstrdup.c (revision 4fee23f98c45552038ad6b5bd05124a41302fb01)
1*4fee23f9Smrg /* xstrdup.c -- Duplicate a string in memory, using xmalloc.
2*4fee23f9Smrg    This trivial function is in the public domain.
3*4fee23f9Smrg    Ian Lance Taylor, Cygnus Support, December 1995.  */
4*4fee23f9Smrg 
5*4fee23f9Smrg /*
6*4fee23f9Smrg 
7*4fee23f9Smrg @deftypefn Replacement char* xstrdup (const char *@var{s})
8*4fee23f9Smrg 
9*4fee23f9Smrg Duplicates a character string without fail, using @code{xmalloc} to
10*4fee23f9Smrg obtain memory.
11*4fee23f9Smrg 
12*4fee23f9Smrg @end deftypefn
13*4fee23f9Smrg 
14*4fee23f9Smrg */
15*4fee23f9Smrg 
16*4fee23f9Smrg #ifdef HAVE_CONFIG_H
17*4fee23f9Smrg #include "config.h"
18*4fee23f9Smrg #endif
19*4fee23f9Smrg #include <sys/types.h>
20*4fee23f9Smrg #ifdef HAVE_STRING_H
21*4fee23f9Smrg #include <string.h>
22*4fee23f9Smrg #else
23*4fee23f9Smrg # ifdef HAVE_STRINGS_H
24*4fee23f9Smrg #  include <strings.h>
25*4fee23f9Smrg # endif
26*4fee23f9Smrg #endif
27*4fee23f9Smrg #include "ansidecl.h"
28*4fee23f9Smrg #include "libiberty.h"
29*4fee23f9Smrg 
30*4fee23f9Smrg char *
xstrdup(const char * s)31*4fee23f9Smrg xstrdup (const char *s)
32*4fee23f9Smrg {
33*4fee23f9Smrg   register size_t len = strlen (s) + 1;
34*4fee23f9Smrg   register char *ret = XNEWVEC (char, len);
35*4fee23f9Smrg   return (char *) memcpy (ret, s, len);
36*4fee23f9Smrg }
37