delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2005/05/11/14:59:03

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
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
Date: Wed, 11 May 2005 11:58:34 -0700
From: David Rothenberger <daveroth AT acm DOT org>
Subject: Re: Fixing strace and cygcheck so that they work with mount -X
In-reply-to: <20050511165354.GA15412@trixie.casa.cgf.cx>
To: cygwin AT cygwin DOT com
Message-id: <428255DA.4030907@acm.org>
MIME-version: 1.0
References: <Pine DOT GSO DOT 4 DOT 61 DOT 0505081605450 DOT 21700 AT slinky DOT cs DOT nyu DOT edu> <20050508230637 DOT GD3896 AT trixie DOT casa DOT cgf DOT cx> <Pine DOT GSO DOT 4 DOT 61 DOT 0505081958360 DOT 21700 AT slinky DOT cs DOT nyu DOT edu> <20050509002126 DOT GH3896 AT trixie DOT casa DOT cgf DOT cx> <20050509022611 DOT GA7850 AT trixie DOT casa DOT cgf DOT cx> <427F9C41 DOT 1000605 AT acm DOT org> <427FB7B2 DOT 8040903 AT mscha DOT nl> <20050510151746 DOT GV15665 AT trixie DOT casa DOT cgf DOT cx> <42822503 DOT 2090903 AT mscha DOT org> <20050511154036 DOT GD10119 AT trixie DOT casa DOT cgf DOT cx> <20050511165354 DOT GA15412 AT trixie DOT casa DOT cgf DOT cx>
User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317)
X-IsSubscribed: yes
Reply-To: cygwin AT cygwin DOT com

--------------030401070206010500000103
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

On 5/11/2005 9:53 AM, Christopher Faylor wrote:
> On Wed, May 11, 2005 at 11:40:36AM -0400, Christopher Faylor wrote:
> 
>>It sounds like you need to read MSDN on CreateProcess and see what it says
>>about "lpEnvironment":
>>
>>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp

cygstart uses ShellExecute, not CreateProcess.

> Btw, from the description, it sounds like cygstart is broken right now
> and could be fixed right now.  You don't need any of the functionality
> from the snapshot.  You just need to construct a windows lpEnvironment
> block from the UNIX-like global variable, provided by cygwin: "extern char **environ".

The attached patch fixes cygstart for me. It copies all missing Cygwin 
environment variables to the Windows environment before invoking 
ShellExecute.

-- 
David Rothenberger                spammer? -> spam AT daveroth DOT dyndns DOT org
GPG/PGP: 0x7F67E734, C233 365A 25EF 2C5F C8E1 43DF B44F BA26 7F67 E734

It'll be a nice world if they ever get it finished.

--------------030401070206010500000103
Content-Type: text/plain;
 name="cygutils.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="cygutils.patch"

--- cygutils-1.2.7-orig/src/cygstart/cygstart.c	2005-03-07 21:22:51.000000000 -0800
+++ cygutils-1.2.7/src/cygstart/cygstart.c	2005-05-11 11:43:55.598000000 -0700
@@ -24,6 +24,7 @@
 #include "config.h"
 #endif
 #include "common.h"
+#include <sys/cygwin.h>
 
 /* The official name of this program (e.g., no `g' prefix).  */
 #define PROGRAM_NAME "cygstart"
@@ -64,6 +65,7 @@
 static void help(poptContext optCon, FILE *f, char *name);
 static void version(poptContext optCon, FILE *f, char *name);
 static void license(poptContext optCon, FILE *f, char *name);
+static void setup_win_environ(void);
 
 int main(int argc, const char **argv)
 {
@@ -404,6 +406,7 @@
 {
     int ret;
 
+    setup_win_environ();
     ret = (int) ShellExecute(NULL, action, aPath, args, workDir, show);
     if (ret >= 32) {
         return TRUE;
@@ -511,3 +514,23 @@
   printTopDescription(f, name);
   printLicense(f, name);
 }  
+
+/* Copy cygwin environment variables to the Windows environment if they're not already there. */
+static void setup_win_environ(void)
+{
+    char **envp = (char **) cygwin_internal (CW_ENVP);
+    char *var, *val;
+    char curval[2];
+
+    while (envp && *envp) {
+        var = strdup(*envp++);
+        val = strchr(var, '=');
+        *val++ = '\0';
+        
+        if (GetEnvironmentVariable(var, curval, 2) == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
+            SetEnvironmentVariable(var, val);
+        }
+
+        free(var);
+    }
+}


--------------030401070206010500000103
Content-Type: text/plain; charset=us-ascii

--
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/
--------------030401070206010500000103--

- Raw text -


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