delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2012/06/27/07:59:42

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: <CAO1jNwv-TEEZfLTvtZxdQ3oa9k+KsHMaM8v6sLx-TZxN73OumA@mail.gmail.com>
Subject: cygwin_conv_path strange behavior
From: Jan Nijtmans <jan DOT nijtmans AT gmail DOT com>
To: cygwin AT cygwin DOT com
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
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

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

- Raw text -


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