add Cygwin::sync_winenv [perl #110190]
authorReini Urban <rurban@x-ray.at>
Wed, 8 Feb 2012 23:58:21 +0000 (17:58 -0600)
committerTony Cook <tony@develop-help.com>
Thu, 9 Feb 2012 01:52:12 +0000 (12:52 +1100)
Cygwin::sync_winenv should fix [CPAN #65052], ADODB missing
%COMMONPROGRAMFILES%.
sync_winenv code and solution by Chris Day.

README.cygwin
cygwin/cygwin.c

index 017c452..4e3e6f5 100644 (file)
@@ -513,6 +513,17 @@ User mounts override system mounts.
 Returns true if the given cygwin path is binary mounted, false if the
 path is mounted in textmode.
 
+=item C<Cygwin::sync_winenv>
+
+Cygwin does not initialize all original Win32 environment variables.
+See the bottom of this page L<http://cygwin.com/cygwin-ug-net/setup-env.html>
+for "Restricted Win32 environment".
+
+Certain Win32 programs called from cygwin programs might need some environment
+variable, such as e.g. ADODB needs %COMMONPROGRAMFILES%.
+Call Cygwin::sync_winenv() to copy all Win32 environment variables to your
+process and note that cygwin will warn on every encounter of non-POSIX paths.
+
 =back
 
 =head1 INSTALL PERL ON CYGWIN
index 0f5fe1d..9419e83 100644 (file)
@@ -538,6 +538,8 @@ XS(XS_Cygwin_is_binmount)
     XSRETURN(1);
 }
 
+XS(XS_Cygwin_sync_winenv){ cygwin_internal(CW_SYNC_WINENV); }
+
 void
 init_os_extras(void)
 {
@@ -553,6 +555,7 @@ init_os_extras(void)
     newXSproto("Cygwin::mount_table", XS_Cygwin_mount_table, file, "");
     newXSproto("Cygwin::mount_flags", XS_Cygwin_mount_flags, file, "$");
     newXSproto("Cygwin::is_binmount", XS_Cygwin_is_binmount, file, "$");
+    newXS("Cygwin::sync_winenv", XS_Cygwin_sync_winenv, file);
 
     /* Initialize Win32CORE if it has been statically linked. */
     handle = dlopen(NULL, RTLD_LAZY);