Commit 98c554ac authored by Piotr Caban's avatar Piotr Caban Committed by Alexandre Julliard

msvcrt: Don't duplicate _searchenv_s code in _searchenv.

parent 2e7ad72a
......@@ -1641,88 +1641,6 @@ range:
}
/*********************************************************************
* _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.@)
*/
int CDECL MSVCRT__searchenv_s(const char* file, const char* env, char *buf, MSVCRT_size_t count)
......@@ -1808,6 +1726,14 @@ int CDECL MSVCRT__searchenv_s(const char* file, const char* env, char *buf, MSVC
}
/*********************************************************************
* _searchenv (MSVCRT.@)
*/
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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment