From 9291dae58f90ec370c9257d150725b3af97ca3b3 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Wed, 24 Sep 2014 21:35:55 +0200 Subject: [PATCH] Fix wcschr(3) family like strchr(3) was fixed. --- libc/wchar/wcschr.cpp | 8 ++++---- libc/wchar/wcschrnul.cpp | 12 ++++++------ libc/wchar/wcsrchr.cpp | 14 ++++++++------ 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/libc/wchar/wcschr.cpp b/libc/wchar/wcschr.cpp index 58d8258e..f4602f85 100644 --- a/libc/wchar/wcschr.cpp +++ b/libc/wchar/wcschr.cpp @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013. + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013, 2014. This file is part of the Sortix C Library. @@ -24,8 +24,8 @@ #include -extern "C" wchar_t* wcschr(const wchar_t* str, wchar_t c) +extern "C" wchar_t* wcschr(const wchar_t* str, wchar_t uc) { - wchar_t* ret = wcschrnul(str, c); - return ret && c == ret[0] ? ret : NULL; + wchar_t* ret = wcschrnul(str, uc); + return (wint_t) uc == ((wint_t*) ret)[0] ? ret : NULL; } diff --git a/libc/wchar/wcschrnul.cpp b/libc/wchar/wcschrnul.cpp index 5de15fce..d85ab85b 100644 --- a/libc/wchar/wcschrnul.cpp +++ b/libc/wchar/wcschrnul.cpp @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013. + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013, 2014. This file is part of the Sortix C Library. @@ -24,10 +24,10 @@ #include -extern "C" wchar_t* wcschrnul(const wchar_t* str, wchar_t c) +extern "C" wchar_t* wcschrnul(const wchar_t* str, wchar_t uc) { - for ( ; *str != c; str++ ) - if ( !*str ) - return NULL; - return (wchar_t*) str; + const wint_t* ustr = (const wint_t*) str; + for ( size_t i = 0; true; i++) + if ( ustr[i] == (wint_t) uc || !ustr[i] ) + return (wchar_t*) str + i; } diff --git a/libc/wchar/wcsrchr.cpp b/libc/wchar/wcsrchr.cpp index 84a97748..fa8ac4d1 100644 --- a/libc/wchar/wcsrchr.cpp +++ b/libc/wchar/wcsrchr.cpp @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013. + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013, 2014. This file is part of the Sortix C Library. @@ -24,14 +24,16 @@ #include -extern "C" wchar_t* wcsrchr(const wchar_t* str, wchar_t c) +extern "C" wchar_t* wcsrchr(const wchar_t* str, wchar_t uc) { + const wint_t* ustr = (const wint_t*) str; const wchar_t* last = NULL; - while ( *str ) + for ( size_t i = 0; true; i++ ) { - if ( *str == c ) - last = str; - str++; + if ( ustr[i] == (wint_t) uc ) + last = str + i; + if ( !ustr[i] ) + break; } return (wchar_t*) last; }