2010/9/6 Ozkan Sezer <[email protected]>:
> On Mon, Sep 6, 2010 at 6:35 PM, John E. / TDM <[email protected]> wrote:
>> On 9/6/2010 6:14 AM, Ozkan Sezer wrote:
>>>
>>> strnlen doesn't exist in msvcrt.dll from x86-winxp
>>>
>>> we can implement it roughly like:
>>>
>>> size_t __cdecl strnlen (const char *s, size_t maxlen)
>>> {
>>> size_t siz = __builtin_strlen(s);
>>> if (siz> maxlen) siz = maxlen;
>>> return siz;
>>> }
>>
>> This is not a good implementation of strnlen. The purpose of using strnlen
>> is to avoid reading past the end of a buffer of known size --
>>
>> Quote from
>> <http://msdn.microsoft.com/en-us/library/z50ty2zh%28VS.80%29.aspx>:
>> *
>>>
>>> *strnlen* is not a replacement for *strlen*; *strnlen* is only intended to
>>> be used to calculate the size of incoming untrusted data in a buffer of
>>> known size (such as a network packet). *strnlen* will calculate the length
>>> but not walk past the end of your buffer if the string is unterminated.
>>
>> *
>> Here is a correct (albeit slightly less performant than assembly) strnlen
>> implementation:
>>
>> size_t strnlen(const char* s, size_t maxlen)
>> {
>> const char* s2 = s;
>> while (s2 - s < maxlen && *s2)
>> ++s2;
>> return s2 - s;
>> }
>>
>> Note that this is in accordance with MS' implementation:
>>
>>> However, *strnlen* and *strnlen_l* interpret the string as a single-byte
>>> character string, so its return value is always equal to the number of
>>> bytes, even if the string contains multibyte characters.
>>
>> -John E. / TDM
>>
>
> Kai, OK I guess?
>
Yep, is ok. Maybe we can do here later an assembly implementation for
this, but well first comes correct behavior before speed.
Thanks,
Kai
--
| (\_/) This is Bunny. Copy and paste
| (='.'=) Bunny into your signature to help
| (")_(") him gain world domination
------------------------------------------------------------------------------
This SF.net Dev2Dev email is sponsored by:
Show off your parallel programming skills.
Enter the Intel(R) Threading Challenge 2010.
http://p.sf.net/sfu/intel-thread-sfd
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public