diff options
Diffstat (limited to 'newlib/libc/string/wcsdup.c')
-rw-r--r-- | newlib/libc/string/wcsdup.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/newlib/libc/string/wcsdup.c b/newlib/libc/string/wcsdup.c new file mode 100644 index 000000000..8462c0b09 --- /dev/null +++ b/newlib/libc/string/wcsdup.c @@ -0,0 +1,62 @@ +/* +FUNCTION + <<wcsdup>>---wide character string duplicate + +INDEX + wcsdup +INDEX + _wcsdup_r + +ANSI_SYNOPSIS + #include <wchar.h> + wchar_t *wcsdup(const wchar_t *<[str]>); + + #include <wchar.h> + wchar_t *_wcsdup_r(struct _reent *<ptr>, const wchar_t *<[str]>); + +TRAD_SYNOPSIS + #include <wchar.h> + wchar_t *wcsdup(<ptr>, <[str]>) + struct _reent *<ptr>; + wchar_t *<[str]>; + +DESCRIPTION + <<wcsdup>> allocates a new wide character string using <<malloc>, + and copies the content of the argument <[str]> into the newly + allocated string, thus making a copy of <[str]>. + +RETURNS + <<wcsdup>> returns a pointer to the copy of <[str]> if enough + memory for the copy was available. Otherwise it returns NULL + and errno is set to ENOMEM. + +PORTABILITY +POSIX-1.2008 + +QUICKREF + wcsdup +*/ + +#include <reent.h> +#include <stdlib.h> +#include <wchar.h> + +wchar_t * +_wcsdup_r (struct _reent *p, const wchar_t *str) +{ + size_t len = wcslen (str) + 1; + wchar_t *copy = _malloc_r (p, len * sizeof (wchar_t)); + if (copy) + wmemcpy (copy, str, len); + return copy; +} + +#ifndef _REENT_ONLY + +wchar_t * +wcsdup (const wchar_t *str) +{ + return _wcsdup_r (_REENT, str); +} + +#endif /* !_REENT_ONLY */ |