Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
9bd13c93
Commit
9bd13c93
authored
Jul 18, 2010
by
Andrew Nguyen
Committed by
Alexandre Julliard
Jul 19, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
shlwapi: Implement StrStrNW.
parent
355057d5
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
122 additions
and
0 deletions
+122
-0
shlwapi.spec
dlls/shlwapi/shlwapi.spec
+1
-0
string.c
dlls/shlwapi/string.c
+34
-0
string.c
dlls/shlwapi/tests/string.c
+85
-0
shlwapi.h
include/shlwapi.h
+2
-0
No files found.
dlls/shlwapi/shlwapi.spec
View file @
9bd13c93
...
...
@@ -801,6 +801,7 @@
@ stdcall StrStrA(str str)
@ stdcall StrStrIA(str str)
@ stdcall StrStrIW(wstr wstr)
@ stdcall StrStrNW(wstr wstr long)
@ stdcall StrStrW(wstr wstr)
@ stdcall StrToIntA(str)
@ stdcall StrToIntExA(str long ptr)
...
...
dlls/shlwapi/string.c
View file @
9bd13c93
...
...
@@ -710,6 +710,40 @@ LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch)
}
/*************************************************************************
* StrStrNW [SHLWAPI.@]
*
* Find a substring within a string up to a given number of initial characters.
*
* PARAMS
* lpFirst [I] String to search in
* lpSrch [I] String to look for
* cchMax [I] Maximum number of initial search characters
*
* RETURNS
* The start of lpFirst within lpSrch, or NULL if not found.
*/
LPWSTR
WINAPI
StrStrNW
(
LPCWSTR
lpFirst
,
LPCWSTR
lpSrch
,
UINT
cchMax
)
{
UINT
i
;
int
len
;
TRACE
(
"(%s, %s, %u)
\n
"
,
debugstr_w
(
lpFirst
),
debugstr_w
(
lpSrch
),
cchMax
);
if
(
!
lpFirst
||
!
lpSrch
||
!*
lpSrch
||
!
cchMax
)
return
NULL
;
len
=
strlenW
(
lpSrch
);
for
(
i
=
cchMax
;
*
lpFirst
&&
(
i
>
0
);
i
--
,
lpFirst
++
)
{
if
(
!
strncmpW
(
lpFirst
,
lpSrch
,
len
))
return
(
LPWSTR
)
lpFirst
;
}
return
NULL
;
}
/*************************************************************************
* StrToIntA [SHLWAPI.@]
*
* Read a signed integer from a string.
...
...
dlls/shlwapi/tests/string.c
View file @
9bd13c93
...
...
@@ -58,6 +58,7 @@ static BOOL (WINAPI *pStrIsIntlEqualW)(BOOL,LPCWSTR,LPCWSTR,int);
static
HRESULT
(
WINAPI
*
pStrRetToBSTR
)(
STRRET
*
,
void
*
,
BSTR
*
);
static
HRESULT
(
WINAPI
*
pStrRetToBufA
)(
STRRET
*
,
LPCITEMIDLIST
,
LPSTR
,
UINT
);
static
HRESULT
(
WINAPI
*
pStrRetToBufW
)(
STRRET
*
,
LPCITEMIDLIST
,
LPWSTR
,
UINT
);
static
LPWSTR
(
WINAPI
*
pStrStrNW
)(
LPCWSTR
,
LPCWSTR
,
UINT
);
static
INT
(
WINAPIV
*
pwnsprintfA
)(
LPSTR
,
INT
,
LPCSTR
,
...);
static
INT
(
WINAPIV
*
pwnsprintfW
)(
LPWSTR
,
INT
,
LPCWSTR
,
...);
static
LPWSTR
(
WINAPI
*
pStrChrNW
)(
LPWSTR
,
WCHAR
,
UINT
);
...
...
@@ -1165,6 +1166,88 @@ static void test_StrStrIW(void)
}
}
static
void
test_StrStrNW
(
void
)
{
static
const
WCHAR
emptyW
[]
=
{
0
};
static
const
WCHAR
deadbeefW
[]
=
{
'D'
,
'e'
,
'A'
,
'd'
,
'B'
,
'e'
,
'E'
,
'f'
,
0
};
static
const
WCHAR
deadW
[]
=
{
'D'
,
'e'
,
'A'
,
'd'
,
0
};
static
const
WCHAR
dead_lowerW
[]
=
{
'd'
,
'e'
,
'a'
,
'd'
,
0
};
static
const
WCHAR
adbeW
[]
=
{
'A'
,
'd'
,
'B'
,
'e'
,
0
};
static
const
WCHAR
adbe_lowerW
[]
=
{
'a'
,
'd'
,
'b'
,
'e'
,
0
};
static
const
WCHAR
beefW
[]
=
{
'B'
,
'e'
,
'E'
,
'f'
,
0
};
static
const
WCHAR
beef_lowerW
[]
=
{
'b'
,
'e'
,
'e'
,
'f'
,
0
};
const
struct
{
const
WCHAR
*
search
;
const
UINT
count
;
const
WCHAR
*
expect
;
}
StrStrNW_cases
[]
=
{
{
emptyW
,
sizeof
(
deadbeefW
)
/
sizeof
(
WCHAR
),
NULL
},
{
deadW
,
sizeof
(
deadbeefW
)
/
sizeof
(
WCHAR
),
deadbeefW
},
{
dead_lowerW
,
sizeof
(
deadbeefW
)
/
sizeof
(
WCHAR
),
NULL
},
{
adbeW
,
sizeof
(
deadbeefW
)
/
sizeof
(
WCHAR
),
deadbeefW
+
2
},
{
adbe_lowerW
,
sizeof
(
deadbeefW
)
/
sizeof
(
WCHAR
),
NULL
},
{
beefW
,
sizeof
(
deadbeefW
)
/
sizeof
(
WCHAR
),
deadbeefW
+
4
},
{
beef_lowerW
,
sizeof
(
deadbeefW
)
/
sizeof
(
WCHAR
),
NULL
},
{
beefW
,
0
,
NULL
},
{
beefW
,
1
,
NULL
},
{
beefW
,
2
,
NULL
},
{
beefW
,
3
,
NULL
},
{
beefW
,
4
,
NULL
},
{
beefW
,
5
,
deadbeefW
+
4
},
{
beefW
,
6
,
deadbeefW
+
4
},
{
beefW
,
7
,
deadbeefW
+
4
},
{
beefW
,
8
,
deadbeefW
+
4
},
{
beefW
,
9
,
deadbeefW
+
4
},
};
LPWSTR
ret
;
UINT
i
;
if
(
!
pStrStrNW
)
{
win_skip
(
"StrStrNW() is not available
\n
"
);
return
;
}
ret
=
pStrStrNW
(
NULL
,
NULL
,
0
);
ok
(
!
ret
,
"Expected StrStrNW to return NULL, got %p
\n
"
,
ret
);
ret
=
pStrStrNW
(
NULL
,
NULL
,
10
);
ok
(
!
ret
,
"Expected StrStrNW to return NULL, got %p
\n
"
,
ret
);
ret
=
pStrStrNW
(
NULL
,
emptyW
,
10
);
ok
(
!
ret
,
"Expected StrStrNW to return NULL, got %p
\n
"
,
ret
);
ret
=
pStrStrNW
(
emptyW
,
NULL
,
10
);
ok
(
!
ret
,
"Expected StrStrNW to return NULL, got %p
\n
"
,
ret
);
ret
=
pStrStrNW
(
emptyW
,
emptyW
,
10
);
ok
(
!
ret
,
"Expected StrStrNW to return NULL, got %p
\n
"
,
ret
);
for
(
i
=
0
;
i
<
sizeof
(
StrStrNW_cases
)
/
sizeof
(
StrStrNW_cases
[
0
]);
i
++
)
{
ret
=
pStrStrNW
(
deadbeefW
,
StrStrNW_cases
[
i
].
search
,
StrStrNW_cases
[
i
].
count
);
ok
(
ret
==
StrStrNW_cases
[
i
].
expect
,
"[%d] Expected StrStrNW to return %p, got %p
\n
"
,
i
,
StrStrNW_cases
[
i
].
expect
,
ret
);
}
/* StrStrNW accepts counts larger than the search string length but rejects
* counts larger than around 2G. The limit seems to change based on the
* caller executable itself. */
ret
=
pStrStrNW
(
deadbeefW
,
beefW
,
100
);
ok
(
ret
==
deadbeefW
+
4
,
"Expected StrStrNW to return deadbeefW + 4, got %p
\n
"
,
ret
);
if
(
0
)
{
ret
=
pStrStrNW
(
deadbeefW
,
beefW
,
~
0U
);
ok
(
!
ret
,
"Expected StrStrNW to return NULL, got %p
\n
"
,
ret
);
}
}
START_TEST
(
string
)
{
HMODULE
hShlwapi
;
...
...
@@ -1195,6 +1278,7 @@ START_TEST(string)
pStrRetToBSTR
=
(
void
*
)
GetProcAddress
(
hShlwapi
,
"StrRetToBSTR"
);
pStrRetToBufA
=
(
void
*
)
GetProcAddress
(
hShlwapi
,
"StrRetToBufA"
);
pStrRetToBufW
=
(
void
*
)
GetProcAddress
(
hShlwapi
,
"StrRetToBufW"
);
pStrStrNW
=
(
void
*
)
GetProcAddress
(
hShlwapi
,
"StrStrNW"
);
pwnsprintfA
=
(
void
*
)
GetProcAddress
(
hShlwapi
,
"wnsprintfA"
);
pwnsprintfW
=
(
void
*
)
GetProcAddress
(
hShlwapi
,
"wnsprintfW"
);
...
...
@@ -1238,6 +1322,7 @@ START_TEST(string)
test_StrStrW
();
test_StrStrIA
();
test_StrStrIW
();
test_StrStrNW
();
CoUninitialize
();
}
include/shlwapi.h
View file @
9bd13c93
...
...
@@ -876,6 +876,8 @@ LPSTR WINAPI StrStrIA(LPCSTR,LPCSTR);
LPWSTR
WINAPI
StrStrIW
(
LPCWSTR
,
LPCWSTR
);
#define StrStrI WINELIB_NAME_AW(StrStrI)
LPWSTR
WINAPI
StrStrNW
(
LPCWSTR
,
LPCWSTR
,
UINT
);
int
WINAPI
StrToIntA
(
LPCSTR
);
int
WINAPI
StrToIntW
(
LPCWSTR
);
#define StrToInt WINELIB_NAME_AW(StrToInt)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment