ReactOS 0.4.16-dev-852-gcfcc8d8
_mbslen.cpp File Reference
#include <corecrt_internal.h>
#include <stdlib.h>
Include dependency graph for _mbslen.cpp:

Go to the source code of this file.

Functions

_Check_return_ _Post_satisfies_ ((return<=_String_length_(string) &&return<=max_size)||return==(size_t) -1) static size_t __cdecl common_mbstrlen_l(char const *const string
 
 _ASSERTE (locale_update.GetLocaleT() ->locinfo->_public._locale_mb_cur_max==1||locale_update.GetLocaleT() ->locinfo->_public._locale_mb_cur_max==2)
 
 if (locale_update.GetLocaleT() ->locinfo->_public._locale_mb_cur_max==1)
 
 if (__acrt_MultiByteToWideChar(locale_update.GetLocaleT() ->locinfo->_public._locale_lc_codepage, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, string, static_cast< int >(max_size), nullptr, 0)==0)
 
 for (char const *it=string;size< max_size &&*it;++n,++it,++size)
 
size_t __cdecl _mbstrlen_l (char const *const string, _locale_t const locale)
 
size_t __cdecl _mbstrlen (char const *const string)
 
size_t __cdecl _mbstrnlen_l (char const *const string, size_t const max_size, _locale_t const locale)
 
size_t __cdecl _mbstrnlen (char const *const string, size_t const max_size)
 

Variables

_Check_return_ size_t const max_size
 
_Check_return_ size_t const _locale_t const locale
 
size_t n = 0
 
size_t size = 0
 

Function Documentation

◆ _ASSERTE()

_ASSERTE ( locale_update.GetLocaleT() ->locinfo->_public.  _locale_mb_cur_max = =1||locale_update.GetLocaleT() ->locinfo->_public._locale_mb_cur_max==2)

◆ _mbstrlen()

size_t __cdecl _mbstrlen ( char const *const  string)

Definition at line 87 of file _mbslen.cpp.

88{
89 if (!__acrt_locale_changed())
90 {
91 return strlen(string);
92 }
93 else
94 {
95 return _mbstrlen_l(string, nullptr);
96 }
97}
size_t __cdecl _mbstrlen_l(char const *const string, _locale_t const locale)
Definition: _mbslen.cpp:79
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269

◆ _mbstrlen_l()

size_t __cdecl _mbstrlen_l ( char const *const  string,
_locale_t const  locale 
)

Definition at line 79 of file _mbslen.cpp.

83{
84 return common_mbstrlen_l(string, _CRT_UNBOUNDED_BUFFER_SIZE, locale);
85}
Definition: _locale.h:75
#define _CRT_UNBOUNDED_BUFFER_SIZE

Referenced by _mbstrlen().

◆ _mbstrnlen()

size_t __cdecl _mbstrnlen ( char const *const  string,
size_t const  max_size 
)

Definition at line 113 of file _mbslen.cpp.

117{
118 return _mbstrnlen_l(string, max_size, nullptr);
119}
_Check_return_ size_t const max_size
Definition: _mbslen.cpp:26
size_t __cdecl _mbstrnlen_l(char const *const string, size_t const max_size, _locale_t const locale)
Definition: _mbslen.cpp:101

◆ _mbstrnlen_l()

size_t __cdecl _mbstrnlen_l ( char const *const  string,
size_t const  max_size,
_locale_t const  locale 
)

Definition at line 101 of file _mbslen.cpp.

106{
107 _VALIDATE_RETURN(string != nullptr, EINVAL, static_cast<size_t>(-1));
108 _VALIDATE_RETURN(max_size <= INT_MAX, EINVAL, static_cast<size_t>(-1));
109
110 return common_mbstrlen_l(string, max_size, locale);
111}
#define EINVAL
Definition: acclib.h:90
#define _VALIDATE_RETURN(expr, errorcode, retexpr)
#define INT_MAX
Definition: intsafe.h:150

Referenced by _mbstrnlen().

◆ _Post_satisfies_()

_Check_return_ _Post_satisfies_ ( (return<=_String_length_(string) &&return<=max_size)||  return = = (size_t)-1) const

◆ for()

for ( )

Definition at line 60 of file _mbslen.cpp.

61 {
62 if (_isleadbyte_fast_internal(static_cast<unsigned char>(*it), locale_update.GetLocaleT()))
63 {
64 ++size;
65 if (size >= max_size)
66 break;
67
68 ++it;
69 if (*it == '\0')
70 break;
71 }
72 }
size_t size
Definition: _mbslen.cpp:59
_Check_return_ __forceinline unsigned short __cdecl _isleadbyte_fast_internal(_In_ unsigned char const c, _In_ _locale_t const locale)
GLsizeiptr size
Definition: glext.h:5919

◆ if() [1/2]

if ( __acrt_MultiByteToWideChar( locale_update.GetLocaleT() ->locinfo->_public._locale_lc_codepage, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, string, static_cast< int >(max_size), nullptr, 0)  = = 0)

Definition at line 43 of file _mbslen.cpp.

51 {
52 // There was a bad multibyte character:
53 errno = EILSEQ;
54 return static_cast<size_t>(-1);
55 }
#define errno
Definition: errno.h:18
#define EILSEQ
Definition: errno.h:109

◆ if() [2/2]

if ( locale_update.GetLocaleT() ->locinfo->_public.  _locale_mb_cur_max = = 1)

Definition at line 37 of file _mbslen.cpp.

38 {
39 return strnlen(string, max_size);
40 }
size_t __cdecl strnlen(char const *const string, size_t const maximum_count)
Definition: strnlen.cpp:202

Variable Documentation

◆ locale

Initial value:
{
_LocaleUpdate locale_update(locale)

Definition at line 27 of file _mbslen.cpp.

◆ max_size

Definition at line 26 of file _mbslen.cpp.

Referenced by _mbstrnlen(), _mbstrnlen_l(), for(), and if().

◆ n

size_t n = 0

Definition at line 58 of file _mbslen.cpp.

◆ size

return size = 0

Definition at line 59 of file _mbslen.cpp.

Referenced by for().