msvcrt: Don't duplicate _searchenv_s code in _searchenv.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
feature/deterministic
Piotr Caban 2020-01-29 13:42:15 +01:00 committed by Alexandre Julliard
parent 2e7ad72a8d
commit 98c554ac06
1 changed files with 8 additions and 82 deletions

View File

@ -1640,88 +1640,6 @@ range:
return MSVCRT_ERANGE;
}
/*********************************************************************
* _searchenv (MSVCRT.@)
*
* Search for a file in a list of paths from an environment variable.
*
* PARAMS
* file [I] Name of the file to search for.
* env [I] Name of the environment variable containing a list of paths.
* buf [O] Destination for the found file path.
*
* RETURNS
* Nothing. If the file is not found, buf will contain an empty string
* and errno is set.
*/
void CDECL MSVCRT__searchenv(const char* file, const char* env, char *buf)
{
char*envVal, *penv, *end;
char path[MAX_PATH];
MSVCRT_size_t path_len, fname_len = strlen(file);
*buf = '\0';
/* Try CWD first */
if (GetFileAttributesA( file ) != INVALID_FILE_ATTRIBUTES)
{
GetFullPathNameA( file, MAX_PATH, buf, NULL );
return;
}
/* Search given environment variable */
envVal = MSVCRT_getenv(env);
if (!envVal)
{
msvcrt_set_errno(ERROR_FILE_NOT_FOUND);
return;
}
penv = envVal;
TRACE(":searching for %s in paths %s\n", file, envVal);
for(; *penv; penv = (*end ? end + 1 : end))
{
end = penv;
path_len = 0;
while(*end && *end != ';' && path_len < MAX_PATH)
{
if (*end == '"')
{
end++;
while(*end && *end != '"' && path_len < MAX_PATH)
{
path[path_len++] = *end;
end++;
}
if (*end == '"') end++;
continue;
}
path[path_len++] = *end;
end++;
}
if (!path_len || path_len >= MAX_PATH)
continue;
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);
TRACE("Checking for file %s\n", path);
if (GetFileAttributesA( path ) != INVALID_FILE_ATTRIBUTES)
{
memcpy(buf, path, path_len + fname_len + 1);
return;
}
}
msvcrt_set_errno(ERROR_FILE_NOT_FOUND);
return;
}
/*********************************************************************
* _searchenv_s (MSVCRT.@)
*/
@ -1807,6 +1725,14 @@ int CDECL MSVCRT__searchenv_s(const char* file, const char* env, char *buf, MSVC
return MSVCRT_ENOENT;
}
/*********************************************************************
* _searchenv (MSVCRT.@)
*/
void CDECL MSVCRT__searchenv(const char* file, const char* env, char *buf)
{
MSVCRT__searchenv_s(file, env, buf, MAX_PATH);
}
/*********************************************************************
* _wsearchenv (MSVCRT.@)
*