root/src/system/libroot/posix/wchar/wcsdup.c
/*
** Copyright 2011, Oliver Tappe, zooey@hirschkaefer.de. All rights reserved.
** Distributed under the terms of the MIT License.
*/

#include <stdlib.h>
#include <string.h>

#include <errno_private.h>
#include <wchar_private.h>


wchar_t*
__wcsdup(const wchar_t* wcs)
{
        if (wcs == NULL)
                return NULL;

        {
                size_t bufferSize = (wcslen(wcs) + 1) * sizeof(wchar_t);
                wchar_t* dest = malloc(bufferSize);
                if (dest == NULL) {
                        __set_errno(ENOMEM);
                        return NULL;
                }

                memcpy(dest, wcs, bufferSize);

                return dest;
        }
}


B_DEFINE_WEAK_ALIAS(__wcsdup, wcsdup);