mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
'basename' correctly handles "/" and "//".
* libguile/filesys.c (scm_basename): Special-case "/" and "//". * test-suite/tests/filesys.test ("basename"): New test prefix.
This commit is contained in:
parent
65d98d8fd2
commit
36ad1d24b3
2 changed files with 20 additions and 5 deletions
|
@ -1602,11 +1602,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) &&
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;;;; filesys.test --- test file system functions -*- scheme -*-
|
||||
;;;;
|
||||
;;;; Copyright (C) 2004, 2006, 2013 Free Software Foundation, Inc.
|
||||
;;;; Copyright (C) 2004, 2006, 2013, 2019 Free Software Foundation, Inc.
|
||||
;;;;
|
||||
;;;; This library is free software; you can redistribute it and/or
|
||||
;;;; modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -222,6 +222,12 @@
|
|||
(cons (join-thread child) out)))
|
||||
(throw 'unresolved)))))
|
||||
|
||||
(with-test-prefix "basename"
|
||||
|
||||
(pass-if-equal "/" "/" (basename "/"))
|
||||
(pass-if-equal "//" "/" (basename "//"))
|
||||
(pass-if-equal "a/b/c" "c" (basename "a/b/c")))
|
||||
|
||||
(delete-file (test-file))
|
||||
(when (file-exists? (test-symlink))
|
||||
(delete-file (test-symlink)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue