delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2005/07/09/12:34:26

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Date: Sat, 9 Jul 2005 12:34:18 -0400
From: Christopher Faylor <cgf-no-personal-reply-please AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: Unwanted .exe appended to symlinks
Message-ID: <20050709163418.GB11356@trixie.casa.cgf.cx>
Reply-To: cygwin AT cygwin DOT com
References: <1120880636 DOT 6400 DOT 7 DOT camel AT localhost DOT localdomain> <42CF4C9D DOT 8000708 AT byu DOT net> <20050709050214 DOT GA10083 AT trixie DOT casa DOT cgf DOT cx> <42CFBE28 DOT 3060808 AT byu DOT net> <20050709163242 DOT GA11356 AT trixie DOT casa DOT cgf DOT cx>
Mime-Version: 1.0
In-Reply-To: <20050709163242.GA11356@trixie.casa.cgf.cx>
User-Agent: Mutt/1.5.8i

On Sat, Jul 09, 2005 at 12:32:43PM -0400, Christopher Faylor wrote:
>On Sat, Jul 09, 2005 at 06:08:08AM -0600, Eric Blake wrote:
>>-----BEGIN PGP SIGNED MESSAGE-----
>>Hash: SHA1
>>
>>According to Christopher Faylor on 7/8/2005 11:02 PM:
>>> I don't get it.  Certainly /cygdrive/c.exe doesn't exist so why would you
>>> try to link to it?
>>
>>The algorithm I used was this:
>>
>>1 - If source exists [determined by the return value of readlink
>>("source"), although just now I realized that for symbolic links, it
>>should really be the return value of readlink (concat (dirname ("dest"),
>>"source")) since symbolic links are relative to the destination, not the pwd]
>> 2a - if source is non-symlink and exists with a trailing . [determined by
>>access ("source.")] use "source", else use "source.exe", because one of
>>those two spellings must have made test 1 succeed
>> 2b - if source is symlink and exists with a trailing .lnk [determined by
>>readlink ("source.lnk")] use "source", else use "source.exe", because one
>>of those two spellings must have made test 1 succeed
>>
>>I think the cleanup needs to be along these lines - in steps 2a and 2b, do
>>a sanity check of also checking whether "source.exe" exists.
>
>I don't know why you'd ever just assume that .exe exists.
>
>Wouldn't it be safer to just do:
>
>  struct stat st1, st2;
>
>  stat ("foo", &st1);
>
>  if (stat ("foo.exe", &st2) == 0 && st2.st_ino == st1.st_ino)
>    return "foo.exe";
>  else
>    return "foo";
>
>You could add st_dev checking, too, if you were really paranoid.

You can also replace "stat" with "lstat" as appropriate, of course.

cgf

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019