Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: gdb-patches@sourceware.org, Christopher Faylor <me@cgf.cx>
Subject: Re: RFA: Use lrealpath instead of gdb_realpath
Date: Sun, 29 May 2005 14:23:00 -0000	[thread overview]
Message-ID: <20050529142112.GB23858@nevyn.them.org> (raw)
In-Reply-To: <uwtpi8m44.fsf@gnu.org>

On Sun, May 29, 2005 at 11:36:27AM +0300, Eli Zaretskii wrote:
> As your patch clearly shows, gdb_realpath is _not_ identical to
> lrealpath.  For example, it doesn't have the Windows code that calls
> GetFullPathName.  So we are not replacing a duplicated function, not
> really.

I don't know how much clearer I can get.  They were duplicated
functions.  I can say that with great certainty, since I used
gdb_realpath as a basis for lrealpath when I needed its functionality
in libiberty.  They have diverged over time.  That creates a
maintenance burden - this particular one in fact.

> Let me explain my concerns about using lrealpath in its current shape:
> 
>  . The Windows code in lrealpath converts all forward slashes to
>    backslashes, which I think is a bad idea.  By contrast, the current
>    gdb_realpath would leave existing forward slashes alone.  That is
>    an incompatible change, and my gut feeling is that we should not
>    risk it.  On top of that, I think we always use '/' to generate
>    file names, so with this change we will produce ugly file names
>    like D:\foo\bar/baz.c.

The Windows maintainers disagree with you.  So, for the record, do I.

>  . The Windows code in lrealpath downcases the file name returned by
>    GetFullPathName.  That might be okay for when we need a canonical
>    file name suitable for comparison by strcmp, but in the case of GDB
>    it is IMHO a misservice to the user, since (a) we correctly use
>    FILENAME_CMP to compare file names, and (b) presenting downcased
>    file names to the user is a gratuitous ugliness that we should try
>    to avoid.
> 
>  . GetFullPathName is documented to work even if the path and/or the
>    file name do not exist.  By contrast, both realpath and
>    canonicalize_file_name are documented to fail if some or all of the
>    components of the resulting file name do not exist.  Thus, I submit
>    that the Windows code is not a faithful emulation of the Posix
>    code, and thus could cause subtle bugs/misfeatures.

These were both implemented by Danny Smith.  You were furious with me
for daring to disagree with you on how DJGPP handles filenames; and now
you're critiquing the mingw maintainers for how they choose to handle
filenames?  Please, pardon me if I find that a bit ironic.

>  . lrealpath uses strdup while gdb_realpath uses xstrdup.  Thus, if
>    we use lrealpath, we will behave differently when we run out of
>    memory.

That said, thank you for catching this!  I will not apply the patch.
This is definitely a problem since existing users assume this behavior.
I was asked to make this change when I moved the function into
libiberty, since libiberty functions should not abort on their own
initiative.

It is not worth my time to continue arguing about filename handling;
consider the patch withdrawn indefinitely.

> > --- symtab.c	8 Mar 2005 04:34:44 -0000	1.145
> > +++ symtab.c	28 May 2005 23:13:40 -0000
> > @@ -163,7 +163,7 @@ lookup_symtab (const char *name)
> >      {
> >        full_path = xfullpath (name);
> >        make_cleanup (xfree, full_path);
> > -      real_path = gdb_realpath (name);
> > +      real_path = lrealpath (name);
> >        make_cleanup (xfree, real_path);
> >      }
> 
> Can we please talk about this snippet?  I don't understand the need
> for calling both xfullpath and lrealpath here.  If that's because
> lrealpath might fail if the basename does not exist, I think we should
> call lrealpath first and fall back on xfullpath only after that.

We can't talk about it in the context of a patch replacing gdb_realpath
with lrealpath.  If you'd like to talk about it separately, go ahead.
Having looked at the context, I have no opinion either way.

-- 
Daniel Jacobowitz
CodeSourcery, LLC


  reply	other threads:[~2005-05-29 14:21 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-28 23:59 Daniel Jacobowitz
2005-05-29  1:59 ` Christopher Faylor
2005-05-29 14:21 ` Eli Zaretskii
2005-05-29 14:23   ` Daniel Jacobowitz [this message]
2005-05-29 17:49     ` Christopher Faylor
2005-05-29 18:22     ` Eli Zaretskii
2005-05-29 18:27       ` Christopher Faylor
2005-05-30 16:54         ` Eli Zaretskii
2005-05-29 19:28       ` Daniel Jacobowitz
2005-05-29 20:16         ` Christopher Faylor
2005-05-30 15:14           ` Christopher Faylor
2005-05-30 18:32           ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050529142112.GB23858@nevyn.them.org \
    --to=drow@false.org \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=me@cgf.cx \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox