xref: /netbsd-src/external/gpl3/gcc/dist/libiberty/strdup.c (revision 4fee23f98c45552038ad6b5bd05124a41302fb01)
1*4fee23f9Smrg /*
2*4fee23f9Smrg 
3*4fee23f9Smrg @deftypefn Supplemental char* strdup (const char *@var{s})
4*4fee23f9Smrg 
5*4fee23f9Smrg Returns a pointer to a copy of @var{s} in memory obtained from
6*4fee23f9Smrg @code{malloc}, or @code{NULL} if insufficient memory was available.
7*4fee23f9Smrg 
8*4fee23f9Smrg @end deftypefn
9*4fee23f9Smrg 
10*4fee23f9Smrg */
11*4fee23f9Smrg 
12*4fee23f9Smrg #include <ansidecl.h>
13*4fee23f9Smrg #include <stddef.h>
14*4fee23f9Smrg 
15*4fee23f9Smrg extern size_t	strlen (const char*);
16*4fee23f9Smrg extern PTR	malloc (size_t);
17*4fee23f9Smrg extern PTR	memcpy (PTR, const PTR, size_t);
18*4fee23f9Smrg 
19*4fee23f9Smrg char *
strdup(const char * s)20*4fee23f9Smrg strdup(const char *s)
21*4fee23f9Smrg {
22*4fee23f9Smrg   size_t len = strlen (s) + 1;
23*4fee23f9Smrg   char *result = (char*) malloc (len);
24*4fee23f9Smrg   if (result == (char*) 0)
25*4fee23f9Smrg     return (char*) 0;
26*4fee23f9Smrg   return (char*) memcpy (result, s, len);
27*4fee23f9Smrg }
28