diff options
Diffstat (limited to 'winsup/cygwin/path.cc')
-rw-r--r-- | winsup/cygwin/path.cc | 17 |
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 |