xref: /openbsd-src/lib/libc/string/wcsdup.c (revision 38a75b98f3fd53b60cfeaff8ed9b08fd7afaad1c)
1*38a75b98Sguenther /*	$OpenBSD: wcsdup.c,v 1.3 2015/09/12 16:23:14 guenther Exp $	*/
22dcf140dSnicm /*	$NetBSD: wcsdup.c,v 1.3 2008/05/26 13:17:48 haad Exp $	*/
32dcf140dSnicm 
42dcf140dSnicm /*
52dcf140dSnicm  * Copyright (C) 2006 Aleksey Cheusov
62dcf140dSnicm  *
72dcf140dSnicm  * This material is provided "as is", with absolutely no warranty expressed
82dcf140dSnicm  * or implied. Any use is at your own risk.
92dcf140dSnicm  *
102dcf140dSnicm  * Permission to use or copy this software for any purpose is hereby granted
112dcf140dSnicm  * without fee. Permission to modify the code and to distribute modified
122dcf140dSnicm  * code is also granted without any restrictions.
132dcf140dSnicm  */
142dcf140dSnicm 
152dcf140dSnicm #include <stdlib.h>
162dcf140dSnicm #include <wchar.h>
172dcf140dSnicm 
182dcf140dSnicm wchar_t *
wcsdup(const wchar_t * str)192dcf140dSnicm wcsdup(const wchar_t *str)
202dcf140dSnicm {
212dcf140dSnicm 	wchar_t *copy;
222dcf140dSnicm 	size_t len;
232dcf140dSnicm 
242dcf140dSnicm 	len = wcslen(str) + 1;
2581469941Sderaadt 	copy = reallocarray(NULL, len, sizeof(wchar_t));
262dcf140dSnicm 
272dcf140dSnicm 	if (!copy)
282dcf140dSnicm 		return (NULL);
292dcf140dSnicm 
302dcf140dSnicm 	return (wmemcpy(copy, str, len));
312dcf140dSnicm }
32*38a75b98Sguenther DEF_WEAK(wcsdup);
33