xref: /openbsd-src/gnu/lib/libiberty/src/strdup.c (revision 150b7e42cfa21e6546d96ae514ca23e80d970ac7)
19588ddcfSespie /*
29588ddcfSespie 
39588ddcfSespie @deftypefn Supplemental char* strdup (const char *@var{s})
49588ddcfSespie 
59588ddcfSespie Returns a pointer to a copy of @var{s} in memory obtained from
69588ddcfSespie @code{malloc}, or @code{NULL} if insufficient memory was available.
79588ddcfSespie 
89588ddcfSespie @end deftypefn
99588ddcfSespie 
109588ddcfSespie */
119588ddcfSespie 
1225e200daSespie #include <ansidecl.h>
1325e200daSespie #include <stddef.h>
1425e200daSespie 
15*150b7e42Smiod extern size_t	strlen (const char*);
16*150b7e42Smiod extern PTR	malloc (size_t);
17*150b7e42Smiod extern PTR	memcpy (PTR, const PTR, size_t);
1825e200daSespie 
1900bf4279Sespie char *
strdup(const char * s)20*150b7e42Smiod strdup(const char *s)
2100bf4279Sespie {
2225e200daSespie   size_t len = strlen (s) + 1;
2325e200daSespie   char *result = (char*) malloc (len);
2400bf4279Sespie   if (result == (char*) 0)
2500bf4279Sespie     return (char*) 0;
2625e200daSespie   return (char*) memcpy (result, s, len);
2700bf4279Sespie }
28