From 34935845b410cfd0972aa4c0301a5c18d1cfcb0b Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Wed, 28 May 2014 20:13:36 +0200 Subject: [PATCH] Add wcpncpy(3). --- libc/Makefile | 1 + libc/include/wchar.h | 2 +- libc/wchar/wcpncpy.cpp | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 libc/wchar/wcpncpy.cpp diff --git a/libc/Makefile b/libc/Makefile index 8edf0cc3..78de61a2 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -243,6 +243,7 @@ wchar/mbsinit.o \ wchar/mbsnrtowcs.o \ wchar/mbsrtowcs.o \ wchar/wcpcpy.o \ +wchar/wcpncpy.o \ wchar/wcrtomb.o \ wchar/wcscat.o \ wchar/wcschrnul.o \ diff --git a/libc/include/wchar.h b/libc/include/wchar.h index b6764040..cdc0087e 100644 --- a/libc/include/wchar.h +++ b/libc/include/wchar.h @@ -198,7 +198,7 @@ int wcwidth(wchar_t); size_t mbsnrtowcs(wchar_t* __restrict, const char** __restrict, size_t, size_t, mbstate_t* __restrict); /* TODO: FILE* open_wmemstream(wchar_t**, size_t*); */ wchar_t* wcpcpy(wchar_t* __restrict, const wchar_t* __restrict); -/* TODO: wchar_t* wcpncpy(wchar_t* __restrict, const wchar_t* __restrict, size_t); */ +wchar_t* wcpncpy(wchar_t* __restrict, const wchar_t* __restrict, size_t); /* TODO: int wcscasecmp(const wchar_t*, const wchar_t*); */ /* TODO: int wcscasecmp_l(const wchar_t*, const wchar_t*, locale_t); */ /* TODO: int wcscoll_l(const wchar_t*, const wchar_t*, locale_t); */ diff --git a/libc/wchar/wcpncpy.cpp b/libc/wchar/wcpncpy.cpp new file mode 100644 index 00000000..ddfa5514 --- /dev/null +++ b/libc/wchar/wcpncpy.cpp @@ -0,0 +1,37 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2014. + + This file is part of the Sortix C Library. + + The Sortix C Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + The Sortix C Library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with the Sortix C Library. If not, see . + + wchar/wcpncpy.cpp + Copies a string into a fixed size buffer and returns last byte. + +*******************************************************************************/ + +#include + +extern "C" +wchar_t* wcpncpy(wchar_t* restrict dest, const wchar_t* restrict src, size_t n) +{ + size_t i; + for ( i = 0; i < n && src[i] != L'\0'; i++ ) + dest[i] = src[i]; + wchar_t* ret = dest + i; + for ( ; i < n; i++ ) + dest[i] = L'\0'; + return ret; +}