mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
[SHLWAPI][SHLWAPI_APITEST][SDK] PathFileExistsDefExtAndAttributesW (#6879)
Implementing missing features... JIRA issue: CORE-19278 - Implement PathFileExistsDefExtAndAttributesW function. - Add its prototype to <shlwapi_undoc.h>. - Modify shlwapi.spec. - Add PathFileExistsDefExtAndAttributesW testcase.
This commit is contained in:
parent
96acfcb3dc
commit
ac0bcf4a90
6 changed files with 112 additions and 2 deletions
|
@ -508,7 +508,7 @@
|
|||
508 stdcall -noname SHPropertyBag_WriteDWORD(ptr wstr long)
|
||||
509 stdcall -noname IUnknown_OnFocusChangeIS(ptr ptr long)
|
||||
510 stdcall -noname SHLockSharedEx(ptr long long)
|
||||
511 stdcall -stub -noname PathFileExistsDefExtAndAttributesW(wstr long ptr)
|
||||
511 stdcall -noname PathFileExistsDefExtAndAttributesW(wstr long ptr)
|
||||
512 stub -ordinal IStream_ReadPidl
|
||||
513 stub -ordinal IStream_WritePidl
|
||||
514 stdcall -noname IUnknown_ProfferService(ptr ptr ptr ptr)
|
||||
|
|
|
@ -77,3 +77,41 @@ IContextMenu_Invoke(
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* PathFileExistsDefExtAndAttributesW [SHLWAPI.511]
|
||||
*
|
||||
* @param pszPath The path string.
|
||||
* @param dwWhich The WHICH_... flags.
|
||||
* @param pdwFileAttributes A pointer to the file attributes. Optional.
|
||||
* @return TRUE if successful.
|
||||
*/
|
||||
BOOL WINAPI
|
||||
PathFileExistsDefExtAndAttributesW(
|
||||
_Inout_ LPWSTR pszPath,
|
||||
_In_ DWORD dwWhich,
|
||||
_Out_opt_ LPDWORD pdwFileAttributes)
|
||||
{
|
||||
TRACE("(%s, 0x%lX, %p)\n", debugstr_w(pszPath), dwWhich, pdwFileAttributes);
|
||||
|
||||
if (pdwFileAttributes)
|
||||
*pdwFileAttributes = INVALID_FILE_ATTRIBUTES;
|
||||
|
||||
if (!pszPath)
|
||||
return FALSE;
|
||||
|
||||
if (!dwWhich || (*PathFindExtensionW(pszPath) && (dwWhich & WHICH_OPTIONAL)))
|
||||
return PathFileExistsAndAttributesW(pszPath, pdwFileAttributes);
|
||||
|
||||
if (!PathFileExistsDefExtW(pszPath, dwWhich))
|
||||
{
|
||||
if (pdwFileAttributes)
|
||||
*pdwFileAttributes = INVALID_FILE_ATTRIBUTES;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (pdwFileAttributes)
|
||||
*pdwFileAttributes = GetFileAttributesW(pszPath);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ include_directories($<TARGET_FILE_DIR:shlwapi_resource_dll>)
|
|||
|
||||
list(APPEND SOURCE
|
||||
AssocQueryString.c
|
||||
PathFileExistsDefExtAndAttributesW.c
|
||||
PathFindOnPath.c
|
||||
PathIsUNC.c
|
||||
PathIsUNCServer.c
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* PROJECT: ReactOS api tests
|
||||
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
||||
* PURPOSE: Tests for PathFileExistsDefExtAndAttributesW
|
||||
* COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
||||
*/
|
||||
|
||||
#include <apitest.h>
|
||||
#include <shlobj.h>
|
||||
#include <shlwapi.h>
|
||||
#include <shlwapi_undoc.h>
|
||||
|
||||
START_TEST(PathFileExistsDefExtAndAttributesW)
|
||||
{
|
||||
WCHAR szPath[MAX_PATH];
|
||||
DWORD attrs;
|
||||
BOOL ret;
|
||||
|
||||
/* NULL check */
|
||||
ret = PathFileExistsDefExtAndAttributesW(NULL, 0, NULL);
|
||||
ok_int(ret, FALSE);
|
||||
|
||||
/* Not existent file */
|
||||
lstrcpynW(szPath, L"Not Existent File.txt", _countof(szPath));
|
||||
ret = PathFileExistsDefExtAndAttributesW(szPath, 0, NULL);
|
||||
ok_int(ret, FALSE);
|
||||
|
||||
/* "Windows" directory */
|
||||
GetWindowsDirectoryW(szPath, _countof(szPath));
|
||||
ret = PathFileExistsDefExtAndAttributesW(szPath, 0, NULL);
|
||||
ok_int(ret, TRUE);
|
||||
|
||||
/* "Windows" directory with attributes check */
|
||||
attrs = 0;
|
||||
ret = PathFileExistsDefExtAndAttributesW(szPath, 0, &attrs);
|
||||
ok_int(ret, TRUE);
|
||||
ok(attrs != 0 && attrs != INVALID_FILE_ATTRIBUTES, "attrs was 0x%lX\n", attrs);
|
||||
|
||||
/* Find notepad.exe */
|
||||
SearchPathW(NULL, L"notepad.exe", NULL, _countof(szPath), szPath, NULL);
|
||||
ret = PathFileExistsW(szPath);
|
||||
ok_int(ret, TRUE);
|
||||
|
||||
/* Remove .exe */
|
||||
PathRemoveExtensionW(szPath);
|
||||
ret = PathFileExistsW(szPath);
|
||||
ok_int(ret, FALSE);
|
||||
|
||||
/* Add .exe */
|
||||
ret = PathFileExistsDefExtAndAttributesW(szPath, WHICH_EXE, NULL);
|
||||
ok_int(ret, TRUE);
|
||||
ret = PathFileExistsW(szPath);
|
||||
ok_int(ret, TRUE);
|
||||
|
||||
/* notepad.cmd doesn't exist */
|
||||
PathRemoveExtensionW(szPath);
|
||||
ret = PathFileExistsDefExtAndAttributesW(szPath, WHICH_CMD, NULL);
|
||||
ok_int(ret, FALSE);
|
||||
ret = PathFileExistsW(szPath);
|
||||
ok_int(ret, FALSE);
|
||||
}
|
|
@ -2,6 +2,7 @@
|
|||
#include <apitest.h>
|
||||
|
||||
extern void func_AssocQueryString(void);
|
||||
extern void func_PathFileExistsDefExtAndAttributesW(void);
|
||||
extern void func_PathFindOnPath(void);
|
||||
extern void func_isuncpath(void);
|
||||
extern void func_isuncpathserver(void);
|
||||
|
@ -19,6 +20,7 @@ extern void func_StrFormatByteSizeW(void);
|
|||
const struct test winetest_testlist[] =
|
||||
{
|
||||
{ "AssocQueryString", func_AssocQueryString },
|
||||
{ "PathFileExistsDefExtAndAttributesW", func_PathFileExistsDefExtAndAttributesW },
|
||||
{ "PathFindOnPath", func_PathFindOnPath },
|
||||
{ "PathIsUNC", func_isuncpath },
|
||||
{ "PathIsUNCServer", func_isuncpathserver },
|
||||
|
|
|
@ -283,7 +283,8 @@ ShellMessageBoxWrapW(
|
|||
_In_ UINT fuStyle,
|
||||
...);
|
||||
|
||||
/* dwWhich flags for PathFileExistsDefExtW and PathFindOnPathExW */
|
||||
/* dwWhich flags for PathFileExistsDefExtW, PathFindOnPathExW,
|
||||
* and PathFileExistsDefExtAndAttributesW */
|
||||
#define WHICH_PIF (1 << 0)
|
||||
#define WHICH_COM (1 << 1)
|
||||
#define WHICH_EXE (1 << 2)
|
||||
|
@ -309,6 +310,13 @@ ShellMessageBoxWrapW(
|
|||
#define PATH_CHAR_CLASS_ANY 0xffffffff
|
||||
|
||||
BOOL WINAPI PathFileExistsDefExtW(LPWSTR lpszPath, DWORD dwWhich);
|
||||
|
||||
BOOL WINAPI
|
||||
PathFileExistsDefExtAndAttributesW(
|
||||
_Inout_ LPWSTR pszPath,
|
||||
_In_ DWORD dwWhich,
|
||||
_Out_opt_ LPDWORD pdwFileAttributes);
|
||||
|
||||
BOOL WINAPI PathFindOnPathExW(LPWSTR lpszFile, LPCWSTR *lppszOtherDirs, DWORD dwWhich);
|
||||
VOID WINAPI FixSlashesAndColonW(LPWSTR);
|
||||
BOOL WINAPI PathIsValidCharA(char c, DWORD dwClass);
|
||||
|
|
Loading…
Reference in a new issue