I am not sure if this is intentional, but the new `file-name-split' is a bit unintuitive in this edge-case: (file-name-split "/") → ("" "" "") while (file-name-split "/a") → ("" "a") (file-name-split "a/") → ("a" "") (file-name-split "a/b") → ("a" "b") another few peculiar cases might be (file-name-split "//") → ("/" "" "") (file-name-split "///") → ("" "" "") (file-name-split "////") → ("" "" "") as I'd expect '/' (in the first case) to never be part of a file name (at least on a *nix system). This all appears to happen only if there is no actual file name to be found: (file-name-split "a/") → ("a" "") (file-name-split "a//") → ("a" "") (file-name-split "a///") → ("a" "") One simple solution might just be to remove all empty strings from the return value of `file-name-split', as to my knowledge empty file names are now allowed (?):