diff options
author | Christopher Faylor <me@cgf.cx> | 2005-05-22 03:54:29 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2005-05-22 03:54:29 +0000 |
commit | f82ca06eda7ea47511d97b9b5018f78ae82715ef (patch) | |
tree | 1a7724d7db5eb1954a2633a55c6b4dc75ac9e141 | |
parent | f609f58d32ed91f857135cfc8b76ccba1b24e2e1 (diff) | |
download | newlib-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/ChangeLog | 13 | ||||
-rwxr-xr-x | winsup/cygwin/cygmagic | 2 | ||||
-rw-r--r-- | winsup/cygwin/dlfcn.cc | 3 | ||||
-rw-r--r-- | winsup/cygwin/environ.cc | 4 | ||||
-rw-r--r-- | winsup/cygwin/errno.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/spawn.cc | 23 |
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 |