diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index c808f28b9..764599513 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2006-01-24 Corinna Vinschen + + * fhandler_process.cc (fhandler_process::fill_filebuf): Disable + stripping the .exe suffix from the link target in PROCESS_EXE and + PROCESS_EXENAME case. + * path.cc (realpath): Tack on .exe suffix if necessary. + 2006-01-24 Corinna Vinschen * fhandler_disk_file.cc (fhandler_base::fstat_helper): Try harder diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc index cb7d9072d..648ced4ab 100644 --- a/winsup/cygwin/fhandler_process.cc +++ b/winsup/cygwin/fhandler_process.cc @@ -450,6 +450,11 @@ fhandler_process::fill_filebuf () else { mount_table->conv_to_posix_path (p->progname, filebuf, 1); +#if 0 + /* Temporarily disabled. The link will have a suffix so that + an open(2) call will succeed on /proc/$PID/exe now. This + might become unnecessary if open(2) handles the .exe suffix + at one point. */ int len = strlen (filebuf); if (len > 4) { @@ -457,6 +462,7 @@ fhandler_process::fill_filebuf () if (strcasematch (s, ".exe")) *s = 0; } +#endif } filesize = strlen (filebuf); break; diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index fdba25400..a141c06fd 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -3723,13 +3723,26 @@ realpath (const char *path, char *resolved) if (!real_path.error && real_path.exists ()) { + /* Check for the suffix being tacked on. */ + int tack_on = 0; + if (real_path.known_suffix) + { + char *c = strrchr (real_path.normalized_path, '.'); + if (!c || !strcasematch (c, real_path.known_suffix)) + tack_on = strlen (real_path.known_suffix); + } + if (!resolved) { - resolved = (char *) malloc (strlen (real_path.normalized_path) + 1); + resolved = (char *) malloc (strlen (real_path.normalized_path) + + tack_on + 1); if (!resolved) return NULL; } - return strcpy (resolved, real_path.normalized_path); + strcpy (resolved, real_path.normalized_path); + if (tack_on) + strcat (resolved, real_path.known_suffix); + return resolved; } /* FIXME: on error, we are supposed to put the name of the path