delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2011/12/04/20:17:50

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_NL,TW_RG
X-Spam-Check-By: sourceware.org
Message-ID: <4EDC1B96.7090902@gmail.com>
Date: Sun, 04 Dec 2011 17:17:10 -0800
From: Daniel Colascione <dan DOT colascione AT gmail DOT com>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20111105 Thunderbird/8.0
MIME-Version: 1.0
To: cygwin AT cygwin DOT com
Subject: winln version 1.1
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

--------------enigD5E38112568B3FE148F60F35
Content-Type: multipart/mixed;
 boundary="------------010006000606090508010609"

This is a multi-part message in MIME format.
--------------010006000606090508010609
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Attached is winln 1.1.

/**
 * GNU ln(1) workalike that creates Windows links (hard and symbolic)
 * instead of Cygwin ones.
 *
 * Revision History:
 *
 * Version 1.1 - 2001-12-04
 *
 *  - Use Cygwin functions to convert between character encodings,
 *    correctly respecting locale.
 *
 *  - Explain bugs worked around in the code.
 *
 *  - Ensure that we don't create relative symlinks to invalid
 *    filenames.
 *
 *  - Print message when user lacks SeCreateSymbolicLinkPrivilege and
 *    suggest a way to enable the privilege.
 *
 * Version 1.0 - 2011-04-06
 *
 *  - Initial release
 *
 */


--------------010006000606090508010609
Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0";
 name="winln.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="winln.c"

LyoqCiAqIEdOVSBsbigxKSB3b3JrYWxpa2UgdGhhdCBjcmVhdGVzIFdpbmRv
d3MgbGlua3MgKGhhcmQgYW5kIHN5bWJvbGljKQogKiBpbnN0ZWFkIG9mIEN5
Z3dpbiBvbmVzLgogKgogKiBSZXZpc2lvbiBIaXN0b3J5OgogKgogKiBWZXJz
aW9uIDEuMSAtIDIwMDEtMTItMDQKICoKICogIC0gVXNlIEN5Z3dpbiBmdW5j
dGlvbnMgdG8gY29udmVydCBiZXR3ZWVuIGNoYXJhY3RlciBlbmNvZGluZ3Ms
CiAqICAgIGNvcnJlY3RseSByZXNwZWN0aW5nIGxvY2FsZS4KICoKICogIC0g
RXhwbGFpbiBidWdzIHdvcmtlZCBhcm91bmQgaW4gdGhlIGNvZGUuCiAqCiAq
ICAtIEVuc3VyZSB0aGF0IHdlIGRvbid0IGNyZWF0ZSByZWxhdGl2ZSBzeW1s
aW5rcyB0byBpbnZhbGlkCiAqICAgIGZpbGVuYW1lcy4KICoKICogIC0gUHJp
bnQgbWVzc2FnZSB3aGVuIHVzZXIgbGFja3MgU2VDcmVhdGVTeW1ib2xpY0xp
bmtQcml2aWxlZ2UgYW5kCiAqICAgIHN1Z2dlc3QgYSB3YXkgdG8gZW5hYmxl
IHRoZSBwcml2aWxlZ2UuCiAqCiAqIFZlcnNpb24gMS4wIC0gMjAxMS0wNC0w
NgogKgogKiAgLSBJbml0aWFsIHJlbGVhc2UKICoKICovCgojZGVmaW5lIF9X
SU4zMl9XSU5OVCAweDA1MDAgLypXaW4yayovCiNkZWZpbmUgU1RSSUNUCiNk
ZWZpbmUgVU5JQ09ERSAxCiNkZWZpbmUgX1VOSUNPREUgMQoKI2luY2x1ZGUg
PHdpbmRvd3MuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRs
aWIuaD4KI2luY2x1ZGUgPHdjaGFyLmg+CiNpbmNsdWRlIDxnZXRvcHQuaD4K
I2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNs
dWRlIDxsb2NhbGUuaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxz
eXMvY3lnd2luLmg+CiNpbmNsdWRlIDxzeXMvc3RhdC5oPgojaW5jbHVkZSA8
bGliZ2VuLmg+CgojZGVmaW5lIFBSR05BTUUgIndpbmxuIgojZGVmaW5lIFBS
R1ZFUiAiMS4xIgojZGVmaW5lIFBSR0FVVEhPUiAiRGFuaWVsIENvbGFzY2lv
bmUgPGRhbi5jb2xhc2Npb25lQGdtYWlsLmNvbT4iCiNkZWZpbmUgUFJHQ09Q
WSAiQ29weXJpZ2h0IChDKSAyMDExICIgUFJHQVVUSE9SCiNkZWZpbmUgUFJH
TElDRU5TRSAiR1BMdjIgb3IgbGF0ZXIgPGh0dHA6Ly93d3cuZ251Lm9yZy9s
aWNlbnNlcy9ncGwtMi4wLmh0bWw+IgoKc3RhdGljIEJPT0xFQU4gV0lOQVBJ
CigqWENyZWF0ZVN5bWJvbGljTGlua1cpCihMUFdTVFIgbHBTeW1saW5rRmls
ZU5hbWUsCiBMUFdTVFIgbHBUYXJnZXRGaWxlTmFtZSwKIERXT1JEIGR3Rmxh
Z3MpOwoKc3RhdGljIGNoYXIqCnRvX21icyhjb25zdCB3Y2hhcl90KiB3Yyk7
CgpzdGF0aWMgd2NoYXJfdCoKdG9fd2NzKGNvbnN0IGNoYXIqIG1icyk7Cgpz
dGF0aWMgdm9pZAp1c2FnZSgpCnsKICAgIGZwcmludGYoCiAgICAgICAgc3Rk
b3V0LAogICAgICAgIFBSR05BTUUgIiBbT1BUSU9OXSBUQVJHRVQgTElOS05B
TUU6IGxpa2UgbG4oMSkgZm9yIG5hdGl2ZSBXaW5kb3dzIGxpbmtzXG4iCiAg
ICAgICAgIlxuIgogICAgICAgICIgIC1zIC0tc3ltYm9saWM6IG1ha2Ugc3lt
Ym9saWMgbGlua3NcbiIKICAgICAgICAiICAtdiAtLXZlcmJvc2U6IHZlcmJv
c2VcbiIKICAgICAgICAiICAtZiAtLWZvcmNlOiByZXBsYWNlIGV4aXN0aW5n
IGxpbmtzXG4iCiAgICAgICAgIiAgLWQgLS1kaXJlY3Rvcnk6IGFsd2F5cyB0
cmVhdCBUQVJHRVQgYXMgYSBkaXJlY3RvcnlcbiIKICAgICAgICAiICAtRiAt
LWZpbGU6IGFsd2F5cyB0cmVhdCBUQVJHRVQgYXMgYSBmaWxlXG4iCiAgICAg
ICAgIiAgLUEgLS1hdXRvOiBndWVzcyB0eXBlIG9mIFRBUkdFVCBbZGVmYXVs
dF1cbiIKICAgICAgICAiICAgICBpZiBUQVJHRVQgZG9lcyBub3QgZXhpc3Qs
IHRyZWF0IGFzIGZpbGVcbiIKICAgICAgICAiXG4iCiAgICAgICAgUFJHTkFN
RSAiIC1oXG4iCiAgICAgICAgUFJHTkFNRSAiIC0taGVscFxuIgogICAgICAg
ICJcbiIKICAgICAgICAiICBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlLlxu
IgogICAgICAgICJcbiIKICAgICAgICBQUkdOQU1FICIgLVZcbiIKICAgICAg
ICBQUkdOQU1FICIgLS12ZXJzaW9uXG4iCiAgICAgICAgIlxuIgogICAgICAg
ICIgIERpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbi5cbiIKICAgICAgICAp
Owp9CgpzdGF0aWMgdm9pZAp2ZXJzaW5mbyAoKQp7CiAgICBmcHJpbnRmKHN0
ZG91dCwKICAgICAgICAgICAgUFJHTkFNRSAiICIgUFJHVkVSICJcbiIKICAg
ICAgICAgICAgUFJHQ09QWSAiXG4iCiAgICAgICAgICAgIFBSR0xJQ0VOU0Ug
IlxuIgogICAgICAgICk7Cn0KCi8qIERlY29kZSBhIFdpbjMyIGVycm9yIGNv
ZGUgdG8gYSBsb2NhbGl6ZWQgc3RyaW5nIGVuY29kZWQgYWNjb3JkaW5nCiAg
IHRvIHRoZSBjdXJyZW50IGxvY2FsZS4gIFJldHVybiBhIG1hbGxvYygpZWQg
c3RyaW5nLiAqLwpzdGF0aWMgY2hhcioKZXJybXNnKERXT1JEIGVycm9yY29k
ZSkKewogICAgd2NoYXJfdCogd2NzbXNnID0gTlVMTDsKICAgIGNoYXIqIG1z
ZyA9IE5VTEw7CgogICAgRm9ybWF0TWVzc2FnZVcoCiAgICAgICAgKEZPUk1B
VF9NRVNTQUdFX0ZST01fU1lTVEVNfAogICAgICAgICBGT1JNQVRfTUVTU0FH
RV9BTExPQ0FURV9CVUZGRVIpLAogICAgICAgIE5VTEwsCiAgICAgICAgZXJy
b3Jjb2RlLAogICAgICAgIDAsCiAgICAgICAgKExQV1NUUikmd2NzbXNnLAog
ICAgICAgIDAsCiAgICAgICAgTlVMTCk7CgogICAgaWYod2NzbXNnICE9IE5V
TEwpIHsKICAgICAgICBtc2cgPSB0b19tYnMod2NzbXNnKTsKICAgICAgICBM
b2NhbEZyZWUod2NzbXNnKTsKICAgICAgICBpZihtc2cgJiYgbXNnWzBdICYm
IG1zZ1tzdHJsZW4obXNnKSAtIDFdID09ICdcbicpIHsKICAgICAgICAgICAg
bXNnW3N0cmxlbihtc2cpIC0gMV0gPSAnXDAnOwogICAgICAgIH0KICAgIH0K
CiAgICBpZihtc2cgPT0gTlVMTCkgewogICAgICAgIG1zZyA9IHN0cmR1cCgi
W3Vua25vd24gZXJyb3JdIik7CiAgICB9CgogICAgcmV0dXJuIG1zZzsKfQoK
c3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXSA9CnsKICAg
IHsgInZlcmJvc2UiLCAgIDAsIDAsICd2JyB9LAogICAgeyAiZGlyZWN0b3J5
IiwgMCwgMCwgJ2QnIH0sCiAgICB7ICJmaWxlIiwgICAgICAwLCAwLCAnRicg
fSwKICAgIHsgInN5bWJvbGljIiwgIDAsIDAsICdzJyB9LAogICAgeyAiZm9y
Y2UiLCAgICAgMCwgMCwgJ2YnIH0sCiAgICB7ICJhdXRvIiwgICAgICAwLCAw
LCAnQScgfSwKICAgIHsgImhlbHAiLCAgICAgIDAsIDAsICdoJyB9LAogICAg
eyAidmVyc2lvbiIsICAgMCwgMCwgJ1YnIH0sCiAgICB7ICJuby10YXJnZXQt
ZGlyZWN0b3J5IiwgMCwgMCwgJ1QnIH0sCiAgICB7ICJ0YXJnZXQtZGlyZWN0
b3J5IiwgMSwgMCwgJ3QnIH0sCiAgICB7IDAgfQp9OwoKLyogT3V0cHV0IGlu
Zm9ybWF0aW9uIGFib3V0IGxpbmsgb24gc3Rkb3V0ICovCnN0YXRpYyBpbnQg
dmVyYm9zZSAgICA9IDA7CgovKiBPdmVyd3JpdGUgZXhpc3RpbmcgbGlua3Mg
Ki8Kc3RhdGljIGludCBmb3JjZSAgICAgID0gMDsKCi8qIENyZWF0ZSBzeW1i
b2xpYyBsaW5rcyAqLwpzdGF0aWMgaW50IHN5bWJvbGljICAgPSAwOwoKLyog
TmV2ZXIgdHJlYXQgbGFzdCBhcmd1bWVudCBhcyBhIGRpcmVjdG9yeSAqLwpz
dGF0aWMgaW50IG5vX3RndF9kaXIgPSAwOwoKZW51bSB0eXBlX21vZGUgewog
ICAgTU9ERV9GT1JDRV9GSUxFLAogICAgTU9ERV9GT1JDRV9ESVIsCiAgICBN
T0RFX0FVVE8sCn07CgpzdGF0aWMgZW51bSB0eXBlX21vZGUgbW9kZSA9IE1P
REVfQVVUTzsKCi8qIENvbnZlcnQgdGhlIGdpdmVuIHN0cmluZyAod2hpY2gg
aXMgZW5jb2RlZCBpbiB0aGUgY3VycmVudCBsb2NhbGUpCiAgIHRvIGEgd2lk
ZSBjaGFyYWN0ZXIgc3RyaW5nLiAgVGhlIHJldHVybmVkIHN0cmluZyBpcyBt
YWxsb2NlZC4KICAgUmV0dXJuIE5VTEwgb24gZmFpbHVyZS4gKi8Kc3RhdGlj
IHdjaGFyX3QqCnRvX3djcyhjb25zdCBjaGFyKiBtYnMpCnsKICAgIHNpemVf
dCB3Y3NfbGVuZ3RoID0gbWJzdG93Y3MoTlVMTCwgbWJzLCAwKTsKICAgIHdj
aGFyX3QqIHdjcyA9IG1hbGxvYygod2NzX2xlbmd0aCArIDEpICogc2l6ZW9m
KCp3Y3MpKTsKICAgIGlmKHdjcyAhPSBOVUxMKSB7CiAgICAgICAgaWYobWJz
dG93Y3Mod2NzLCBtYnMsIHdjc19sZW5ndGgpID09IChzaXplX3QpIC0xKSB7
CiAgICAgICAgICAgIGZyZWUod2NzKTsKICAgICAgICAgICAgd2NzID0gTlVM
TDsKICAgICAgICB9CiAgICB9CgoKCiAgICByZXR1cm4gd2NzOwp9CgovKiBD
b252ZXJ0IGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHRvIGEgbWFsbG9jZWQg
bXVsdGlieXRlIHN0cmluZwogICBlbmNvZGVkIGFzIHNwZWNpZmllZCBpbiB0
aGUgY3VycmVudCBsb2NhbGUuICBSZXR1cm4gTlVMTCBvbgogICBmYWlsdXJl
LiAqLwpzdGF0aWMgY2hhcioKdG9fbWJzKGNvbnN0IHdjaGFyX3QqIHdjcykK
ewogICAgc2l6ZV90IG1ic19sZW5ndGggPSB3Y3N0b21icyhOVUxMLCB3Y3Ms
IDApICsgMTsKICAgIGNoYXIqIG1icyA9IG1hbGxvYyhtYnNfbGVuZ3RoICog
c2l6ZW9mKCptYnMpKTsKICAgIGlmKG1icyAhPSBOVUxMKSB7CiAgICAgICAg
aWYod2NzdG9tYnMobWJzLCB3Y3MsIG1ic19sZW5ndGgpID09IChzaXplX3Qp
IC0xKSB7CiAgICAgICAgICAgIGZyZWUobWJzKTsKICAgICAgICAgICAgbWJz
ID0gTlVMTDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIG1iczsKfQoK
LyogQ29udmVydCBwYXRoIHRvIFdpbjMyLiAgSWYgd2UncmUgZ2l2ZW4gYW4g
YWJzb2x1dGUgcGF0aCwgdXNlIG5vcm1hbAogICBDeWd3aW4gY29udmVyc2lv
biBmdW5jdGlvbnMuICBJZiB3ZSd2ZSBnaXZlbiBhIHJlbGF0aXZlIHBhdGgs
IHdvcmsKICAgYXJvdW5kIHRoZSBjeWd3aW5fY29udl9wYXRoIGRlZmljaWVu
Y3kgZGVzY3JpYmVkIGJlbG93IGJ5IHVzaW5nIGEKICAgdmVyeSBzaW1wbGUg
ZmlsZW5hbWUgdHJhbnNmb3JtYXRpb24uCgogICBSZXR1cm4gTlVMTCBvbiBm
YWlsdXJlLgoKICAgWFhYOiB3ZSB0cmVhdCByZWxhdGl2ZSBwYXRocyBzcGVj
aWFsbHkgYmVjYXVzZSBjeWd3aW5fY3JlYXRlX3BhdGgKICAgZmFpbHMgdG8g
YWN0dWFsbHkgcmV0dXJuIGEgcmVsYXRpdmUgcGF0aCBmb3IgYSByZWZlcmVu
Y2UgdG8gdGhlCiAgIHBhcmVudCBkaXJlY3RvcnkuIFNheSB3ZSBoYXZlIHRo
aXMgZGlyZWN0b3J5IHN0cnVjdHVyZToKCiAgICAgICBkaXIvZm9vCiAgICAg
ICBkaXIvc3ViZGlyLwoKICAgV2l0aCBDV0QgaW4gZGlyL3N1YmRpciwgd2Ug
cnVuIHdpbmxuIC1zdiAuLi9mb28uCiAgIGN5Z3dpbl9jcmVhdGVfcGF0aCB3
aWxsIGFjdHVhbGx5IHlpZWxkIHRoZSBfYWJzb2x1dGVfIHBhdGggdG8gZm9v
LAogICBub3QgdGhlIGNvcnJlY3QgcmVsYXRpdmUgV2luZG93cyBwYXRoLCAu
Llxmb28uCiovCnN0YXRpYyB3Y2hhcl90Kgpjb252X3BhdGhfdG9fd2luMzIo
Y29uc3QgY2hhciogcG9zaXhfcGF0aCkKewogICAgd2NoYXJfdCogdzMyX3Bh
dGggPSBOVUxMOwogICAgc2l6ZV90IHBvc2l4X3BhdGhfbGVuZ3RoID0gc3Ry
bGVuKHBvc2l4X3BhdGgpOwoKICAgIGlmKHBvc2l4X3BhdGhfbGVuZ3RoIDwg
MSkgewogICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgIHJldHVybiBO
VUxMOwogICAgfQoKICAgIGlmKHBvc2l4X3BhdGhbMF0gIT0gJy8nICYmCiAg
ICAgICBwb3NpeF9wYXRoW3Bvc2l4X3BhdGhfbGVuZ3RoIC0gMV0gIT0gJy4n
ICYmCiAgICAgICBzdHJjc3BuKHBvc2l4X3BhdGgsICI/PD5cXDoqfCIpID09
IHBvc2l4X3BhdGhfbGVuZ3RoKQogICAgewogICAgICAgIGNoYXIqIHRtcCA9
IHN0cmR1cChwb3NpeF9wYXRoKTsKICAgICAgICBjaGFyKiB0bXAyOwoKICAg
ICAgICBmb3IodG1wMiA9IHRtcDsgKnRtcDI7ICsrdG1wMikgewogICAgICAg
ICAgICBpZigqdG1wMiA9PSAnLycpIHsKICAgICAgICAgICAgICAgICp0bXAy
ID0gJ1xcJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdzMy
X3BhdGggPSB0b193Y3ModG1wKTsKICAgICAgICBmcmVlKHRtcCk7CiAgICB9
CgogICAgaWYodzMyX3BhdGggPT0gTlVMTCkgewogICAgICAgIHczMl9wYXRo
ID0gY3lnd2luX2NyZWF0ZV9wYXRoKAogICAgICAgICAgICBDQ1BfUE9TSVhf
VE9fV0lOX1cgfCBDQ1BfUkVMQVRJVkUsIHBvc2l4X3BhdGgpOwogICAgfQoK
ICAgIHJldHVybiB3MzJfcGF0aDsKfQoKLyogTWFrZSBhIGxpbmsuIFJldHVy
biAwIG9uIHN1Y2Nlc3MsIHNvbWV0aGluZyBlbHNlIG9uIGVycm9yLiAqLwpz
dGF0aWMgaW50CmRvX2xpbmsoY29uc3QgY2hhciogdGFyZ2V0LCBjb25zdCBj
aGFyKiBsaW5rKQp7CiAgICAvKiBXb3JrIGFyb3VuZCBhIGJ1ZyB0aGF0IGNh
dXNlcyBDeWd3aW4gdG8gcmVzb2x2ZSB0aGUgcGF0aCBpZiBpdAogICAgICAg
ZW5kcyBpbiBhIG5hdGl2ZSBzeW1ib2xpYyBsaW5rLgoKICAgICAgIFRoZSBi
dWcgaXMgZGVzY3JpYmVkIG9uIHRoZSBDeWd3aW4gbWFpbGluZyBsaXN0IGlu
IG1lc3NhZ2UKICAgICAgIDxBQU5Ma1RpPTk4K001c0FzR3A0dlQwOVVOOXVp
c3FwME09bWdKaTlXY1NPYkdAbWFpbC5nbWFpbC5jb20+Li4KCiAgICAgICBU
aGF0IHRoaXMgYnVnIG1ha2VzIHN5bWxpbmtzLXRvLXN5bWxpbmtzIHBvaW50
IHRvIHRoZQogICAgICAgdWx0aW1hdGUgdGFyZ2V0LCBhbmQgdGhlcmUncyBu
byBnb29kIHdheSBhcm91bmQgdGhhdC4KCiAgICAgICBYWFg6IFRoZSB3b3Jr
YXJvdW5kIGlzIGhlcmUgcmFjeS4gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGlm
CiAgICAgICB3ZSdyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIGxpbmsgYW55
d2F5LCB3ZSBjYW4ganVzdAogICAgICAgcmVtb3ZlIHRoZSBsaW5rIGZpcnN0
IHNvIHRoYXQgY3lnd2luX2NvbnZfcGF0aCBkb2Vzbid0CiAgICAgICBmb2xs
b3cgdGhlIG5vdyBub24tZXhpc3RhbnQgc3ltbGluay4KICAgICovCiAgICBz
dHJ1Y3Qgc3RhdCBsc3RhdGJ1ZjsKICAgIGludCBsc3RhdF9zdWNjZXNzID0g
MDsKCiAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOwogICAgaW50IHN0YXRfc3Vj
Y2VzcyA9IDA7CgogICAgc3RydWN0IHN0YXQgdGFyZ2V0X3N0YXRidWY7CiAg
ICBpbnQgdGFyZ2V0X3N0YXRfc3VjY2VzcyA9IDA7CgogICAgd2NoYXJfdCog
dzMybGluayA9IE5VTEw7CiAgICB3Y2hhcl90KiB3MzJ0YXJnZXQgPSBOVUxM
OwogICAgRFdPUkQgZmxhZ3M7CgogICAgaW50IHJldCA9IDA7CgogICAgaWYo
bHN0YXQobGluaywgJmxzdGF0YnVmKSA9PSAwKSB7CiAgICAgICAgbHN0YXRf
c3VjY2VzcyA9IDE7CgogICAgICAgIGlmKHN0YXQobGluaywgJnN0YXRidWYp
ID09IDApIHsKICAgICAgICAgICAgc3RhdF9zdWNjZXNzID0gMTsKICAgICAg
ICB9CgogICAgICAgIGlmKGZvcmNlKSB7CiAgICAgICAgICAgIGlmKHVubGlu
ayhsaW5rKSkgewogICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAg
ICAgICAgICAgICAgICAgICAgICAgIFBSR05BTUUgIjogY2Fubm90IHJlbW92
ZSBgJXMnOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgbGluaywg
c3RyZXJyb3IoZXJybm8pKTsKICAgICAgICAgICAgICAgIHJldCA9IDU7CiAg
ICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgfQogICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAg
ICAgICAgICAgICAgIFBSR05BTUUgIjogY291bGQgbm90IGNyZWF0ZSBsaW5r
IGAlcyc6IGZpbGUgZXhpc3RzXG4iLAogICAgICAgICAgICAgICAgICAgIGxp
bmspOwogICAgICAgICAgICByZXQgPSAxOwogICAgICAgICAgICBnb3RvIG91
dDsKICAgICAgICB9CiAgICB9CgogICAgaWYoc3RhdCh0YXJnZXQsICZ0YXJn
ZXRfc3RhdGJ1ZikgPT0gMCkgewogICAgICAgIHRhcmdldF9zdGF0X3N1Y2Nl
c3MgPSAxOwogICAgfQoKICAgIHczMmxpbmsgPSBjb252X3BhdGhfdG9fd2lu
MzIobGluayk7CiAgICBpZih3MzJsaW5rID09IE5VTEwpIHsKICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgUFJHTkFNRSAiOiBjb3VsZCBub3QgY29udmVydCBg
JXMnIHRvIHdpbjMyIHBhdGhcbiIsCiAgICAgICAgICAgICAgICBsaW5rKTsK
ICAgICAgICByZXQgPSAyOwogICAgICAgIGdvdG8gb3V0OwogICAgfQoKICAg
IHczMnRhcmdldCA9IGNvbnZfcGF0aF90b193aW4zMih0YXJnZXQpOwogICAg
aWYodzMydGFyZ2V0ID09IE5VTEwpIHsKICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgUFJHTkFNRSAiOiBjb3VsZCBub3QgY29udmVydCBgJXMnIHRvIHdpbjMy
IHBhdGhcbiIsCiAgICAgICAgICAgICAgICB0YXJnZXQpOwogICAgICAgIHJl
dCA9IDI7CiAgICAgICAgZ290byBvdXQ7CiAgICB9CgoKICAgIHN3aXRjaCht
b2RlKQogICAgewogICAgICAgIGNhc2UgTU9ERV9GT1JDRV9ESVI6CiAgICAg
ICAgICAgIGZsYWdzID0gU1lNQk9MSUNfTElOS19GTEFHX0RJUkVDVE9SWTsK
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNT0RFX0ZPUkNFX0ZJ
TEU6CiAgICAgICAgICAgIGZsYWdzID0gMDsKICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZmxhZ3MgPSAwOwogICAg
ICAgICAgICBpZih0YXJnZXRfc3RhdF9zdWNjZXNzICYmIFNfSVNESVIodGFy
Z2V0X3N0YXRidWYuc3RfbW9kZSkpIHsKICAgICAgICAgICAgICAgIGZsYWdz
IHw9IFNZTUJPTElDX0xJTktfRkxBR19ESVJFQ1RPUlk7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgYnJlYWs7CiAgICB9CgogICAgLyogRG9uJ3QgY2Fs
bCBsaW5rKDIpLCBldmVuIGZvciBoYXJkIGxpbmtzOiB3ZSB3YW50IHRvIG1h
aW50YWluCiAgICAgKiBhYnNvbHV0ZSBwYXJpdHkgYmV0d2VlbiB0aGUgaGFy
ZCBhbmQgc3ltYm9saWMgbGlua3MgbWFkZSB1c2luZwogICAgICogdGhpcyB0
b29sLiAgV2UgZG9uJ3Qgd2FudCBsaW5rIHRhcmdldHMgdG8gY2hhbmdlIGp1
c3QgYmVjYXVzZQogICAgICogd2UgY2hhbmdlIHRoZSBsaW5rIHR5cGUuICov
CgogICAgaWYoc3ltYm9saWMpIHsKICAgICAgICBpZihYQ3JlYXRlU3ltYm9s
aWNMaW5rVyh3MzJsaW5rLCB3MzJ0YXJnZXQsIGZsYWdzKSkgewogICAgICAg
ICAgICBpZih2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICBwcmludGYoImAl
cycgLT4gYCVzJyBbJXNdXG4iLCBsaW5rLCB0YXJnZXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgZmxhZ3MgPyAiZGlyIiA6ICJmaWxlIik7CiAgICAgICAg
ICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgUFJHTkFNRSAiOiBmYWlsZWQgdG8gY3JlYXRlIHN5bWJvbGljIGxp
bmsgYCVzJzogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgbGluaywgZXJy
bXNnKEdldExhc3RFcnJvcigpKSk7CiAgICAgICAgICAgIHJldCA9IDI7CiAg
ICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAg
ICAgICAgaWYoQ3JlYXRlSGFyZExpbmtXKHczMmxpbmssIHczMnRhcmdldCwg
MCkpIHsKICAgICAgICAgICAgaWYodmVyYm9zZSkgewogICAgICAgICAgICAg
ICAgcHJpbnRmKCJgJXMnID0+IGAlcydcbiIsIGxpbmssIHRhcmdldCk7CiAg
ICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgUFJHTkFNRSAiOiBmYWlsZWQgdG8gY3JlYXRlIGhhcmQg
bGluayBgJXMnOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICBsaW5rLCBl
cnJtc2coR2V0TGFzdEVycm9yKCkpKTsKICAgICAgICAgICAgcmV0ID0gMjsK
ICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgfQogICAgfQoKICAgIG91
dDoKICAgIGZyZWUodzMybGluayk7CiAgICBmcmVlKHczMnRhcmdldCk7CiAg
ICByZXR1cm4gcmV0Owp9CgpzdGF0aWMgaW50CmlzX2Rpcihjb25zdCBjaGFy
KiBwYXRoKQp7CiAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOwogICAgcmV0dXJu
IHN0YXQocGF0aCwgJnN0YXRidWYpID09IDAgJiYKICAgICAgICBTX0lTRElS
KHN0YXRidWYuc3RfbW9kZSk7Cn0KCnN0YXRpYyBCT09MCnNldF9wcml2aWxl
Z2Vfc3RhdHVzICgKICAgIGNvbnN0IHdjaGFyX3QqIHByaXZuYW1lLAogICAg
Qk9PTCBiRW5hYmxlUHJpdmlsZWdlKQp7CiAgICAvKiBBZnRlciB0aGUgTVNE
TiBleGFtcGxlLiAqLwoKICAgIFRPS0VOX1BSSVZJTEVHRVMgdHA7CiAgICBM
VUlEIGx1aWQ7CiAgICBIQU5ETEUgaFRva2VuOwogICAgQk9PTCBzdWNjZXNz
OwoKICAgIGhUb2tlbiA9IE5VTEw7CiAgICBzdWNjZXNzID0gRkFMU0U7Cgog
ICAgaWYgKCFPcGVuUHJvY2Vzc1Rva2VuIChHZXRDdXJyZW50UHJvY2VzcyAo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRPS0VOX1FVRVJZIHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRPS0VOX0FESlVTVF9QUklW
SUxFR0VTKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhUb2tlbikp
CiAgICB7CiAgICAgICAgZ290byBvdXQ7CiAgICB9CgogICAgaWYgKCAhTG9v
a3VwUHJpdmlsZWdlVmFsdWUgKAogICAgICAgICAgICAgTlVMTCwgICAgICAg
ICAgICAvLyBsb29rdXAgcHJpdmlsZWdlIG9uIGxvY2FsIHN5c3RlbQogICAg
ICAgICAgICAgcHJpdm5hbWUsICAgICAgICAvLyBwcml2aWxlZ2UgdG8gbG9v
a3VwCiAgICAgICAgICAgICAmbHVpZCApICkgICAgICAgIC8vIHJlY2VpdmVz
IExVSUQgb2YgcHJpdmlsZWdlCiAgICB7CiAgICAgICAgZ290byBvdXQ7CiAg
ICB9CgogICAgdHAuUHJpdmlsZWdlQ291bnQgPSAxOwogICAgdHAuUHJpdmls
ZWdlc1swXS5MdWlkID0gbHVpZDsKICAgIGlmIChiRW5hYmxlUHJpdmlsZWdl
KSB7CiAgICAgICAgdHAuUHJpdmlsZWdlc1swXS5BdHRyaWJ1dGVzID0gU0Vf
UFJJVklMRUdFX0VOQUJMRUQ7CiAgICB9IGVsc2UgewogICAgICAgIHRwLlBy
aXZpbGVnZXNbMF0uQXR0cmlidXRlcyA9IDA7CiAgICB9CgogICAgLy8gRW5h
YmxlIHRoZSBwcml2aWxlZ2Ugb3IgZGlzYWJsZSBhbGwgcHJpdmlsZWdlcy4K
CiAgICBpZiAoICFBZGp1c3RUb2tlblByaXZpbGVnZXMgKAogICAgICAgICAg
ICAgaFRva2VuLAogICAgICAgICAgICAgRkFMU0UsCiAgICAgICAgICAgICAm
dHAsCiAgICAgICAgICAgICBzaXplb2YgKFRPS0VOX1BSSVZJTEVHRVMpLAog
ICAgICAgICAgICAgKFBUT0tFTl9QUklWSUxFR0VTKSBOVUxMLAogICAgICAg
ICAgICAgKFBEV09SRCkgTlVMTCkgKQogICAgewogICAgICAgIGdvdG8gb3V0
OwogICAgfQoKICAgIGlmIChHZXRMYXN0RXJyb3IgKCkgPT0gRVJST1JfTk9U
X0FMTF9BU1NJR05FRCkgewogICAgICAgIGdvdG8gb3V0OwogICAgfQoKICAg
IHN1Y2Nlc3MgPSBUUlVFOwoKICBvdXQ6CgogICAgaWYgKGhUb2tlbikgewog
ICAgICAgIENsb3NlSGFuZGxlIChoVG9rZW4pOwogICAgfQoKICAgIHJldHVy
biBzdWNjZXNzOwp9CgppbnQKbWFpbihpbnQgYXJnYywgY2hhciogYXJndltd
KQp7CiAgICBpbnQgYzsKICAgIGNoYXIqIHRndF9kaXIgPSBOVUxMOwogICAg
aW50IHJldCA9IDA7CgogICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwoKICAg
IHRvX21icyhMIiIpOwogICAgdG9fd2NzKCIiKTsKCiAgICB3aGlsZSAoKGMg
PSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiVnZkZkZzQVR0OiIsIGxvbmdv
cHRzLCAwKSkgIT0gLTEpIHsKICAgICAgICBzd2l0Y2goYykgewogICAgICAg
ICAgICBjYXNlICd2JzoKICAgICAgICAgICAgICAgIHZlcmJvc2UgPSAxOwog
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2QnOgog
ICAgICAgICAgICAgICAgbW9kZSA9IE1PREVfRk9SQ0VfRElSOwogICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2YnOgogICAgICAg
ICAgICAgICAgZm9yY2UgPSAxOwogICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgIGNhc2UgJ0YnOgogICAgICAgICAgICAgICAgbW9kZSA9IE1P
REVfRk9SQ0VfRklMRTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgIHN5bWJvbGljID0gMTsK
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdBJzoK
ICAgICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0FVVE87CiAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnVCc6CiAgICAgICAgICAg
ICAgICBub190Z3RfZGlyID0gMTsKICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAgICAgIHRndF9kaXIg
PSBzdHJkdXAob3B0YXJnKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICBjYXNlICdoJzoKICAgICAgICAgICAgICAgIHVzYWdlKCk7CiAg
ICAgICAgICAgICAgICByZXQgPSAwOwogICAgICAgICAgICAgICAgZ290byBv
dXQ7CiAgICAgICAgICAgIGNhc2UgJ1YnOgogICAgICAgICAgICAgICAgdmVy
c2luZm8gKCk7CiAgICAgICAgICAgICAgICByZXQgPSAwOwogICAgICAgICAg
ICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgUFJHTkFNRSAiOiB1c2UgLS1oZWxw
IGZvciB1c2FnZVxuIik7CiAgICAgICAgICAgICAgICByZXQgPSA0OwogICAg
ICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgfQogICAgfQoKICAgIGlm
KHN5bWJvbGljKSB7CiAgICAgICAgSE1PRFVMRSBoS2VybmVsMzIgPSBMb2Fk
TGlicmFyeVcoTCJrZXJuZWwzMiIpOwogICAgICAgIGlmKGhLZXJuZWwzMiA9
PSBOVUxMKSB7CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBQUkdOQU1F
ICI6IGNvdWxkIG5vdCBsb2FkIGtlcm5lbDMyOiAlc1xuIiwKICAgICAgICAg
ICAgICAgICAgICBlcnJtc2coR2V0TGFzdEVycm9yKCkpKTsKICAgICAgICAg
ICAgcmV0ID0gMTsKICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgfQoK
ICAgICAgICBYQ3JlYXRlU3ltYm9saWNMaW5rVyA9CiAgICAgICAgICAgICh2
b2lkKilHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsICJDcmVhdGVTeW1ib2xp
Y0xpbmtXIik7CgogICAgICAgIGlmKFhDcmVhdGVTeW1ib2xpY0xpbmtXID09
IE5VTEwpIHsKICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIFBSR05BTUUg
Ijogc3ltYm9saWMgbGlua3Mgbm90IHN1cHBvcnRlZCBvbiB0aGlzIE9TXG4i
KTsKICAgICAgICAgICAgcmV0ID0gMjsKICAgICAgICAgICAgZ290byBvdXQ7
CiAgICAgICAgfQoKICAgICAgICBpZighc2V0X3ByaXZpbGVnZV9zdGF0dXMo
TCJTZUNyZWF0ZVN5bWJvbGljTGlua1ByaXZpbGVnZSIsIFRSVUUpKSB7CiAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAg
IFBSR05BTUUgIjogeW91IGRvbid0IHBlcm1pc3Npb24gdG8gY3JlYXRlIHN5
bWJvbGljIGxpbmtzLiBSdW4sIgogICAgICAgICAgICAgICAgICAgICIgYXMg
YWRtaW5pc3RyYXRvcixcbiIKICAgICAgICAgICAgICAgICAgICBQUkdOQU1F
ICI6ICAgZWRpdHJpZ2h0cyAtYSBTZUNyZWF0ZVN5bWJvbGljTGlua1ByaXZp
bGVnZSAtYSAkWU9VUl9VU0VSXG4iCiAgICAgICAgICAgICAgICApOwoKICAg
ICAgICAgICAgcmV0ID0gMzsKICAgICAgICAgICAgZ290byBvdXQ7CiAgICAg
ICAgfQogICAgfQoKICAgIGFyZ2MgLT0gb3B0aW5kOwogICAgYXJndiArPSBv
cHRpbmQ7CgogICAgaWYoYXJnYyA9PSAwKSB7CiAgICAgICAgZnByaW50Zihz
dGRlcnIsIFBSR05BTUUgIjogbm8gYXJndW1lbnRzLiBVc2UgLS1oZWxwIGZv
ciB1c2FnZVxuIik7CiAgICAgICAgcmV0ID0gMTsKICAgICAgICBnb3RvIG91
dDsKICAgIH0KCiAgICBpZihub190Z3RfZGlyKSB7CiAgICAgICAgaWYoYXJn
YyAhPSAyKSB7CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBQUkdOQU1F
ICI6IG11c3QgaGF2ZSBleGFjdGx5IHR3byBhcmdzIHdpdGggLVRcbiIpOwog
ICAgICAgICAgICByZXQgPSAxOwogICAgICAgICAgICBnb3RvIG91dDsKICAg
ICAgICB9CgogICAgICAgIHJldCA9IGRvX2xpbmsoYXJndlswXSwgYXJndlsx
XSk7CiAgICAgICAgZ290byBvdXQ7CiAgICB9CgogICAgaWYodGd0X2RpciA9
PSBOVUxMICYmIGFyZ2MgPT0gMSkgewogICAgICAgIHRndF9kaXIgPSAiLiI7
CiAgICB9CgogICAgaWYodGd0X2RpciA9PSBOVUxMKSB7CiAgICAgICAgaW50
IGxhc3RfaXNfZGlyID0gaXNfZGlyKGFyZ3ZbYXJnYyAtIDFdKTsKICAgICAg
ICBpZihhcmdjID09IDIgJiYgIWxhc3RfaXNfZGlyKSB7CiAgICAgICAgICAg
IHJldCA9IGRvX2xpbmsoYXJndlswXSwgYXJndlsxXSk7CiAgICAgICAgICAg
IGdvdG8gb3V0OwogICAgICAgIH0KCiAgICAgICAgaWYoIWxhc3RfaXNfZGly
KSB7CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBQUkdOQU1FICI6IGAl
cyc6IG5vdCBhIGRpcmVjdG9yeVxuIiwKICAgICAgICAgICAgICAgICAgICBh
cmd2W2FyZ2MgLSAxXSk7CiAgICAgICAgICAgIHJldCA9IDE7CiAgICAgICAg
ICAgIGdvdG8gb3V0OwogICAgICAgIH0KCiAgICAgICAgdGd0X2RpciA9IGFy
Z3ZbLS1hcmdjXTsKICAgICAgICBhcmd2W2FyZ2NdID0gTlVMTDsKICAgIH0K
CiAgICBmb3IoOyAqYXJndjsgKythcmd2KSB7CiAgICAgICAgY2hhciogdGd0
OwogICAgICAgIGludCByOwoKICAgICAgICBpZihhc3ByaW50ZigmdGd0LCAi
JXMvJXMiLCB0Z3RfZGlyLCBiYXNlbmFtZSgqYXJndikpID09IC0xKSB7CiAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBQUkdOQU1FICI6IGFzcHJpbnRm
OiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykp
OwogICAgICAgICAgICByZXQgPSAxOwogICAgICAgICAgICBnb3RvIG91dDsK
ICAgICAgICB9CgogICAgICAgIHIgPSBkb19saW5rKCphcmd2LCB0Z3QpOwog
ICAgICAgIGlmKHIgJiYgcmV0ID09IDApIHsKICAgICAgICAgICAgcmV0ID0g
cjsKICAgICAgICB9CgogICAgICAgIGZyZWUodGd0KTsKICAgIH0KCiAgICBv
dXQ6CiAgICByZXR1cm4gcmV0Owp9Cg==

--------------010006000606090508010609--

--------------enigD5E38112568B3FE148F60F35
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (Darwin)
Comment: GPGTools - http://gpgtools.org

iEYEARECAAYFAk7cG5wACgkQ17c2LVA10VvOaQCdFZkryLOFfCqlTu93q0v+aMkN
DTgAn2sJHJkP1hdlzZLFgVkmAosZvu4k
=Vk6J
-----END PGP SIGNATURE-----

--------------enigD5E38112568B3FE148F60F35--

- Raw text -


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