From: Eric Blake <eblake@redhat.com>
To: cygwin@cygwin.com
Subject: Re: stat() and tilde prefix (was bad bash tab completion)
Date: Thu, 07 Feb 2013 15:32:00 -0000 [thread overview]
Message-ID: <5113C886.9070904@redhat.com> (raw)
In-Reply-To: <511350F3.8040702@shaddybaddah.name>
[-- Attachment #1: Type: text/plain, Size: 2291 bytes --]
On 02/07/2013 12:00 AM, Shaddy Baddah wrote:
> Please find the patch discussed attached. It probably needs to be a bit
> more generic, maybe with some precompiler directives to limit it to
> cygwin? Although if it is just for cygwin, perhaps it can just go in the
> cygports patch?
The build of bash has nothing to do with cygports; if I decide to take
this, I will include something like it the next time I build bash for
cygwin.
>
> Do I need to put an "attn bash maintainer" on the subject line?
Nah, I read the list.
> *r++ = '\\';
> /* XXX -- check for standalone tildes here and backslash-quote them */
> - if (s == text && *s == '~' && file_exists (text))
> + if (s == text && *s == '~' && tilde_file_exists (text)) {
No need to add the {} here.
> *r++ = '\\';
> + }
> *r++ = *s;
> }
> *r = '\0';
> diff --git a/general.c b/general.c
> index fdadf1d..b279cbe 100644
> --- a/general.c
> +++ b/general.c
> @@ -544,6 +544,28 @@ file_exists (fn)
> }
>
> int
> +tilde_file_exists (fn)
This function is misnamed for what it does, which is attempt work around
the fact that cygwin's handling of .. is not POSIX-compliant. I think a
better fix would be to change file_exists() itself instead of adding a
misnamed wrapper function; then bashline.c wouldn't even need patching.
The string 'tilde' need not even be in the patch; what you are really
after is a function that says that if '..' is found within a string
being probed for existence, then add an additional check to see if the
prefix of that string exists as a directory.
But I don't mind experimenting with the idea - it remains to be seen
whether people will complain that bash is noticeably slower because it
takes time to double-check instead of rely on cygwin's non-POSIX
shortcut. And the slowdown would only be on paths containing a '..'; I
would NOT be checking for symlinks (even though symlinks containing ..
are also being interpreted in a non-POSIX manner, it is much more
expensive to second-guess if you have to check every name for being a
symlink than it is to just check for literal ..).
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 621 bytes --]
next prev parent reply other threads:[~2013-02-07 15:32 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-10 14:25 bad bash tab completion Shaddy Baddah
2012-08-10 16:54 ` Eric Blake
2013-01-14 5:21 ` stat() and tilde prefix (was bad bash tab completion) Shaddy Baddah
2013-01-14 6:17 ` Christopher Faylor
2013-01-14 12:23 ` Corinna Vinschen
2013-01-14 14:37 ` Shaddy Baddah
2013-01-14 16:13 ` Corinna Vinschen
2013-01-14 20:29 ` Stephan Mueller
2013-01-14 21:37 ` Ryan Johnson
2013-01-15 8:44 ` Corinna Vinschen
2013-01-15 12:33 ` Shaddy Baddah
2013-02-07 7:00 ` Shaddy Baddah
2013-02-07 15:32 ` Eric Blake [this message]
2013-02-07 16:10 ` Thomas Wolff
2013-02-07 16:24 ` Corinna Vinschen
2013-02-07 16:26 ` Christopher Faylor
2013-01-14 15:27 ` Christopher Faylor
2013-01-14 16:05 ` Corinna Vinschen
2013-01-14 17:00 ` Christopher Faylor
2013-01-14 22:15 ` Thomas Wolff
2013-01-15 8:56 ` Corinna Vinschen
2013-01-15 19:50 ` Andrey Repin
2013-01-15 20:03 ` Larry Hall (Cygwin)
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=5113C886.9070904@redhat.com \
--to=eblake@redhat.com \
--cc=cygwin@cygwin.com \
/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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).