From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6327 invoked by alias); 19 Jul 2012 18:14:24 -0000 Received: (qmail 6313 invoked by uid 22791); 19 Jul 2012 18:14:22 -0000 X-SWARE-Spam-Status: No, hits=-3.2 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,TW_GV,TW_RG X-Spam-Check-By: sourceware.org Received: from mail-qc0-f171.google.com (HELO mail-qc0-f171.google.com) (209.85.216.171) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 19 Jul 2012 18:14:07 +0000 Received: by qcad1 with SMTP id d1so267588qca.2 for ; Thu, 19 Jul 2012 11:14:06 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.136.200 with SMTP id s8mr1372647qct.46.1342721646590; Thu, 19 Jul 2012 11:14:06 -0700 (PDT) Received: by 10.229.49.9 with HTTP; Thu, 19 Jul 2012 11:14:06 -0700 (PDT) Date: Thu, 19 Jul 2012 18:14:00 -0000 Message-ID: Subject: Question about redirecting Cygwin process's I/O to the client side of an Win32 named pipe. From: Chiheng Xu To: cygwin@cygwin.com Content-Type: multipart/mixed; boundary=002354530350c6fe0e04c532be83 X-IsSubscribed: yes Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com X-SW-Source: 2012-07/txt/msg00409.txt.bz2 --002354530350c6fe0e04c532be83 Content-Type: text/plain; charset=UTF-8 Content-length: 2153 Hi, list I'm working on a very small software component, that can create a Cygwin process, and redirect it's I/O to the client side of an Win32 named pipe. The creating process now have a handle of the server side of the Win32 named pipe. The creating process can then write to/read from the sub-process through the pipe handle. This is pretty much like mintty, which spawn bash.exe by redirecting bash.exe's I/O to the slave side of a pty. But because the component is intended to be used by Win32 native apps, like MFC apps, JNI, etc, it is not plausible to use the pty facilities provided by cygwin1.dll. It is also not appropriate to dynamically load cygwin1.dll in the creating process. The method is below: 1. Win32 native A.exe create a named pipe and own the handle to the server side. 2. A.exe create a "detached" starter.exe process. This starter.exe get the name of the pipe and the argvs of the B.exe(the to be created Cygwin process) through its command line. 3. starter.exe get handle to client side of the pipe, and create "detached" B.exe process redirecting its I/O to the client side of pipe. The idea comes from another open source project. The use of the intermediate starter.exe is because, Cygwin process B.exe will inherit all inheritable handles in parent process, including the client side handle of the named pipe, but we don't know whether there exist other inheritable handles in parent process. So, a "clean" process starter.exe that have no handles is created. The starter.exe executable is even not linked with C run time, and have no main(). It's entry is specified by compiler command line option. So, starter.exe is considered clean. The problem here is that, this method works for "simple" executable like Windows's cmd.exe and Cygwin's gdb.exe, but does not work for Cygwin's bash.exe or python.exe. bash.exe process can be created, but I can't read data from the pipe. So, what's wrong ? What's the difference between bash.exe and gdb.exe or cmd.exe ? What's the difference between Win32 named pipe and Cygwin pty ? How can I make it work ? Some code pieces is attached. Thanks. -- Chiheng Xu --002354530350c6fe0e04c532be83 Content-Type: text/x-c++src; charset=US-ASCII; name="A.cpp" Content-Disposition: attachment; filename="A.cpp" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h4u5rbhf0 Content-length: 5198 DQojaW5jbHVkZSAic3RkYWZ4LmgiDQojaW5jbHVkZSAiVkctcHJvY2Vzcy5o Ig0KDQoNCmJvb2wgQ29tbWFuZExpbmUyQXJndihDU3RyaW5nICYgY21kbGlu ZSwgQ0FycmF5PENTdHJpbmc+ICYgYXJndikNCnsNCgkvL1RPRE86IGNvbnNp ZGVyIHNwYWNlIGFuZCBkb3VibGUgcXVvdGUNCglhcmd2LlJlbW92ZUFsbCgp Ow0KCWNtZGxpbmUuVHJpbSgpOw0KCWludCBwcmV2X2luZGV4ID0gMDsNCglp bnQgY3VycmVudF9pbmRleDsNCgl3aGlsZSgxKXsNCgkJY3VycmVudF9pbmRl eCA9IGNtZGxpbmUuRmluZChfVCgiICIpLCBwcmV2X2luZGV4KTsNCgkJaWYo Y3VycmVudF9pbmRleCAhPSAtMSl7DQoJCQlDU3RyaW5nIGFyZyA9IGNtZGxp bmUuTWlkKHByZXZfaW5kZXgsIGN1cnJlbnRfaW5kZXggLSBwcmV2X2luZGV4 KTsNCgkJCWFyZ3YuQWRkKGFyZyk7DQoJCQlwcmV2X2luZGV4ID0gY3VycmVu dF9pbmRleCArIDE7DQoJCX1lbHNlew0KCQkJQ1N0cmluZyBhcmcgPSBjbWRs aW5lLk1pZChwcmV2X2luZGV4KTsNCgkJCWFyZ3YuQWRkKGFyZyk7DQoJCQli cmVhazsNCgkJfQ0KCX0NCg0KCXJldHVybiB0cnVlOw0KfQ0KDQpib29sIEFy Z3YyQ29tbWFuZExpbmUoQ0FycmF5PENTdHJpbmc+ICYgYXJndiwgQ1N0cmlu ZyAmIGNtZGxpbmUpDQp7DQoJLy9UT0RPOiBjb25zaWRlciBzcGFjZSBhbmQg ZG91YmxlIHF1b3RlDQoJY21kbGluZSA9IF9UKCIiKTsNCglpbnQgYXJyYXlf c2l6ZSA9IGFyZ3YuR2V0U2l6ZSgpOw0KCWlmKGFycmF5X3NpemUpew0KCQlj bWRsaW5lICs9IGFyZ3YuR2V0QXQoMCk7DQoJCQ0KCQlpbnQgaTsNCgkJZm9y KGkgPSAxOyBpIDwgYXJyYXlfc2l6ZTsgaSsrKXsNCgkJCWNtZGxpbmUgKz0g X1QoIiAiKTsNCgkJCWNtZGxpbmUgKz0gYXJndi5HZXRBdChpKTsNCgkJfQ0K CX0NCg0KCXJldHVybiB0cnVlOw0KfQ0KDQpib29sIEVudmlyb25tZW50Qmxv Y2syRXZucChDU3RyaW5nICYgZW52YmxrLCBDQXJyYXk8Q1N0cmluZz4gJiBl bnZwKQ0Kew0KDQoJcmV0dXJuIHRydWU7DQp9DQoNCmJvb2wgRXZucDJFbnZp cm9ubWVudEJsb2NrKENBcnJheTxDU3RyaW5nPiAmIGVudnAsIENTdHJpbmcg JiBlbnZibGspDQp7DQoNCglyZXR1cm4gdHJ1ZTsNCn0NCg0KQ1N0cmluZyBH ZXRNb2R1bGVQYXRoKCkNCnsNCglUQ0hBUiB6c0ZpbGVOYW1lW19NQVhfUEFU SF07DQoNCgkvL0RXT1JEIGR3UmVzID0gOjpHZXRNb2R1bGVGaWxlTmFtZShO VUxMLCB6c0ZpbGVOYW1lLCBfTUFYX1BBVEgpOw0KCURXT1JEIGR3UmVzID0g OjpHZXRNb2R1bGVGaWxlTmFtZShBZnhHZXRJbnN0YW5jZUhhbmRsZSgpLCB6 c0ZpbGVOYW1lLCBfTUFYX1BBVEgpOw0KDQoJQVNTRVJUKGR3UmVzKTsNCg0K CUNTdHJpbmcgY3NGaWxlUGF0aCA9IHpzRmlsZU5hbWU7DQoJaW50IG5GTHMg PSBjc0ZpbGVQYXRoLlJldmVyc2VGaW5kKF9UKCdcXCcpKTsNCglpZiAobkZM cyA+IDApDQoJew0KCQljc0ZpbGVQYXRoLlJlbGVhc2VCdWZmZXIobkZMcyAr IDEpOw0KCX0NCg0KCXJldHVybiBjc0ZpbGVQYXRoOw0KfQ0KDQoNCmJvb2wg Q3JlYXRlQW5kQ29ubmVjdFByb2Nlc3MoQ0FycmF5PENTdHJpbmc+ICYgYXJn diwgQ0FycmF5PENTdHJpbmc+ICYgZW52cCwgQ1N0cmluZyAmIHN0clBpcGVO YW1lLCBIQU5ETEUgJiBocGlwZVByb2Nlc3MpDQp7DQoJQ1N0cmluZyBjbWRs aW5lOw0KDQoJQXJndjJDb21tYW5kTGluZShhcmd2LCBjbWRsaW5lKTsNCg0K CUNTdHJpbmcgc3RhcnRlcl9jbWRsaW5lOw0KCXN0YXJ0ZXJfY21kbGluZSAr PSBfVCgnIicpOw0KCXN0YXJ0ZXJfY21kbGluZSArPSBHZXRNb2R1bGVQYXRo KCk7DQoJc3RhcnRlcl9jbWRsaW5lICs9IF9UKCJcXHN0YXJ0ZXIuZXhlIik7 DQoJc3RhcnRlcl9jbWRsaW5lICs9IF9UKCciJyk7DQoJc3RhcnRlcl9jbWRs aW5lICs9IF9UKCcgJyk7DQoJc3RhcnRlcl9jbWRsaW5lICs9IHN0clBpcGVO YW1lOw0KCXN0YXJ0ZXJfY21kbGluZSArPSBfVCgnICcpOw0KCXN0YXJ0ZXJf Y21kbGluZSArPSBjbWRsaW5lOw0KDQoJDQoJLy9jcmVhdGUgbmFtZWRwaXBl IHNlcnZlciBzaWRlDQoJaHBpcGVQcm9jZXNzID0gQ3JlYXRlTmFtZWRQaXBl KA0KCQlzdHJQaXBlTmFtZSwgDQoJCVBJUEVfQUNDRVNTX0RVUExFWCwvLyB8 IEZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFLA0KCQlQSVBFX1RZUEVf QllURSB8IFBJUEVfUkVBRE1PREVfQllURSB8IFBJUEVfV0FJVCwNCgkJUElQ RV9VTkxJTUlURURfSU5TVEFOQ0VTLCANCgkJNDA5NiwgDQoJCTQwOTYsIA0K CQkxMDAwMCwgDQoJCU5VTEwpOw0KDQoNCglpZihocGlwZVByb2Nlc3MgPT0g SU5WQUxJRF9IQU5ETEVfVkFMVUUpew0KCQkvL2Vycm9yDQoJCVRSQUNFKF9U KCJDcmVhdGVOYW1lZFBpcGUgZmFpbGVkXG4iKSk7DQoJCWdvdG8gZmFpbDsN Cgl9DQoJU2V0SGFuZGxlSW5mb3JtYXRpb24oaHBpcGVQcm9jZXNzLCBIQU5E TEVfRkxBR19JTkhFUklULCAwKTsNCg0KDQoJUFJPQ0VTU19JTkZPUk1BVElP TiBwaVByb2NJbmZvOyANCglTVEFSVFVQSU5GTyBzaVN0YXJ0SW5mbzsNCglC T09MIGJGdW5jUmV0biA9IEZBTFNFOyANCg0KCS8vIFNldCB1cCBtZW1iZXJz IG9mIHRoZSBQUk9DRVNTX0lORk9STUFUSU9OIHN0cnVjdHVyZS4gDQoNCgla ZXJvTWVtb3J5KCAmcGlQcm9jSW5mbywgc2l6ZW9mKFBST0NFU1NfSU5GT1JN QVRJT04pICk7DQoNCgkvLyBTZXQgdXAgbWVtYmVycyBvZiB0aGUgU1RBUlRV UElORk8gc3RydWN0dXJlLiANCg0KCVplcm9NZW1vcnkoICZzaVN0YXJ0SW5m bywgc2l6ZW9mKFNUQVJUVVBJTkZPKSApOw0KCXNpU3RhcnRJbmZvLmNiID0g c2l6ZW9mKFNUQVJUVVBJTkZPKTsgDQoNCgkvLyBDcmVhdGUgdGhlIGNoaWxk IHByb2Nlc3MuIA0KCVRDSEFSICogcF90ZW1wX2NtZGxpbmUgPSBuZXcgVENI QVJbc3RhcnRlcl9jbWRsaW5lLkdldExlbmd0aCgpICsgMV07DQoJU3RyQ3B5 KHBfdGVtcF9jbWRsaW5lLCAoTFBDVFNUUilzdGFydGVyX2NtZGxpbmUpOw0K DQoJYkZ1bmNSZXRuID0gQ3JlYXRlUHJvY2VzcyhOVUxMLCANCgkgIHBfdGVt cF9jbWRsaW5lLCAgICAgLy8gY29tbWFuZCBsaW5lIA0KCSAgTlVMTCwgICAg ICAgICAgLy8gcHJvY2VzcyBzZWN1cml0eSBhdHRyaWJ1dGVzIA0KCSAgTlVM TCwgICAgICAgICAgLy8gcHJpbWFyeSB0aHJlYWQgc2VjdXJpdHkgYXR0cmli dXRlcyANCgkgIEZBTFNFLCAgICAgICAgICAvLyBoYW5kbGVzIGFyZSBub3Qg IGluaGVyaXRlZCANCgkgIERFVEFDSEVEX1BST0NFU1MsICAgICAgICAgICAg IC8vIGNyZWF0aW9uIGZsYWdzIA0KCSAgTlVMTCwgICAgICAgICAgLy8gdXNl IHBhcmVudCdzIGVudmlyb25tZW50IA0KCSAgTlVMTCwgICAgICAgICAgLy8g dXNlIHBhcmVudCdzIGN1cnJlbnQgZGlyZWN0b3J5IA0KCSAgJnNpU3RhcnRJ bmZvLCAgLy8gU1RBUlRVUElORk8gcG9pbnRlciANCgkgICZwaVByb2NJbmZv KTsgIC8vIHJlY2VpdmVzIFBST0NFU1NfSU5GT1JNQVRJT04gDQoNCglkZWxl dGUgcF90ZW1wX2NtZGxpbmU7DQoNCglpZiAoYkZ1bmNSZXRuID09IDApew0K CSAgVFJBQ0UoX1QoIkNyZWF0ZVByb2Nlc3MgZmFpbGVkXG4iKSk7DQoJICBn b3RvIGZhaWxfY2xvc2VfcGlwZTsNCgl9DQoNCgkvL2Rvbid0IG5lZWQgIFdh aXRGb3JTaW5nbGVPYmplY3QoaFByb2Nlc3MsIElORklOSVRFKTsNCg0KCUNs b3NlSGFuZGxlKHBpUHJvY0luZm8uaFRocmVhZCk7DQoJQ2xvc2VIYW5kbGUo cGlQcm9jSW5mby5oUHJvY2Vzcyk7DQoNCglyZXR1cm4gdHJ1ZTsNCg0KZmFp bF9jbG9zZV9waXBlOg0KCUNsb3NlSGFuZGxlKGhwaXBlUHJvY2Vzcyk7DQoJ aHBpcGVQcm9jZXNzID0gTlVMTDsNCmZhaWw6DQoJcmV0dXJuIGZhbHNlOw0K DQp9DQoNCg0K --002354530350c6fe0e04c532be83 Content-Type: text/x-c++src; charset=US-ASCII; name="starter.cpp" Content-Disposition: attachment; filename="starter.cpp" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h4u5rh0j1 Content-length: 6235 DQoNCiNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTg0KI2luY2x1ZGUgPHdp bmRvd3MuaD4NCg0KDQppbnQgc3RhcnRlcl9lbnRyeSgpDQp7DQoJaW50IGk7 DQoJU1RBUlRVUElORk9XIHNpOw0KCVBST0NFU1NfSU5GT1JNQVRJT04gcGk7 DQoJaW50IGNtZGxpbmVfbGVuZ3RoOw0KCVdDSEFSICogcDsNCglpbnQgYXJn YzsNCglpbnQgKiBzdGFydF9pbmRleF9vZl9hcmd1bWVudHM7DQoJaW50ICog ZW5kX2luZGV4X29mX2FyZ3VtZW50czsNCglXQ0hBUiAqIGNtZGxpbmVfY29w eTsNCglXQ0hBUiAqKiBhcmd2Ow0KCVdDSEFSICogc3VicHJvY2Vzc19jbWRs aW5lID0gTlVMTDsNCg0KCVdDSEFSICogUGlwZU5hbWU7DQoJSEFORExFIGhw aXBlQ2xpZW50Ow0KCVNFQ1VSSVRZX0FUVFJJQlVURVMgc2E7DQoJQk9PTCBm Ow0KDQoNCglmb3IoaSA9IDA7IGkgPCBzaXplb2YoU1RBUlRVUElORk9XKTsg aSsrKXsNCgkJKigodm9sYXRpbGUgY2hhciAqKSgmc2kpICsgaSApID0gMDsN Cgl9DQoJc2kuY2IgPSBzaXplb2YoU1RBUlRVUElORk9XKTsgIA0KDQoJZm9y KGkgPSAwOyBpIDwgc2l6ZW9mKFBST0NFU1NfSU5GT1JNQVRJT04pOyBpKysp ew0KCQkqKCh2b2xhdGlsZSBjaGFyICopKCZwaSkgKyBpICkgPSAwOw0KCX0N Cg0KCUxQV1NUUiBjbWRsaW5lID0gR2V0Q29tbWFuZExpbmVXKCk7DQoNCg0K CS8vZ2V0IGFyZ2MgYW5kIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgc3RyaW5n DQoJcCA9IGNtZGxpbmU7DQoNCglpID0gMDsNCgl3aGlsZSgqcCl7DQoJCWlm KCpwID09IEwnIicpew0KCQkJaSsrOw0KCQkJcCsrOw0KCQkJd2hpbGUoKnAg IT0gTCciJyAmJiAqcCl7DQoJCQkJcCsrOw0KCQkJfQ0KCQkJaWYoISpwKXsN CgkJCQkvL2Vycm9yIDogdW5iYWxhbmNlZCBkb3VibGUgcXVvdGUNCgkJCQln b3RvIGVycm9yX3JldDsNCgkJCQlicmVhazsNCgkJCX1lbHNlew0KCQkJCS8v KnAgPT0gTCciJw0KCQkJCXArKzsNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJ fWVsc2UgaWYoKnAgIT0gTCcgJyl7DQoJCQlpKys7DQoNCgkJCXdoaWxlKCpw ICE9IEwnICcgJiYgKnApew0KCQkJCXArKzsNCgkJCX0NCgkJCWlmKCEqcCl7 DQoJCQkJLy9lbmQgb2Ygc3RyaW5nDQoJCQkJYnJlYWs7DQoJCQl9ZWxzZXsN CgkJCQkvLypwID09IEwnICcNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJfWVs c2V7DQoJCQkvLypwID09IEwnICcNCgkJCXArKzsNCgkJCWNvbnRpbnVlOw0K CQl9DQoJfQ0KCWFyZ2MgPSBpOw0KCWNtZGxpbmVfbGVuZ3RoID0gcCAtIGNt ZGxpbmU7DQoNCg0KDQoNCg0KCQ0KCS8vZ2V0IGFyZ3YNCg0KCXN0YXJ0X2lu ZGV4X29mX2FyZ3VtZW50cyA9IChpbnQgKilIZWFwQWxsb2MoR2V0UHJvY2Vz c0hlYXAoKSwgSEVBUF9aRVJPX01FTU9SWSwgYXJnYyAqIHNpemVvZihpbnQp KTsNCgllbmRfaW5kZXhfb2ZfYXJndW1lbnRzID0gKGludCAqKUhlYXBBbGxv YyhHZXRQcm9jZXNzSGVhcCgpLCBIRUFQX1pFUk9fTUVNT1JZLCBhcmdjICog c2l6ZW9mKGludCkpOw0KDQoJcCA9IGNtZGxpbmU7DQoJaSA9IDA7DQoJd2hp bGUoKnApew0KCQlpZigqcCA9PSBMJyInKXsNCgkJCWkrKzsNCgkJCXArKzsN CgkJCXN0YXJ0X2luZGV4X29mX2FyZ3VtZW50c1tpIC0gMV0gPSBwIC0gY21k bGluZTsNCgkJCXdoaWxlKCpwICE9IEwnIicgJiYgKnApew0KCQkJCXArKzsN CgkJCX0NCgkJCWVuZF9pbmRleF9vZl9hcmd1bWVudHNbaSAtIDFdID0gcCAt IGNtZGxpbmU7DQoJCQlpZighKnApew0KCQkJCS8vZXJyb3IgOiB1bmJhbGFu Y2VkIGRvdWJsZSBxdW90ZQ0KCQkJCWdvdG8gZXJyb3JfcmV0Ow0KCQkJCWJy ZWFrOw0KCQkJfWVsc2V7DQoJCQkJLy8qcCA9PSBMJyInDQoJCQkJcCsrOw0K CQkJCWNvbnRpbnVlOw0KCQkJfQ0KCQl9ZWxzZSBpZigqcCAhPSBMJyAnKXsN CgkJCWkrKzsNCgkJCXN0YXJ0X2luZGV4X29mX2FyZ3VtZW50c1tpIC0gMV0g PSBwIC0gY21kbGluZTsNCg0KCQkJd2hpbGUoKnAgIT0gTCcgJyAmJiAqcCl7 DQoJCQkJcCsrOw0KCQkJfQ0KCQkJZW5kX2luZGV4X29mX2FyZ3VtZW50c1tp IC0gMV0gPSBwIC0gY21kbGluZTsNCgkJCWlmKCEqcCl7DQoJCQkJLy9lbmQg b2Ygc3RyaW5nDQoJCQkJYnJlYWs7DQoJCQl9ZWxzZXsNCgkJCQkvLypwID09 IEwnICcNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJfWVsc2V7DQoJCQkvLypw ID09IEwnICcNCgkJCXArKzsNCgkJCWNvbnRpbnVlOw0KCQl9DQoJfQ0KDQoJ Y21kbGluZV9jb3B5ID0gKFdDSEFSICogKUhlYXBBbGxvYyhHZXRQcm9jZXNz SGVhcCgpLCBIRUFQX1pFUk9fTUVNT1JZLCBzaXplb2YoV0NIQVIpICogKGNt ZGxpbmVfbGVuZ3RoICsgMSkpOw0KCWZvcihpID0gMDsgaSA8IGNtZGxpbmVf bGVuZ3RoICsgMTsgaSsrKXsNCgkJY21kbGluZV9jb3B5W2ldID0gY21kbGlu ZVtpXTsNCgl9DQoNCglmb3IoaSA9IDA7IGkgPCBhcmdjOyBpKyspew0KCQlj bWRsaW5lX2NvcHlbZW5kX2luZGV4X29mX2FyZ3VtZW50c1tpXV0gPSBMJ1ww JzsNCgl9DQoNCglhcmd2ID0gKFdDSEFSICoqKUhlYXBBbGxvYyhHZXRQcm9j ZXNzSGVhcCgpLCBIRUFQX1pFUk9fTUVNT1JZLCBzaXplb2YoV0NIQVIgKikg KiBhcmdjKTsNCg0KCWZvcihpID0gMDsgaSA8IGFyZ2M7IGkrKyl7DQoJCWFy Z3ZbaV0gPSBjbWRsaW5lX2NvcHkgKyBzdGFydF9pbmRleF9vZl9hcmd1bWVu dHNbaV07DQoJfQ0KDQoNCg0KDQoJLy9nZXQgc3VicHJvY2VzcyBjb21tYW5k IGxpbmUNCg0KCXAgPSBjbWRsaW5lOw0KCWkgPSAwOw0KCXdoaWxlKCpwKXsN CgkJaWYoKnAgPT0gTCciJyl7DQoNCgkJCWlmKGkgPT0gMil7DQoJCQkJc3Vi cHJvY2Vzc19jbWRsaW5lID0gcDsNCgkJCQlicmVhazsNCgkJCX0NCg0KCQkJ aSsrOw0KCQkJcCsrOw0KCQkJd2hpbGUoKnAgIT0gTCciJyAmJiAqcCl7DQoJ CQkJcCsrOw0KCQkJfQ0KCQkJaWYoISpwKXsNCgkJCQlnb3RvIGVycm9yX3Jl dDsNCgkJCQkvL2Vycm9yIDogdW5iYWxhbmNlZCBkb3VibGUgcXVvdGUNCgkJ CQlicmVhazsNCgkJCX1lbHNlew0KCQkJCS8vKnAgPT0gTCciJw0KCQkJCXAr KzsNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJfWVsc2UgaWYoKnAgIT0gTCcg Jyl7DQoJCQlpZihpID09IDIpew0KCQkJCXN1YnByb2Nlc3NfY21kbGluZSA9 IHA7DQoJCQkJYnJlYWs7DQoJCQl9DQoNCgkJCWkrKzsNCg0KCQkJd2hpbGUo KnAgIT0gTCcgJyAmJiAqcCl7DQoJCQkJcCsrOw0KCQkJfQ0KCQkJaWYoISpw KXsNCgkJCQkvL2VuZCBvZiBzdHJpbmcNCgkJCQlicmVhazsNCgkJCX1lbHNl ew0KCQkJCS8vKnAgPT0gTCcgJw0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KCQl9 ZWxzZXsNCgkJCS8vKnAgPT0gTCcgJw0KCQkJcCsrOw0KCQkJY29udGludWU7 DQoJCX0NCgl9DQoNCglpZighc3VicHJvY2Vzc19jbWRsaW5lKXsNCgkJLy9l cnJvciA6DQoJCWdvdG8gZXJyb3JfcmV0Ow0KCX0NCg0KDQoJLy9jcmVhdGUg Y2xpZW50IHNpZGUgb2YgdGhlIG5hbWVkIHBpcGUNCg0KCVBpcGVOYW1lID0g YXJndlsxXTsNCglzYS5uTGVuZ3RoID0gc2l6ZW9mKFNFQ1VSSVRZX0FUVFJJ QlVURVMpOw0KCXNhLmJJbmhlcml0SGFuZGxlID0gVFJVRTsNCglzYS5scFNl Y3VyaXR5RGVzY3JpcHRvciA9IE5VTEw7DQoNCglocGlwZUNsaWVudCA9IENy ZWF0ZUZpbGVXKA0KCQlQaXBlTmFtZSwgDQoJCUdFTkVSSUNfUkVBRCB8IEdF TkVSSUNfV1JJVEUsIA0KCQlGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJF X1dSSVRFLCANCgkJJnNhLCANCgkJT1BFTl9FWElTVElORywgDQoJCTAsIA0K CQlOVUxMKTsNCglpZihocGlwZUNsaWVudCA9PSBJTlZBTElEX0hBTkRMRV9W QUxVRSl7DQoJCS8vZXJyb3IgDQoJCWdvdG8gZXJyb3JfcmV0Ow0KCX0NCglT ZXRIYW5kbGVJbmZvcm1hdGlvbihocGlwZUNsaWVudCwgSEFORExFX0ZMQUdf SU5IRVJJVCwgSEFORExFX0ZMQUdfSU5IRVJJVCk7DQoNCg0KCXNpLmhTdGRF cnJvciA9IGhwaXBlQ2xpZW50Ow0KCXNpLmhTdGRPdXRwdXQgPSBocGlwZUNs aWVudDsNCglzaS5oU3RkSW5wdXQgPSBocGlwZUNsaWVudDsNCglzaS5kd0Zs YWdzIHw9IFNUQVJURl9VU0VTVERIQU5ETEVTOw0KDQoJLy8gDQoJZiA9IENy ZWF0ZVByb2Nlc3NXKE5VTEwsIA0KCSAgc3VicHJvY2Vzc19jbWRsaW5lLCAg ICAgLy8gY29tbWFuZCBsaW5lIA0KCSAgTlVMTCwgICAgICAgICAgLy8gcHJv Y2VzcyBzZWN1cml0eSBhdHRyaWJ1dGVzIA0KCSAgTlVMTCwgICAgICAgICAg Ly8gcHJpbWFyeSB0aHJlYWQgc2VjdXJpdHkgYXR0cmlidXRlcyANCgkgIFRS VUUsICAgICAgICAgIC8vIGhhbmRsZXMgYXJlIGluaGVyaXRlZCANCgkgIERF VEFDSEVEX1BST0NFU1MsICAgICAgICAgICAgIC8vIGNyZWF0aW9uIGZsYWdz IA0KCSAgTlVMTCwgICAgICAgICAgLy8gdXNlIHBhcmVudCdzIGVudmlyb25t ZW50IA0KCSAgTlVMTCwgICAgICAgICAgLy8gdXNlIHBhcmVudCdzIGN1cnJl bnQgZGlyZWN0b3J5IA0KCSAgJnNpLCAgICAgICAgICAvLyBTVEFSVFVQSU5G TyBwb2ludGVyIA0KCSAgJnBpKTsgICAgICAgICAvLyByZWNlaXZlcyBQUk9D RVNTX0lORk9STUFUSU9OIA0KDQoNCglpZighZil7DQoJCS8vZXJyb3INCgkJ Z290byBlcnJvcl9yZXQ7DQoJfQ0KDQplcnJvcl9yZXQ6DQoJcmV0dXJuIDA7 DQp9DQoNCg== --002354530350c6fe0e04c532be83 Content-Type: text/plain; charset=us-ascii Content-length: 218 -- 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 --002354530350c6fe0e04c532be83--