ntdll: Avoid using memchrW().

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2020-03-30 12:09:44 +02:00
parent 6fc9088789
commit 186f189107
3 changed files with 23 additions and 19 deletions

View File

@ -1272,6 +1272,7 @@ static xmlstr_t find_xmlns( xmlbuf_t *xmlbuf, const xmlstr_t *name )
static BOOL next_xml_attr(xmlbuf_t *xmlbuf, struct xml_attr *attr, BOOL *end)
{
const WCHAR* ptr;
WCHAR quote;
if (xmlbuf->error) return FALSE;
@ -1319,11 +1320,12 @@ static BOOL next_xml_attr(xmlbuf_t *xmlbuf, struct xml_attr *attr, BOOL *end)
if (ptr == xmlbuf->end || (*ptr != '"' && *ptr != '\'')) return set_error( xmlbuf );
attr->value.ptr = ++ptr;
quote = *ptr++;
attr->value.ptr = ptr;
if (ptr == xmlbuf->end) return set_error( xmlbuf );
ptr = memchrW(ptr, ptr[-1], xmlbuf->end - ptr);
if (!ptr)
while (ptr < xmlbuf->end && *ptr != quote) ptr++;
if (ptr == xmlbuf->end)
{
xmlbuf->ptr = xmlbuf->end;
return set_error( xmlbuf );
@ -1369,8 +1371,8 @@ static BOOL next_xml_elem( xmlbuf_t *xmlbuf, struct xml_elem *elem, const struct
for (;;)
{
ptr = memchrW(xmlbuf->ptr, '<', xmlbuf->end - xmlbuf->ptr);
if (!ptr)
for (ptr = xmlbuf->ptr; ptr < xmlbuf->end; ptr++) if (*ptr == '<') break;
if (ptr == xmlbuf->end)
{
xmlbuf->ptr = xmlbuf->end;
return set_error( xmlbuf );
@ -1447,7 +1449,8 @@ static BOOL parse_text_content(xmlbuf_t* xmlbuf, xmlstr_t* content)
if (xmlbuf->error) return FALSE;
if (!(ptr = memchrW(xmlbuf->ptr, '<', xmlbuf->end - xmlbuf->ptr))) return set_error( xmlbuf );
for (ptr = xmlbuf->ptr; ptr < xmlbuf->end; ptr++) if (*ptr == '<') break;
if (ptr == xmlbuf->end) return set_error( xmlbuf );
content->ptr = xmlbuf->ptr;
content->len = ptr - xmlbuf->ptr;

View File

@ -305,9 +305,12 @@ static inline unsigned int dir_info_size( FILE_INFORMATION_CLASS class, unsigned
static inline BOOL has_wildcard( const UNICODE_STRING *mask )
{
return (!mask ||
memchrW( mask->Buffer, '*', mask->Length / sizeof(WCHAR) ) ||
memchrW( mask->Buffer, '?', mask->Length / sizeof(WCHAR) ));
int i;
if (!mask) return TRUE;
for (i = 0; i < mask->Length / sizeof(WCHAR); i++)
if (mask->Buffer[i] == '*' || mask->Buffer[i] == '?') return TRUE;
return FALSE;
}
/* get space from the current directory data buffer, allocating a new one if necessary */

View File

@ -1081,7 +1081,7 @@ NTSTATUS WINAPI RtlExpandEnvironmentStrings( const WCHAR *renv, WCHAR *src, SIZE
WCHAR *dst, SIZE_T count, SIZE_T *plen )
{
SIZE_T len, total_size = 1; /* 1 for terminating '\0' */
LPCWSTR env, p, var;
LPCWSTR env, var;
if (!renv)
{
@ -1094,27 +1094,26 @@ NTSTATUS WINAPI RtlExpandEnvironmentStrings( const WCHAR *renv, WCHAR *src, SIZE
{
if (*src != '%')
{
if ((p = memchrW( src, '%', src_len ))) len = p - src;
else len = src_len;
for (len = 0; len < src_len; len++) if (src[len] == '%') break;
var = src;
src += len;
src_len -= len;
}
else /* we are at the start of a variable */
{
if ((p = memchrW( src + 1, '%', src_len - 1 )))
for (len = 1; len < src_len; len++) if (src[len] == '%') break;
if (len < src_len)
{
len = p - src - 1; /* Length of the variable name */
if ((var = ENV_FindVariable( env, src + 1, len )))
if ((var = ENV_FindVariable( env, src + 1, len - 1 )))
{
src += len + 2; /* Skip the variable name */
src_len -= len + 2;
src += len + 1; /* Skip the variable name */
src_len -= len + 1;
len = strlenW(var);
}
else
{
var = src; /* Copy original name instead */
len += 2;
len++;
src += len;
src_len -= len;
}
@ -1122,7 +1121,6 @@ NTSTATUS WINAPI RtlExpandEnvironmentStrings( const WCHAR *renv, WCHAR *src, SIZE
else /* unfinished variable name, ignore it */
{
var = src;
len = src_len; /* Copy whole string */
src += len;
src_len = 0;
}