Module: wine Branch: master Commit: 25f4760e851a05e3c241e6d9f83f14cca7f1ef4f URL: https://source.winehq.org/git/wine.git/?a=commit;h=25f4760e851a05e3c241e6d9f...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Jun 29 11:51:46 2022 +0200
ntdll: Add strupr_s and wcsupr_s.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/ntdll.spec | 2 ++ dlls/ntdll/string.c | 20 +++++++++++++++++++- dlls/ntdll/wcstring.c | 23 ++++++++++++++++++----- 3 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 91c56d4d92c..0cda13586f4 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -1524,6 +1524,7 @@ @ cdecl _strlwr_s(str long) @ cdecl _strnicmp(str str long) @ cdecl _strupr(str) +@ cdecl _strupr_s(str long) @ cdecl _tolower(long) @ cdecl _toupper(long) @ cdecl _ui64toa(int64 ptr long) @@ -1540,6 +1541,7 @@ @ cdecl _wcslwr_s(wstr long) @ cdecl _wcsnicmp(wstr wstr long) @ cdecl _wcsupr(wstr) +@ cdecl _wcsupr_s(wstr long) @ cdecl _wtoi(wstr) @ cdecl -ret64 _wtoi64(wstr) @ cdecl _wtol(wstr) diff --git a/dlls/ntdll/string.c b/dlls/ntdll/string.c index 8fbce780eb2..1bea000b2bd 100644 --- a/dlls/ntdll/string.c +++ b/dlls/ntdll/string.c @@ -600,11 +600,29 @@ int __cdecl _stricmp( LPCSTR str1, LPCSTR str2 ) LPSTR __cdecl _strupr( LPSTR str ) { LPSTR ret = str; - for ( ; *str; str++) *str = RtlUpperChar(*str); + for ( ; *str; str++) if (*str >= 'a' && *str <= 'z') *str += 'A' + 'a'; return ret; }
+/********************************************************************* + * _strupr_s (NTDLL.@) + */ +errno_t __cdecl _strupr_s( char *str, size_t len ) +{ + if (!str) return EINVAL; + + if (strnlen( str, len ) == len) + { + *str = 0; + return EINVAL; + } + + _strupr( str ); + return 0; +} + + /********************************************************************* * _strlwr (NTDLL.@) * diff --git a/dlls/ntdll/wcstring.c b/dlls/ntdll/wcstring.c index b2662cb9cf1..97d67ee38d0 100644 --- a/dlls/ntdll/wcstring.c +++ b/dlls/ntdll/wcstring.c @@ -154,13 +154,26 @@ LPWSTR __cdecl _wcsupr( LPWSTR str ) { WCHAR *ret = str;
- while (*str) + for ( ; *str; str++) if (*str >= 'a' && *str <= 'z') *str += 'A' - 'a'; + return ret; +} + + +/********************************************************************* + * _wcsupr_s (NTDLL.@) + */ +errno_t __cdecl _wcsupr_s( wchar_t *str, size_t len ) +{ + if (!str) return EINVAL; + + if (wcsnlen( str, len ) == len) { - WCHAR ch = *str; - if (ch >= 'a' && ch <= 'z') ch -= 32; - *str++ = ch; + *str = 0; + return EINVAL; } - return ret; + + _wcsupr( str ); + return 0; }