X-Recipient: archive-cygwin AT delorie DOT com X-Spam-Check-By: sourceware.org Date: Thu, 23 Apr 2009 18:41:52 -0400 From: Christopher Faylor To: cygwin AT cygwin DOT com Subject: Re: detecting program invocation from a symbolic link Message-ID: <20090423224152.GA30461@ednor.casa.cgf.cx> Reply-To: cygwin AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com References: <14974-38810 AT sneakemail DOT com> <20090423195851 DOT GA29258 AT ednor DOT casa DOT cgf DOT cx> <1756-47040 AT sneakemail DOT com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1756-47040@sneakemail.com> User-Agent: Mutt/1.5.16 (2007-06-09) Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com On Thu, Apr 23, 2009 at 02:42:09PM -0700, ncokwqc02 AT sneakemail DOT com wrote: >The result is apparently compiler dependent. > >Here's some simple test code: > > #include > int main(int, const char** argv) > { > using namespace std; > cout << "Hello World, I was called from " << argv[0] << endl; > return 0; > } > >I build this code to create an executable named > test_sym_link.exe >using the MS Visual Studio C++ compiler, the Intel C++ compiler, the >Metrowerks Codewarrior C++ compiler, and the g++ compiler that came >with Cygwin. > >Then I create a symbolic link like this from a Cygwin shell > $ ln -s test_sym_link.exe new_file >which produces the following directory entry > $ ls -l new_file > lrwxrwxrwx 1 ottusch None 17 Apr 23 13:39 new_file -> test_sym_link.exe >as expected. > >If I run the program as built using any of the compilers other than g++ I get > $ ./new_file > Hello World, I was called from C:\Documents and Settings\ottusch\test_sym_link.exe >which, of course, is also what I get if I run ./test_sym_link > >Only in the case where the compiler is g++ do I get > $ ./new_file > Hello World, I was called from ./new_file >which is the desired, Unix-like, result. > >These results were all obtained while working from a Cygwin console. >The symbolic link 'new_file' shows up as 'new_file.lnk' in a Windows >command prompt shell and I don't know how to execute it directly from >the command line. > >Nice that it works with g++ but I need this to work with the other >compilers too. Any suggestions? You really do need to use Cygwin programs to understand Cygwin features. This should not be overly surprising. There isn't any straightforward way to make this work with non-Cygwin programs. It is theoretically possible to get Cygwin's argv list via the cygwin_internal CW_ARGV call but that would involve dynamically loading cygwin1.dll which has its own set of problems. 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/