Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com Subject: 1.3.4: error in inheriting new PATH environment form WIN32 executable to CYGWIN executable To: cygwin AT cygwin DOT com X-Mailer: Lotus Notes Release 5.0.5 September 22, 2000 Message-ID: From: Heiko_Elger AT arburg DOT com Date: Wed, 7 Nov 2001 14:33:08 +0100 X-MIMETrack: Serialize by Router on HUB02/DE/SRV/ARBURG(Release 5.0.7 |March 21, 2001) at 07.11.2001 14:32:25 MIME-Version: 1.0 Content-type: text/plain; charset=us-ascii Hello, I have the following problem: If a MS WIN 32 program changes his environment PATH variable to a very long value (over 270 characters) and than calling a CYGWIN program per system() call the path inside the CYGWIN program is reset to NULL! If it calls a MS WIN 32 program all works fine. We have this problem with clearmake in exporting a very long path and the shell is the CYGWIN sh.exe. I tried to reproduce it within a very small test. I wrote two small programs (belwo you wil find the sourcecode): changeenv.c --> MS WIN 32 program which change his PATH environment and calls per system() the program "printpath" printpath.c --> prints the PATH environment to stdout changeenv.exe is compiled with Microsoft Visual Studio. printpath.exe is compiled with MS Visual Studio and cygwin gcc I hope anyone can reproduce this error and give me a hint to resolve may problem. Best regards Heiko Elger ----------------------- start changeenv.c -------------------- #include #include #define CYGWIN_SHELL "d:\\programme\\cygwin\\bin\\sh" #define CYGWIN_PRINTPATH "d:\\msdev\\makenv\\printpath\\printpath" #define WIN32_PRINTPATH "d:\\msdev\\makenv\\printpath\\Debug\\printpath" char long_path[] = "PATH=/usr/bin:/1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ; int main (int argc, char ** argv, char **env) { int rc=0; char * env_path ; if (putenv(long_path) == -1) perror("putenv()"); env_path = getenv("PATH"); printf("NEW Path=%s\n", env_path == NULL ? "" : env_path); if (system( CYGWIN_SHELL " -ic \"echo system CYGWIN SHELL PATH=$PATH\"") != 0) perror("system()"); printf("system CYGWIN printpath: "); fflush( stdout ); if (system( CYGWIN_PRINTPATH ) != 0) perror("system()"); printf("system WIN32 printpath: "); fflush( stdout ); if (system( WIN32_PRINTPATH ) != 0) perror("system()"); return rc; } ----------------------- end changeenv.c -------------------- ----------------------- start printpath.c -------------------- #include #include int main (int argc, char ** argv, char **env) { int rc=0; char * env_path ; env_path = getenv("PATH"); printf("Path=%s\n", env_path == NULL ? "" : env_path); return rc; }----------------------- end printpath.c -------------------- -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/