summaryrefslogtreecommitdiff
path: root/libguile/filesys.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2019-08-02 14:31:46 +0200
committerAndy Wingo <wingo@pobox.com>2019-08-02 14:31:46 +0200
commit0a78d39b7735aefc265378556960dc2fed993de7 (patch)
tree3e4df0bdfeae07a49829eac662ef3c88a29b7650 /libguile/filesys.c
parentcbacc7782bbe6db23a1e165e2654e67c80fdbb36 (diff)
parent36ad1d24b3d2c174a64c445502a36f19605dbd65 (diff)
downloadguile-0a78d39b7735aefc265378556960dc2fed993de7.tar.gz
Merge from stable-2.2
Diffstat (limited to 'libguile/filesys.c')
-rw-r--r--libguile/filesys.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/libguile/filesys.c b/libguile/filesys.c
index ccec10b8b..4f7115397 100644
--- a/libguile/filesys.c
+++ b/libguile/filesys.c
@@ -1608,11 +1608,20 @@ SCM_DEFINE (scm_basename, "basename", 1, 1, 0,
c_filename = scm_to_utf8_string (filename);
scm_dynwind_free (c_filename);
- c_last_component = last_component (c_filename);
- if (!c_last_component)
- res = filename;
+ if (strcmp (c_filename, "/") == 0
+ || strcmp (c_filename, "//") == 0)
+ /* As per
+ <http://pubs.opengroup.org/onlinepubs/9699919799/functions/basename.html>,
+ "/" and "//" are treated specially. */
+ res = scm_from_utf8_string ("/");
else
- res = scm_from_utf8_string (c_last_component);
+ {
+ c_last_component = last_component (c_filename);
+ if (!c_last_component)
+ res = filename;
+ else
+ res = scm_from_utf8_string (c_last_component);
+ }
scm_dynwind_end ();
if (!SCM_UNBNDP (suffix) &&