diff options
author | tjr <tjr@FreeBSD.org> | 2005-08-13 05:54:33 +0000 |
---|---|---|
committer | tjr <tjr@FreeBSD.org> | 2005-08-13 05:54:33 +0000 |
commit | d0e833a8a7c2047711efdf3ea08308aea8847f02 (patch) | |
tree | f2a3d38e96b8bed43effcdd48821cd8bf59b0bd7 /lib | |
parent | 4a5927242595d1576c993de352373f6a4fcd7b25 (diff) | |
download | FreeBSD-src-d0e833a8a7c2047711efdf3ea08308aea8847f02.zip FreeBSD-src-d0e833a8a7c2047711efdf3ea08308aea8847f02.tar.gz |
Add an implementation of the semi-standard wcsdup() function, as found
on Microsoft and GNU systems.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/string/Makefile.inc | 5 | ||||
-rw-r--r-- | lib/libc/string/wcsdup.c | 43 | ||||
-rw-r--r-- | lib/libc/string/wmemchr.3 | 9 |
3 files changed, 53 insertions, 4 deletions
diff --git a/lib/libc/string/Makefile.inc b/lib/libc/string/Makefile.inc index a2d1722..e6d8ea5 100644 --- a/lib/libc/string/Makefile.inc +++ b/lib/libc/string/Makefile.inc @@ -14,7 +14,7 @@ MISRCS+=bcmp.c bcopy.c bzero.c ffs.c ffsl.c fls.c flsl.c index.c memccpy.c \ strcasestr.c strnstr.c \ strpbrk.c strrchr.c strsep.c strsignal.c strspn.c strstr.c strtok.c \ strxfrm.c swab.c wcscat.c wcschr.c wcscmp.c wcscoll.c wcscpy.c \ - wcscspn.c \ + wcscspn.c wcsdup.c \ wcslcat.c wcslcpy.c wcslen.c wcsncat.c wcsncmp.c wcsncpy.c wcspbrk.c \ wcsrchr.c wcsspn.c wcsstr.c wcstok.c wcswidth.c wcsxfrm.c wmemchr.c \ wmemcmp.c \ @@ -53,7 +53,8 @@ MLINKS+=wmemchr.3 wmemcmp.3 wmemchr.3 wmemcpy.3 \ wmemchr.3 wmemmove.3 wmemchr.3 wmemset.3 \ wmemchr.3 wcscat.3 wmemchr.3 wcschr.3 \ wmemchr.3 wcscmp.3 wmemchr.3 wcscpy.3 \ - wmemchr.3 wcscspn.3 wmemchr.3 wcslcat.3 \ + wmemchr.3 wcscspn.3 wmemchr.3 wcsdup.3 \ + wmemchr.3 wcslcat.3 \ wmemchr.3 wcslcpy.3 wmemchr.3 wcslen.3 \ wmemchr.3 wcsncat.3 wmemchr.3 wcsncmp.3 \ wmemchr.3 wcsncpy.3 wmemchr.3 wcspbrk.3 \ diff --git a/lib/libc/string/wcsdup.c b/lib/libc/string/wcsdup.c new file mode 100644 index 0000000..1e5db92 --- /dev/null +++ b/lib/libc/string/wcsdup.c @@ -0,0 +1,43 @@ +/*- + * Copyright (c) 2005 Tim J. Robbins. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <stdlib.h> +#include <wchar.h> + +wchar_t * +wcsdup(const wchar_t *s) +{ + wchar_t *copy; + size_t len; + + len = wcslen(s) + 1; + if ((copy = malloc(len * sizeof(wchar_t))) == NULL) + return (NULL); + return (wmemcpy(copy, s, len)); +} diff --git a/lib/libc/string/wmemchr.3 b/lib/libc/string/wmemchr.3 index a448064..a8b18cd 100644 --- a/lib/libc/string/wmemchr.3 +++ b/lib/libc/string/wmemchr.3 @@ -39,7 +39,7 @@ .\" .\" $FreeBSD$ .\" -.Dd December 22, 2000 +.Dd August 13, 2005 .Dt WMEMCHR 3 .Os .Sh NAME @@ -53,6 +53,7 @@ .Nm wcscmp , .Nm wcscpy , .Nm wcscspn , +.Nm wcsdup , .Nm wcslcat , .Nm wcslcpy , .Nm wcslen , @@ -88,6 +89,8 @@ .Fn wcscpy "wchar_t * restrict s1" "const wchar_t * restrict s2" .Ft size_t .Fn wcscspn "const wchar_t *s1" "const wchar_t *s2" +.Ft wchar_t * +.Fn wcsdup "const wchar_t *s" .Ft size_t .Fn wcslcat "wchar_t *s1" "const wchar_t *s2" "size_t n" .Ft size_t @@ -125,6 +128,7 @@ counterpart, such as .Xr strcmp 3 , .Xr strcpy 3 , .Xr strcspn 3 , +.Xr strdup 3 , .Xr strlcat 3 , .Xr strlcpy 3 , .Xr strlen 3 , @@ -139,7 +143,8 @@ counterpart, such as These functions conform to .St -isoC-99 , with the exception of -.Fn wcslcat +.Fn wcsdup , +.Fn wcslcat , and .Fn wcslcpy , which are extensions. |