lkml.org 
[lkml]   [2012]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/7] string: introduce helper to get base file name from given path
    On 2012-10-02 11:12 -0700, Greg KH wrote:
    > On Tue, Oct 02, 2012 at 08:52:05PM +0300, Andy Shevchenko wrote:
    > > On Tue, Oct 2, 2012 at 8:34 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
    > > > On Tue, Oct 02, 2012 at 06:00:54PM +0300, Andy Shevchenko wrote:
    [...]
    > > >> +/**
    > > >> + * kbasename - return the last part of a pathname.
    > > >> + *
    > > >> + * @path: path to extract the filename from.
    > > >> + */
    > > >> +static inline const char *kbasename(const char *path)
    > > >> +{
    > > >> + const char *tail = strrchr(path, '/');
    > > >> + return tail ? tail + 1 : path;
    > > >
    > > > What happens if '/' is the last thing in the string? You will then
    > > > point to an empty string, which I don't think all callers of this
    > > > function is assuming going to work properly (hint, the USB caller will
    > > > not...)
    > > Thanks for pointing to that. I think it's a usb specific case, so, I
    > > assume your comment related to that patch.
    >
    > Well, if you want your kbasename() function to work like the basename(3)
    > function, you need to properly handle a trailing '/' character.

    Specifically, POSIX basename trims trailing '/' characters, so

    char foo[] = "a/string/with/trailing/slashes///";
    basename(foo);

    results in a string that compares equal to "slashes". This implies that
    it must either modify the provided string or copy it somewhere else
    (POSIX admits either behaviour).

    On the other hand, GNU basename does not trim trailing '/' characters
    and returns the empty string in this case. It's truly unfortunate that
    glibc contains two different functions called basename, but regardless,
    the behaviour of the function in this proposal is certainly not
    unprecedented.

    Cheers,
    --
    Nick Bowler, Elliptic Technologies (http://www.elliptictech.com/)



    \
     
     \ /
      Last update: 2012-10-03 21:21    [W:2.608 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site