OSDN Git Service

* fhandler_process.cc (fhandler_process::fill_filebuf): Disable
authorcorinna <corinna>
Tue, 24 Jan 2006 17:40:55 +0000 (17:40 +0000)
committercorinna <corinna>
Tue, 24 Jan 2006 17:40:55 +0000 (17:40 +0000)
stripping the .exe suffix from the link target in PROCESS_EXE and
PROCESS_EXENAME case.
* path.cc (realpath): Tack on .exe suffix if necessary.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_process.cc
winsup/cygwin/path.cc

index c808f28..7645995 100644 (file)
@@ -1,5 +1,12 @@
 2006-01-24  Corinna Vinschen  <corinna@vinschen.de>
 
+       * 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  <corinna@vinschen.de>
+
        * fhandler_disk_file.cc (fhandler_base::fstat_helper): Try harder
        to determine remote file systems with reliable inode numbers.  Add
        longish comment.
index cb7d907..648ced4 100644 (file)
@@ -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;
index fdba254..a141c06 100644 (file)
@@ -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