13527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner/*- 23527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * Copyright (c) 2009 David Schultz <das@FreeBSD.org> 33527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * All rights reserved. 43527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * 53527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * Redistribution and use in source and binary forms, with or without 63527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * modification, are permitted provided that the following conditions 73527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * are met: 83527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * 1. Redistributions of source code must retain the above copyright 93527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * notice, this list of conditions and the following disclaimer. 103527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * 2. Redistributions in binary form must reproduce the above copyright 113527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * notice, this list of conditions and the following disclaimer in the 123527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * documentation and/or other materials provided with the distribution. 133527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * 143527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 153527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 163527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 173527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 183527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 193527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 203527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 213527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 223527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 233527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 243527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner * SUCH DAMAGE. 253527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner */ 263527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner 273527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner#include <sys/cdefs.h> 283527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner__FBSDID("$FreeBSD$"); 293527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner 303527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner#include <wchar.h> 313527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner 323527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turnerwchar_t * 333527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turnerwcpncpy(wchar_t * __restrict dst, const wchar_t * __restrict src, size_t n) 343527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner{ 353527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner 363527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner for (; n--; dst++, src++) { 373527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner if (!(*dst = *src)) { 383527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner wchar_t *ret = dst; 393527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner while (n--) 403527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner *++dst = L'\0'; 413527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner return (ret); 423527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner } 433527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner } 443527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner return (dst); 453527fd6f0df794207215790321824b7844cc712dDavid 'Digit' Turner} 46