X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=1.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org MIME-Version: 1.0 Date: Wed, 27 Jun 2012 13:59:14 +0200 Message-ID: Subject: cygwin_conv_path strange behavior From: Jan Nijtmans To: cygwin AT cygwin DOT com Content-Type: text/plain; charset=ISO-8859-1 X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: 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 Dear cygwin developers. When trying the function cygwin_conv_path, I noted some strange effect, when the cygwin1.dll is in the same directory as the executable. This can be demonstrated with the example "mypath.c" below. Compiling this function, and putting it in some directory "C:\some\path\foo', from a cygwin shell, it prints: $ ./mypath win32 path: C:\some\path\foo\mypath.exe posix path: /cygdrive/c/some/path/foo/mypath.exe From a win32 command shell: > .\mypath win32 path: C:\some\path\foo\mypath.exe posix path: /cygdrive/c/some/path/foo/mypath.exe This is as expected. Now, copy cygwin1.dll to the same directory as mypath.exe, and do the same from a cygwin shell, it prints: $ ./mypath win32 path: C:\some\path\foo\mypath.exe posix path: /cygdrive/c/some/path/foo/mypath.exe From a win32 command shell: > .\mypath win32 path: C:\some\path\foo\mypath.exe posix path: /foo/mypath.exe In other words, the first part of the posix path is stripped, when running it from a win32 shell! My objective is to distribute "mypath.exe" separate from cygwin, simply by putting cygwin1.dll (the only one it needs) in the same directory as the executable, so it can run without the presence of the cygwin environment. But this results in wrong paths produced by the cygwin_conv_path() function. Is this a bug in cygwin_conv_path()? What can I do about that? Regards, Jan Nijtmans =============== mypath.c ================= extern __stdcall int GetModuleFileNameA(void *, const char *, int); #define PATH_MAX 512 int main () { char buf[PATH_MAX]; char name[PATH_MAX]; GetModuleFileNameA(0, buf, PATH_MAX); cygwin_conv_path(2, buf, name, PATH_MAX); printf("win32 path: %s\nposix path: %s\n", buf, name); } -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple