summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/path.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/path.cc')
-rw-r--r--winsup/cygwin/path.cc17
1 files changed, 15 insertions, 2 deletions
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