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 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 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigD5E38112568B3FE148F60F35" X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , 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--