* dlfcn.cc (check_path_access): Call find_exec with FE_DLL option.
* path.h (enum fe_types): Add FE_DLL value. * spawn.cc (std_suffixes): Remove. (exe_suffixes): New suffix_info for executing files. (dll_suffixes): New suffix_info for searching shared libraries. (perhaps_suffix): Add opt argument. Use dll_suffixes if FE_DLL option is given, exe_suffixes otherwise. (find_exec): Propagate opt argument to perhaps_suffix. Drop suffix check when testing execute permission. (spawn_guts): Call perhaps_suffix with FE_NADA opt argument.
This commit is contained in:
parent
fd34affe5d
commit
4b84e3dcea
|
@ -1,3 +1,16 @@
|
||||||
|
2006-01-31 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* dlfcn.cc (check_path_access): Call find_exec with FE_DLL option.
|
||||||
|
* path.h (enum fe_types): Add FE_DLL value.
|
||||||
|
* spawn.cc (std_suffixes): Remove.
|
||||||
|
(exe_suffixes): New suffix_info for executing files.
|
||||||
|
(dll_suffixes): New suffix_info for searching shared libraries.
|
||||||
|
(perhaps_suffix): Add opt argument. Use dll_suffixes if FE_DLL
|
||||||
|
option is given, exe_suffixes otherwise.
|
||||||
|
(find_exec): Propagate opt argument to perhaps_suffix. Drop suffix
|
||||||
|
check when testing execute permission.
|
||||||
|
(spawn_guts): Call perhaps_suffix with FE_NADA opt argument.
|
||||||
|
|
||||||
2006-01-31 Christopher Faylor <cgf@timesys.com>
|
2006-01-31 Christopher Faylor <cgf@timesys.com>
|
||||||
|
|
||||||
* spawn.cc (av::fixup): Remove unused argument.
|
* spawn.cc (av::fixup): Remove unused argument.
|
||||||
|
|
|
@ -37,7 +37,7 @@ set_dl_error (const char *str)
|
||||||
inline const char * __stdcall
|
inline const char * __stdcall
|
||||||
check_path_access (const char *mywinenv, const char *name, path_conv& buf)
|
check_path_access (const char *mywinenv, const char *name, path_conv& buf)
|
||||||
{
|
{
|
||||||
return find_exec (name, buf, mywinenv, FE_NNF | FE_NATIVE | FE_CWD);
|
return find_exec (name, buf, mywinenv, FE_NNF | FE_NATIVE | FE_CWD | FE_DLL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Search LD_LIBRARY_PATH for dll, if it exists.
|
/* Search LD_LIBRARY_PATH for dll, if it exists.
|
||||||
|
|
|
@ -266,7 +266,8 @@ enum fe_types
|
||||||
FE_NADA = 0, /* Nothing special */
|
FE_NADA = 0, /* Nothing special */
|
||||||
FE_NNF = 1, /* Return NULL if not found */
|
FE_NNF = 1, /* Return NULL if not found */
|
||||||
FE_NATIVE = 2, /* Return native path in path_conv struct */
|
FE_NATIVE = 2, /* Return native path in path_conv struct */
|
||||||
FE_CWD = 4 /* Search CWD for program */
|
FE_CWD = 4, /* Search CWD for program */
|
||||||
|
FE_DLL = 8 /* Search for DLLs, not executables. */
|
||||||
};
|
};
|
||||||
const char * __stdcall find_exec (const char *name, path_conv& buf,
|
const char * __stdcall find_exec (const char *name, path_conv& buf,
|
||||||
const char *winenv = "PATH=",
|
const char *winenv = "PATH=",
|
||||||
|
|
|
@ -37,11 +37,16 @@ details. */
|
||||||
#define LINE_BUF_CHUNK (CYG_MAX_PATH * 2)
|
#define LINE_BUF_CHUNK (CYG_MAX_PATH * 2)
|
||||||
#define MAXWINCMDLEN 32767
|
#define MAXWINCMDLEN 32767
|
||||||
|
|
||||||
static suffix_info std_suffixes[] =
|
static suffix_info exe_suffixes[] =
|
||||||
{
|
{
|
||||||
suffix_info (".exe", 1), suffix_info ("", 1),
|
suffix_info (".exe", 1), suffix_info ("", 1),
|
||||||
suffix_info (".com"), suffix_info (".cmd"),
|
suffix_info (".com"),
|
||||||
suffix_info (".bat"), suffix_info (".dll"),
|
suffix_info (NULL)
|
||||||
|
};
|
||||||
|
|
||||||
|
static suffix_info dll_suffixes[] =
|
||||||
|
{
|
||||||
|
suffix_info (".dll"),
|
||||||
suffix_info (NULL)
|
suffix_info (NULL)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -55,13 +60,14 @@ DWORD dwExeced;
|
||||||
Returns (possibly NULL) suffix */
|
Returns (possibly NULL) suffix */
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
perhaps_suffix (const char *prog, path_conv& buf, int& err)
|
perhaps_suffix (const char *prog, path_conv& buf, int& err, unsigned opt)
|
||||||
{
|
{
|
||||||
char *ext;
|
char *ext;
|
||||||
|
|
||||||
err = 0;
|
err = 0;
|
||||||
debug_printf ("prog '%s'", prog);
|
debug_printf ("prog '%s'", prog);
|
||||||
buf.check (prog, PC_SYM_FOLLOW | PC_NULLEMPTY, std_suffixes);
|
buf.check (prog, PC_SYM_FOLLOW | PC_NULLEMPTY,
|
||||||
|
(opt & FE_DLL) ? dll_suffixes : exe_suffixes);
|
||||||
|
|
||||||
if (buf.isdir ())
|
if (buf.isdir ())
|
||||||
{
|
{
|
||||||
|
@ -106,7 +112,7 @@ find_exec (const char *name, path_conv& buf, const char *mywinenv,
|
||||||
Win32 systems always check . first, but PATH may not be set up to
|
Win32 systems always check . first, but PATH may not be set up to
|
||||||
do this. */
|
do this. */
|
||||||
if ((has_slash || opt & FE_CWD)
|
if ((has_slash || opt & FE_CWD)
|
||||||
&& (suffix = perhaps_suffix (name, buf, err)) != NULL)
|
&& (suffix = perhaps_suffix (name, buf, err, opt)) != NULL)
|
||||||
{
|
{
|
||||||
if (posix && !has_slash)
|
if (posix && !has_slash)
|
||||||
{
|
{
|
||||||
|
@ -160,11 +166,9 @@ find_exec (const char *name, path_conv& buf, const char *mywinenv,
|
||||||
|
|
||||||
debug_printf ("trying %s", tmp);
|
debug_printf ("trying %s", tmp);
|
||||||
|
|
||||||
if ((suffix = perhaps_suffix (tmp, buf, err)) != NULL)
|
if ((suffix = perhaps_suffix (tmp, buf, err, opt)) != NULL)
|
||||||
{
|
{
|
||||||
if (buf.has_acls () && allow_ntsec
|
if (buf.has_acls () && allow_ntsec && check_file_access (buf, X_OK))
|
||||||
&& (*suffix == '\0' || strcmp (suffix, ".exe"))
|
|
||||||
&& check_file_access (buf, X_OK))
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (posix == tmp)
|
if (posix == tmp)
|
||||||
|
@ -469,7 +473,7 @@ spawn_guts (const char * prog_arg, const char *const *argv,
|
||||||
|
|
||||||
int err;
|
int err;
|
||||||
const char *ext;
|
const char *ext;
|
||||||
if ((ext = perhaps_suffix (prog_arg, real_path, err)) == NULL)
|
if ((ext = perhaps_suffix (prog_arg, real_path, err, FE_NADA)) == NULL)
|
||||||
{
|
{
|
||||||
set_errno (err);
|
set_errno (err);
|
||||||
res = -1;
|
res = -1;
|
||||||
|
|
Loading…
Reference in New Issue