xref: /freebsd/contrib/ntp/libntp/strdup.c (revision 2b15cb3d0922bd70ea592f0da9b4a5b167f4d53f)
1*2b15cb3dSCy Schubert #include <config.h>
2*2b15cb3dSCy Schubert 
3*2b15cb3dSCy Schubert #include <string.h>
4ce265a54SOllivier Robert #include "ntp_malloc.h"
5ce265a54SOllivier Robert 
6*2b15cb3dSCy Schubert #ifndef HAVE_STRDUP
7224ba2bdSOllivier Robert 
8ce265a54SOllivier Robert char *strdup(const char *s);
9ce265a54SOllivier Robert 
10224ba2bdSOllivier Robert char *
11224ba2bdSOllivier Robert strdup(
12224ba2bdSOllivier Robert 	const char *s
13224ba2bdSOllivier Robert 	)
14224ba2bdSOllivier Robert {
15*2b15cb3dSCy Schubert 	size_t	octets;
16224ba2bdSOllivier Robert 	char *	cp;
17224ba2bdSOllivier Robert 
18224ba2bdSOllivier Robert 	if (s) {
19*2b15cb3dSCy Schubert 		octets = 1 + strlen(s);
20*2b15cb3dSCy Schubert 		cp = malloc(octets);
21*2b15cb3dSCy Schubert 		if (NULL != cp)
22*2b15cb3dSCy Schubert 			memcpy(cp, s, octets);
23*2b15cb3dSCy Schubert 	else
24*2b15cb3dSCy Schubert 		cp = NULL;
25*2b15cb3dSCy Schubert 
26224ba2bdSOllivier Robert 	return(cp);
27224ba2bdSOllivier Robert }
28ce265a54SOllivier Robert #else
29*2b15cb3dSCy Schubert int strdup_c_nonempty_compilation_unit;
30ce265a54SOllivier Robert #endif
31