Alexandre Julliard : ntdll: Avoid using memchrW().
Alexandre Julliard
julliard at winehq.org
Mon Mar 30 16:24:26 CDT 2020
Module: wine
Branch: master
Commit: 186f189107972b739311f95a4ba3833838349b32
URL: https://source.winehq.org/git/wine.git/?a=commit;h=186f189107972b739311f95a4ba3833838349b32
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Mar 30 12:09:44 2020 +0200
ntdll: Avoid using memchrW().
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/actctx.c | 15 +++++++++------
dlls/ntdll/directory.c | 9 ++++++---
dlls/ntdll/env.c | 18 ++++++++----------
3 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c
index d5f376f224..cd17c6c135 100644
--- a/dlls/ntdll/actctx.c
+++ b/dlls/ntdll/actctx.c
@@ -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;
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index 80777da149..d025a37241 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -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 */
diff --git a/dlls/ntdll/env.c b/dlls/ntdll/env.c
index 833da58f35..28be49d0b1 100644
--- a/dlls/ntdll/env.c
+++ b/dlls/ntdll/env.c
@@ -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;
}
More information about the wine-cvs
mailing list