From 2db8bc088d38afe7464eea10a3d2f4a8cef54c73 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Mon, 16 Sep 2013 00:06:27 +0200 Subject: [PATCH] Add wcsncmp(3). --- libc/Makefile | 1 + libc/include/wchar.h | 2 +- libc/wchar/wcsncmp.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 libc/wchar/wcsncmp.cpp diff --git a/libc/Makefile b/libc/Makefile index b19e3ae1..e1568ded 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -186,6 +186,7 @@ wchar/wcscpy.o \ wchar/wcscspn.o \ wchar/wcslen.o \ wchar/wcsncat.o \ +wchar/wcsncmp.o \ wchar/wcsncpy.o \ wchar/wcsrchr.o \ wchar/wcsrtombs.o \ diff --git a/libc/include/wchar.h b/libc/include/wchar.h index 22f931c1..cde93fe2 100644 --- a/libc/include/wchar.h +++ b/libc/include/wchar.h @@ -74,6 +74,7 @@ wchar_t* wcscpy(wchar_t* __restrict, const wchar_t* __restrict); size_t wcscspn(const wchar_t*, const wchar_t*); size_t wcslen(const wchar_t*); wchar_t* wcsncat(wchar_t* __restrict, const wchar_t* __restrict, size_t); +int wcsncmp(const wchar_t*, const wchar_t*, size_t); wchar_t* wcsncpy(wchar_t* __restrict, const wchar_t* __restrict, size_t); wchar_t* wcsrchr(const wchar_t*, wchar_t); size_t wcsrtombs(char* __restrict, const wchar_t** __restrict, size_t, mbstate_t* __restrict); @@ -103,7 +104,6 @@ int vswprintf(wchar_t* __restrict, size_t, const wchar_t* __restrict, va_list); int vswscanf(const wchar_t* __restrict, const wchar_t* __restrict, va_list); int vwprintf(const wchar_t* __restrict, va_list); int vwscanf(const wchar_t* __restrict, va_list); -int wcsncmp(const wchar_t*, const wchar_t*, size_t); int wcswidth(const wchar_t*, size_t); int wctob(wint_t); int wcwidth(wchar_t); diff --git a/libc/wchar/wcsncmp.cpp b/libc/wchar/wcsncmp.cpp new file mode 100644 index 00000000..36100b20 --- /dev/null +++ b/libc/wchar/wcsncmp.cpp @@ -0,0 +1,39 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2013. + + 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/wcsncmp.cpp + Compares a prefix of two wide strings. + +*******************************************************************************/ + +#include + +extern "C" int wcsncmp(const wchar_t* a, const wchar_t* b, size_t n) +{ + for ( size_t i = 0; i < n; i++ ) + { + if ( a[i] == L'\0' && b[i] == L'\0' ) + return 0; + if ( a[i] < b[i] ) + return -1; + if ( a[i] > b[i] ) + return 1; + } + return 0; +}