Mail Archives: cygwin/2012/07/19/14:14:34
X-Recipient: | archive-cygwin AT delorie DOT com
|
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
|
MIME-Version: | 1.0
|
Date: | Fri, 20 Jul 2012 02:14:06 +0800
|
Message-ID: | <CAPOVtOttBL5eJu-QaR--08WBfZqycCd5_EQ3BufdY_8UNnOPYA@mail.gmail.com>
|
Subject: | Question about redirecting Cygwin process's I/O to the client side of an Win32 named pipe.
|
From: | Chiheng Xu <chiheng DOT xu 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
|
--002354530350c6fe0e04c532be83
Content-Type: text/plain; charset=UTF-8
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
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
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
--
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--
- Raw text -