aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2005-05-22 03:54:29 +0000
committerChristopher Faylor <me@cgf.cx>2005-05-22 03:54:29 +0000
commitf82ca06eda7ea47511d97b9b5018f78ae82715ef (patch)
tree1a7724d7db5eb1954a2633a55c6b4dc75ac9e141
parentf609f58d32ed91f857135cfc8b76ccba1b24e2e1 (diff)
downloadnewlib-f82ca06eda7ea47511d97b9b5018f78ae82715ef.zip
newlib-f82ca06eda7ea47511d97b9b5018f78ae82715ef.tar.gz
newlib-f82ca06eda7ea47511d97b9b5018f78ae82715ef.tar.bz2
* spawn.cc (find_exec): Accept a PATH-like string in place of an environment
variable. * dlfcn.cc (get_full_path_of_dll): Search /usr/bin (for windows compatibility) and /usr/lib (for UNIX compatibility) when looking for shared libraries. * environ.cc (conv_envvars): Put back LD_LIBRARY_PATH since it is used by get_full_path_of_dll(). * errno.cc (errmap): Map MOD_NOT_FOUND to ENOENT. * cygmagic: Remove debugging cruft.
-rw-r--r--winsup/cygwin/ChangeLog13
-rwxr-xr-xwinsup/cygwin/cygmagic2
-rw-r--r--winsup/cygwin/dlfcn.cc3
-rw-r--r--winsup/cygwin/environ.cc4
-rw-r--r--winsup/cygwin/errno.cc1
-rw-r--r--winsup/cygwin/spawn.cc23
6 files changed, 38 insertions, 8 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index c98e474..e0814bc 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,16 @@
+2005-05-21 Christopher Faylor <cgf@timesys.com>
+
+ * spawn.cc (find_exec): Accept a PATH-like string in place of an
+ environment variable.
+ * dlfcn.cc (get_full_path_of_dll): Search /usr/bin (for windows
+ compatibility) and /usr/lib (for UNIX compatibility) when looking for
+ shared libraries.
+ * environ.cc (conv_envvars): Put back LD_LIBRARY_PATH since it is used
+ by get_full_path_of_dll().
+ * errno.cc (errmap): Map MOD_NOT_FOUND to ENOENT.
+
+ * cygmagic: Remove debugging cruft.
+
2005-05-19 Corinna Vinschen <corinna@vinschen.de>
* include/cygwin/in.h: Add comment.
diff --git a/winsup/cygwin/cygmagic b/winsup/cygwin/cygmagic
index aed508b..8d6457b 100755
--- a/winsup/cygwin/cygmagic
+++ b/winsup/cygwin/cygmagic
@@ -24,7 +24,7 @@ sumit() {
while [ -n "$1" ]; do
define=$1; shift
struct=$1; shift
- sum=`$gcc -E $file | tee /tmp/1 | sed -n "/^$struct/,/^};/p" | sed -e 's/[ ]//g' -e '/^$/d' | tee /tmp/2 | sumit | tee /tmp/3 | awk '{printf "0x%xU", $1}'`
+ sum=`$gcc -E $file | sed -n "/^$struct/,/^};/p" | sed -e 's/[ ]//g' -e '/^$/d' | sumit | tee /tmp/3 | awk '{printf "0x%xU", $1}'`
echo "#define $define $sum"
curr=`sed -n "s/^#[ ]*define CURR_$define[ ][ ]*\([^ ][^ ]*\)/\1/p" $file`
[ "$curr" != "$sum" ] && echo "*** WARNING WARNING WARNING WARNING WARNING ***
diff --git a/winsup/cygwin/dlfcn.cc b/winsup/cygwin/dlfcn.cc
index bc0d701..fc43ed3 100644
--- a/winsup/cygwin/dlfcn.cc
+++ b/winsup/cygwin/dlfcn.cc
@@ -67,7 +67,8 @@ get_full_path_of_dll (const char* str, char *name)
path_conv real_filename;
if (isabspath (name) ||
- (ret = check_path_access ("LD_LIBRARY_PATH=", name, real_filename)) == NULL)
+ (ret = check_path_access ("LD_LIBRARY_PATH=", name, real_filename)
+ ?: check_path_access ("/usr/bin:/usr/lib", name, real_filename)) == NULL)
real_filename.check (name); /* Convert */
if (!real_filename.error)
diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc
index 774ce0b..a280f52 100644
--- a/winsup/cygwin/environ.cc
+++ b/winsup/cygwin/environ.cc
@@ -61,6 +61,10 @@ static win_env conv_envvars[] =
cygwin_posix_to_win32_path_list_buf_size, true},
{NL ("HOME="), NULL, NULL, cygwin_conv_to_full_posix_path,
cygwin_conv_to_full_win32_path, return_MAX_PATH, return_MAX_PATH, false},
+ {NL ("LD_LIBRARY_PATH="), NULL, NULL, cygwin_win32_to_posix_path_list,
+ cygwin_posix_to_win32_path_list,
+ cygwin_win32_to_posix_path_list_buf_size,
+ cygwin_posix_to_win32_path_list_buf_size, true},
{NL ("TMPDIR="), NULL, NULL, cygwin_conv_to_full_posix_path,
cygwin_conv_to_full_win32_path, return_MAX_PATH, return_MAX_PATH, false},
{NL ("TMP="), NULL, NULL, cygwin_conv_to_full_posix_path,
diff --git a/winsup/cygwin/errno.cc b/winsup/cygwin/errno.cc
index f6fe39b..d8af29d 100644
--- a/winsup/cygwin/errno.cc
+++ b/winsup/cygwin/errno.cc
@@ -86,6 +86,7 @@ static NO_COPY struct
X (LOCK_VIOLATION, EACCES),
X (MAX_THRDS_REACHED, EAGAIN),
X (META_EXPANSION_TOO_LONG, EINVAL),
+ X (MOD_NOT_FOUND, ENOENT),
X (MORE_DATA, EAGAIN),
X (NEGATIVE_SEEK, EINVAL),
X (NETNAME_DELETED, ENOSHARE),
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
index b65e003..9faec77 100644
--- a/winsup/cygwin/spawn.cc
+++ b/winsup/cygwin/spawn.cc
@@ -111,17 +111,28 @@ find_exec (const char *name, path_conv& buf, const char *mywinenv,
const char *path;
const char *posix_path;
- /* Return the error condition if this is an absolute path or if there
- is no PATH to search. */
- if (has_slash || strchr (name, '\\') || isdrive (name)
+ posix = (opt & FE_NATIVE) ? NULL : tmp;
+
+ if (strchr (mywinenv, '/'))
+ {
+ /* it's not really an environment variable at all */
+ int n = cygwin_posix_to_win32_path_list_buf_size (mywinenv);
+ char *s = (char *) alloca (n + 1);
+ if (cygwin_posix_to_win32_path_list (mywinenv, s))
+ goto errout;
+ path = s;
+ posix_path = mywinenv - 1;
+ }
+ else if (has_slash || strchr (name, '\\') || isdrive (name)
|| !(winpath = getwinenv (mywinenv))
|| !(path = winpath->get_native ()) || *path == '\0')
+ /* Return the error condition if this is an absolute path or if there
+ is no PATH to search. */
goto errout;
+ else
+ posix_path = winpath->get_posix () - 1;
debug_printf ("%s%s", mywinenv, path);
-
- posix = (opt & FE_NATIVE) ? NULL : tmp;
- posix_path = winpath->get_posix () - 1;
/* Iterate over the specified path, looking for the file with and
without executable extensions. */
do