msvcrt: Don't duplicate _wsearchenv_s code in _wsearchenv.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 1b5a551324)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
stable
Piotr Caban 2020-01-29 13:42:23 +01:00 committed by Michael Stefaniuc
parent 99c683af96
commit 446daec1f5
1 changed files with 8 additions and 58 deletions

View File

@ -1733,64 +1733,6 @@ void CDECL MSVCRT__searchenv(const char* file, const char* env, char *buf)
MSVCRT__searchenv_s(file, env, buf, MAX_PATH);
}
/*********************************************************************
* _wsearchenv (MSVCRT.@)
*
* Unicode version of _searchenv
*/
void CDECL MSVCRT__wsearchenv(const MSVCRT_wchar_t* file, const MSVCRT_wchar_t* env, MSVCRT_wchar_t *buf)
{
MSVCRT_wchar_t *envVal, *penv, *end;
MSVCRT_wchar_t path[MAX_PATH];
MSVCRT_size_t path_len, fname_len = strlenW(file);
*buf = '\0';
/* Try CWD first */
if (GetFileAttributesW( file ) != INVALID_FILE_ATTRIBUTES)
{
GetFullPathNameW( file, MAX_PATH, buf, NULL );
return;
}
/* Search given environment variable */
envVal = MSVCRT__wgetenv(env);
if (!envVal)
{
msvcrt_set_errno(ERROR_FILE_NOT_FOUND);
return;
}
penv = envVal;
TRACE(":searching for %s in paths %s\n", debugstr_w(file), debugstr_w(envVal));
for(; *penv; penv = (*end ? end + 1 : end))
{
end = penv;
while(*end && *end != ';') end++; /* Find end of next path */
path_len = end - penv;
if (!path_len || path_len >= MAX_PATH)
continue;
memcpy(path, penv, path_len * sizeof(MSVCRT_wchar_t));
if (path[path_len - 1] != '/' && path[path_len - 1] != '\\')
path[path_len++] = '\\';
if (path_len + fname_len >= MAX_PATH)
continue;
memcpy(path + path_len, file, (fname_len + 1) * sizeof(MSVCRT_wchar_t));
TRACE("Checking for file %s\n", debugstr_w(path));
if (GetFileAttributesW( path ) != INVALID_FILE_ATTRIBUTES)
{
memcpy(buf, path, (path_len + fname_len + 1) * sizeof(MSVCRT_wchar_t));
return;
}
}
msvcrt_set_errno(ERROR_FILE_NOT_FOUND);
return;
}
/*********************************************************************
* _wsearchenv_s (MSVCRT.@)
*/
@ -1876,3 +1818,11 @@ int CDECL MSVCRT__wsearchenv_s(const MSVCRT_wchar_t* file, const MSVCRT_wchar_t*
*MSVCRT__errno() = MSVCRT_ENOENT;
return MSVCRT_ENOENT;
}
/*********************************************************************
* _wsearchenv (MSVCRT.@)
*/
void CDECL MSVCRT__wsearchenv(const MSVCRT_wchar_t* file, const MSVCRT_wchar_t* env, MSVCRT_wchar_t *buf)
{
MSVCRT__wsearchenv_s(file, env, buf, MAX_PATH);
}