]> sourceware.org Git - newlib-cygwin.git/commitdiff
* dlfcn.cc (check_path_access): Call find_exec with FE_DLL option.
authorCorinna Vinschen <corinna@vinschen.de>
Tue, 31 Jan 2006 21:49:39 +0000 (21:49 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Tue, 31 Jan 2006 21:49:39 +0000 (21:49 +0000)
* 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.

winsup/cygwin/ChangeLog
winsup/cygwin/dlfcn.cc
winsup/cygwin/path.h
winsup/cygwin/spawn.cc

index 33607f4b3e5396125edc52bafb1c6e4d4cf431f3..8e9c3f04d6983696a668c4cfbe077cae15776aaf 100644 (file)
@@ -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>
 
        * spawn.cc (av::fixup): Remove unused argument.
index 5d0fb6d8fb05ff0423941a05b0282eac2586eef8..5bea77419958f01c9532ee6378068b932f23716a 100644 (file)
@@ -37,7 +37,7 @@ set_dl_error (const char *str)
 inline const char * __stdcall
 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.
index 6bd18742fa581f8ef28bad0a8ac4f5bd7d133fb1..9bc582bd0c86d2a2193c2eccd15cad6819330edd 100644 (file)
@@ -266,7 +266,8 @@ enum fe_types
   FE_NADA = 0,         /* Nothing special */
   FE_NNF = 1,          /* Return NULL if not found */
   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 *winenv = "PATH=",
index f906dce68faece6579b94ff36cab205e4620c1fa..b56d8bb65dd9a897786b06afb9f3c1d3d0477645 100644 (file)
@@ -37,11 +37,16 @@ details. */
 #define LINE_BUF_CHUNK (CYG_MAX_PATH * 2)
 #define MAXWINCMDLEN 32767
 
-static suffix_info std_suffixes[] =
+static suffix_info exe_suffixes[] =
 {
   suffix_info (".exe", 1), suffix_info ("", 1),
-  suffix_info (".com"), suffix_info (".cmd"),
-  suffix_info (".bat"), suffix_info (".dll"),
+  suffix_info (".com"),
+  suffix_info (NULL)
+};
+
+static suffix_info dll_suffixes[] =
+{
+  suffix_info (".dll"),
   suffix_info (NULL)
 };
 
@@ -55,13 +60,14 @@ DWORD dwExeced;
    Returns (possibly NULL) suffix */
 
 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;
 
   err = 0;
   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 ())
     {
@@ -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
      do this. */
   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)
        {
@@ -160,11 +166,9 @@ find_exec (const char *name, path_conv& buf, const char *mywinenv,
 
       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
-             && (*suffix == '\0' || strcmp (suffix, ".exe"))
-             && check_file_access (buf, X_OK))
+         if (buf.has_acls () && allow_ntsec && check_file_access (buf, X_OK))
            continue;
 
          if (posix == tmp)
@@ -469,7 +473,7 @@ spawn_guts (const char * prog_arg, const char *const *argv,
 
   int err;
   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);
       res = -1;
This page took 0.033868 seconds and 5 git commands to generate.