Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
Bug in Filename.basename?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2007-09-05 (13:01)
From: Markus E L <ls-ocaml-2006@m...>
Subject: Re: [Caml-list] Bug in Filename.basename?

Erik de Castro Lopo wrote:

> Richard Jones wrote:
>> I think the OCaml one is what I'd reasonably expect actually.
>> The GNU documentation for basename says:
>>   `basename' removes any leading directory components from NAME.
>> and a/b/c/ are leading directory components.
> The word "leading" in the above is at best, ambiguous.
> Regardless of what the documentation says, the behaviour of Ocaml's
> basename function is different from the basename program (from the
> GNU coreutils package) on my Linux system.
> Since I suspect that the basename function is meant to emulate the 
> basename program I see the Ocaml function's behaviour as a bug. I
> would however discount this if the behaviour of basename on some
> other commonly used system (eg *BSD) matched the Ocaml behaviour.
> However, here is a comparison chart of what I have tested so far:
>                                  "a/b/c"     "a/b/c/"
>     Linux basename                 "c"         "c"
>     Mac OSX basename               "c"         "c"
>     Ocaml Filename.basename        "c"         "."
> The behaviour of Ocaml's Filename.basename is the same on Linux and
> Mac OSX.


tmp/:$ cat /etc/hosts/
cat: /etc/hosts/: Not a directory

Most shell tools interpret the trailing slash as meaning '[...]/.' .
I'd definitely vote for Linux or Mac OS/X shell basename being buggy
rather than ocamls. Trailing shlashes have meaning (actually I think a
trailing slash should result in a "badly formed path error" but this
convention is probably too deeply entrenched now to fight it).

The standards, though:

 - If there are any trailing slash characters in string, they shall be removed.

 - The same, but only given by example, not by specification

Given how most shell tools interpret trailing slashes I think it's
rather a problem of the standard to introduce inconsistencies in order
to conform to existing practice. In those cases I consider it better
not to orient towards the standard (and who says that OCaml basename
has to work like POSIX or Single Unix basename?).

Regards -- Markus