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>
This commit is contained in:
parent
2e7ad72a8d
commit
98c554ac06
|
@ -1640,88 +1640,6 @@ range:
|
||||||
return MSVCRT_ERANGE;
|
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.@)
|
* _searchenv_s (MSVCRT.@)
|
||||||
*/
|
*/
|
||||||
|
@ -1807,6 +1725,14 @@ int CDECL MSVCRT__searchenv_s(const char* file, const char* env, char *buf, MSVC
|
||||||
return MSVCRT_ENOENT;
|
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.@)
|
* _wsearchenv (MSVCRT.@)
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue