From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HfhnE-0000Oi-Hl for qemu-devel@nongnu.org; Sun, 22 Apr 2007 15:32:16 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HfhnD-0000OT-HU for qemu-devel@nongnu.org; Sun, 22 Apr 2007 15:32:16 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HfhnD-0000OQ-Cw for qemu-devel@nongnu.org; Sun, 22 Apr 2007 15:32:15 -0400 Received: from nz-out-0506.google.com ([64.233.162.238]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Hfhht-0006d8-1Y for qemu-devel@nongnu.org; Sun, 22 Apr 2007 15:26:45 -0400 Received: by nz-out-0506.google.com with SMTP id i11so2569687nzi for ; Sun, 22 Apr 2007 12:26:44 -0700 (PDT) Message-ID: <53fbb7580704221226x1130bd50o8665f20a72f8b1b3@mail.gmail.com> Date: Sun, 22 Apr 2007 22:26:43 +0300 From: "Lauri Leukkunen" Sender: lauri.leukkunen@gmail.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_6456_11591119.1177270003305" Subject: [Qemu-devel] [PATCH] Fix path mangling in linux-user/path.c Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_6456_11591119.1177270003305 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline This patch improves performance at user-mode emulation startup and fixes a nasty looping bug caused by a symlink such as /usr/bin/X11 -> ../bin I've tested this using current CVS version on debian/testing on amd64 with arm user-mode target. /lauri ------=_Part_6456_11591119.1177270003305 Content-Type: text/x-patch; name=qemu-linux-user-path.diff; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f0tw0psm Content-Disposition: attachment; filename="qemu-linux-user-path.diff" SW5kZXg6IHBhdGguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvc291cmNlcy9xZW11L3FlbXUvbGlu dXgtdXNlci9wYXRoLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1yMS4yIHBh dGguYwotLS0gcGF0aC5jCTEzIFNlcCAyMDA0IDIxOjM5OjMyIC0wMDAwCTEuMgorKysgcGF0aC5j CTIyIEFwciAyMDA3IDE5OjE4OjQyIC0wMDAwCkBAIC0xMCwxMzggKzEwLDE5MSBAQAogI2luY2x1 ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNp bmNsdWRlIDxsaWJnZW4uaD4KICNpbmNsdWRlICJxZW11LmgiCiAKLXN0cnVjdCBwYXRoZWxlbQot ewotICAgIC8qIE5hbWUgb2YgdGhpcywgZWcuIGxpYiAqLwotICAgIGNoYXIgKm5hbWU7Ci0gICAg LyogRnVsbCBwYXRoIG5hbWUsIGVnLiAvdXNyL2duZW11bC94ODYtbGludXgvbGliLiAqLwotICAg IGNoYXIgKnBhdGhuYW1lOwotICAgIHN0cnVjdCBwYXRoZWxlbSAqcGFyZW50OwotICAgIC8qIENo aWxkcmVuICovCi0gICAgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOwotICAgIHN0cnVjdCBwYXRo ZWxlbSAqZW50cmllc1swXTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGF0aGVsZW0gKmJhc2U7Ci0K LS8qIEZpcnN0IE4gY2hhcnMgb2YgUzEgbWF0Y2ggUzIsIGFuZCBTMiBpcyBOIGNoYXJzIGxvbmcu ICovCi1zdGF0aWMgaW50IHN0cm5lcShjb25zdCBjaGFyICpzMSwgdW5zaWduZWQgaW50IG4sIGNv bnN0IGNoYXIgKnMyKQotewotICAgIHVuc2lnbmVkIGludCBpOwotCi0gICAgZm9yIChpID0gMDsg aSA8IG47IGkrKykKLQlpZiAoczFbaV0gIT0gczJbaV0pCi0JICAgIHJldHVybiAwOwotICAgIHJl dHVybiBzMltpXSA9PSAwOwotfQorY2hhciAqYmFzZSA9IE5VTEw7CiAKLXN0YXRpYyBzdHJ1Y3Qg cGF0aGVsZW0gKmFkZF9lbnRyeShzdHJ1Y3QgcGF0aGVsZW0gKnJvb3QsIGNvbnN0IGNoYXIgKm5h bWUpOworc3RydWN0IHBhdGhfZW50cnkgeworICAgIHN0cnVjdCBwYXRoX2VudHJ5ICpwcmV2Owor ICAgIHN0cnVjdCBwYXRoX2VudHJ5ICpuZXh0OworICAgIGNoYXIgbmFtZVtQQVRIX01BWF07Cit9 OwogCi1zdGF0aWMgc3RydWN0IHBhdGhlbGVtICpuZXdfZW50cnkoY29uc3QgY2hhciAqcm9vdCwK LQkJCQkgIHN0cnVjdCBwYXRoZWxlbSAqcGFyZW50LAotCQkJCSAgY29uc3QgY2hhciAqbmFtZSkK K2NoYXIgKmRlY29sb25pemVfcGF0aChjb25zdCBjaGFyICpwYXRoKQogewotICAgIHN0cnVjdCBw YXRoZWxlbSAqbmV3ID0gbWFsbG9jKHNpemVvZigqbmV3KSk7Ci0gICAgbmV3LT5uYW1lID0gc3Ry ZHVwKG5hbWUpOwotICAgIGFzcHJpbnRmKCZuZXctPnBhdGhuYW1lLCAiJXMvJXMiLCByb290LCBu YW1lKTsKLSAgICBuZXctPm51bV9lbnRyaWVzID0gMDsKLSAgICByZXR1cm4gbmV3OwotfQotCi0j ZGVmaW5lIHN0cmVxKGEsYikgKHN0cmNtcCgoYSksIChiKSkgPT0gMCkKKyAgICBjaGFyICpjcGF0 aCwgKmluZGV4LCAqc3RhcnQ7CisgICAgY2hhciBjd2RbUEFUSF9NQVhdOworICAgIHN0cnVjdCBw YXRoX2VudHJ5IGxpc3Q7CisgICAgc3RydWN0IHBhdGhfZW50cnkgKndvcms7CisgICAgc3RydWN0 IHBhdGhfZW50cnkgKm5ldzsKKyAgICBjaGFyICpidWYgPSBOVUxMOwogCi1zdGF0aWMgc3RydWN0 IHBhdGhlbGVtICphZGRfZGlyX21heWJlKHN0cnVjdCBwYXRoZWxlbSAqcGF0aCkKLXsKLSAgICBE SVIgKmRpcjsKKyAgICBpZiAoIXBhdGgpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQog Ci0gICAgaWYgKChkaXIgPSBvcGVuZGlyKHBhdGgtPnBhdGhuYW1lKSkgIT0gTlVMTCkgewotCXN0 cnVjdCBkaXJlbnQgKmRpcmVudDsKKyAgICBidWYgPSBtYWxsb2MoKFBBVEhfTUFYICsgMSkgKiBz aXplb2YoY2hhcikpOworICAgIG1lbXNldChidWYsICdcMCcsIFBBVEhfTUFYICsgMSk7CiAKLQl3 aGlsZSAoKGRpcmVudCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgewotCSAgICBpZiAoIXN0cmVx KGRpcmVudC0+ZF9uYW1lLCIuIikgJiYgIXN0cmVxKGRpcmVudC0+ZF9uYW1lLCIuLiIpKXsKLQkJ cGF0aCA9IGFkZF9lbnRyeShwYXRoLCBkaXJlbnQtPmRfbmFtZSk7Ci0JICAgIH0KLQl9Ci0gICAg ICAgIGNsb3NlZGlyKGRpcik7CisgICAgbGlzdC5uZXh0ID0gTlVMTDsKKyAgICBsaXN0LnByZXYg PSBOVUxMOworICAgIHdvcmsgPSAmbGlzdDsKKworICAgIGlmIChwYXRoWzBdICE9ICcvJykgewor ICAgICAgICAvKiBub3QgYW4gYWJzb2x1dGUgcGF0aCAqLworICAgICAgICBtZW1zZXQoY3dkLCAn XDAnLCBQQVRIX01BWCk7CisgICAgICAgIGlmIChnZXRjd2QoY3dkLCBQQVRIX01BWCkgPCAwKSB7 CisgICAgICAgICAgICBwZXJyb3IoImVycm9yIGdldHRpbmcgY3VycmVudCB3b3JrIGRpclxuIik7 CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBp bnQgbCA9IChzdHJsZW4oY3dkKSArIDEgKyBzdHJsZW4ocGF0aCkgKyAxKTsKKyAgICAgICAgY3Bh dGggPSBtYWxsb2MoKHN0cmxlbihjd2QpICsgMQorICAgICAgICAgICAgICAgICAgICAgICAgKyBz dHJsZW4ocGF0aCkgKyAxKSAqIHNpemVvZihjaGFyKSk7CisgICAgICAgIG1lbXNldChjcGF0aCwg J1wwJywgbCk7CisgICAgICAgIHN0cmNweShjcGF0aCwgY3dkKTsKKyAgICAgICAgc3RyY2F0KGNw YXRoLCAiLyIpOworICAgICAgICBzdHJjYXQoY3BhdGgsIHBhdGgpOworICAgIH0gZWxzZSB7Cisg ICAgICAgIGNwYXRoID0gc3RyZHVwKHBhdGgpOwogICAgIH0KLSAgICByZXR1cm4gcGF0aDsKLX0K LQotc3RhdGljIHN0cnVjdCBwYXRoZWxlbSAqYWRkX2VudHJ5KHN0cnVjdCBwYXRoZWxlbSAqcm9v dCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICByb290LT5udW1fZW50cmllcysrOwogCi0gICAg cm9vdCA9IHJlYWxsb2Mocm9vdCwgc2l6ZW9mKCpyb290KQotCQkgICArIHNpemVvZihyb290LT5l bnRyaWVzWzBdKSpyb290LT5udW1fZW50cmllcyk7CisgICAgc3RhcnQgPSBjcGF0aCArIDE7ICAg ICAgICAgIC8qIGlnbm9yZSBsZWFkaW5nICcvJyAqLworICAgIHdoaWxlICgxKSB7CisgICAgICAg IGluZGV4ID0gc3Ryc3RyKHN0YXJ0LCAiLyIpOworICAgICAgICBpZiAoIWluZGV4KSB7CisgICAg ICAgICAgICAvKiBhZGQgdGhlIGxhc3QgaXRlbSAqLworICAgICAgICAgICAgbmV3ID0gbWFsbG9j KHNpemVvZihzdHJ1Y3QgcGF0aF9lbnRyeSkpOworICAgICAgICAgICAgbWVtc2V0KG5ldy0+bmFt ZSwgJ1wwJywgUEFUSF9NQVgpOworICAgICAgICAgICAgbmV3LT5wcmV2ID0gd29yazsKKyAgICAg ICAgICAgIHdvcmstPm5leHQgPSBuZXc7CisgICAgICAgICAgICBuZXctPm5leHQgPSBOVUxMOwor ICAgICAgICAgICAgc3RyY3B5KG5ldy0+bmFtZSwgc3RhcnQpOworICAgICAgICAgICAgd29yayA9 IG5ldzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICppbmRleCA9ICdc MCc7CisgICAgICAgIGlmIChpbmRleCA9PSAoc3RhcnQpKSB7CisgICAgICAgICAgICBnb3RvIHBy b2NlZWQ7ICAgICAgIC8qIHNraXAgb3ZlciBlbXB0eSBzdHJpbmdzIAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgZnJvbSAvLyAqLworICAgICAgICB9CisKKyAg ICAgICAgaWYgKHN0cmNtcChzdGFydCwgIi4uIikgPT0gMCkgeworICAgICAgICAgICAgLyogdHJh dmVsIHVwIG9uZSAqLworICAgICAgICAgICAgaWYgKCF3b3JrLT5wcmV2KQorICAgICAgICAgICAg ICAgIGdvdG8gcHJvY2VlZDsKKyAgICAgICAgICAgIHdvcmsgPSB3b3JrLT5wcmV2OworICAgICAg ICAgICAgZnJlZSh3b3JrLT5uZXh0KTsKKyAgICAgICAgICAgIHdvcmstPm5leHQgPSBOVUxMOwor ICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChzdGFydCwgIi4iKSA9PSAwKSB7CisgICAgICAgICAg ICAvKiBpZ25vcmUgKi8KKyAgICAgICAgICAgIGdvdG8gcHJvY2VlZDsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIC8qIGFkZCBhbiBlbnRyeSB0byBvdXIgcGF0aF9lbnRyeSBsaXN0ICov CisgICAgICAgICAgICBuZXcgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYXRoX2VudHJ5KSk7Cisg ICAgICAgICAgICBtZW1zZXQobmV3LT5uYW1lLCAnXDAnLCBQQVRIX01BWCk7CisgICAgICAgICAg ICBuZXctPnByZXYgPSB3b3JrOworICAgICAgICAgICAgd29yay0+bmV4dCA9IG5ldzsKKyAgICAg ICAgICAgIG5ldy0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgICBzdHJjcHkobmV3LT5uYW1lLCBz dGFydCk7CisgICAgICAgICAgICB3b3JrID0gbmV3OworICAgICAgICB9CisKKyAgICAgIHByb2Nl ZWQ6CisgICAgICAgICppbmRleCA9ICcvJzsKKyAgICAgICAgc3RhcnQgPSBpbmRleCArIDE7Cisg ICAgfQogCi0gICAgcm9vdC0+ZW50cmllc1tyb290LT5udW1fZW50cmllcy0xXSA9IG5ld19lbnRy eShyb290LT5wYXRobmFtZSwgcm9vdCwgbmFtZSk7Ci0gICAgcm9vdC0+ZW50cmllc1tyb290LT5u dW1fZW50cmllcy0xXQotCT0gYWRkX2Rpcl9tYXliZShyb290LT5lbnRyaWVzW3Jvb3QtPm51bV9l bnRyaWVzLTFdKTsKLSAgICByZXR1cm4gcm9vdDsKKyAgICB3b3JrID0gbGlzdC5uZXh0OworICAg IHdoaWxlICh3b3JrKSB7CisgICAgICAgIHN0cnVjdCBwYXRoX2VudHJ5ICp0bXA7CisgICAgICAg IHN0cmNhdChidWYsICIvIik7CisgICAgICAgIHN0cmNhdChidWYsIHdvcmstPm5hbWUpOworICAg ICAgICB0bXAgPSB3b3JrOworICAgICAgICB3b3JrID0gd29yay0+bmV4dDsKKyAgICAgICAgZnJl ZSh0bXApOworICAgIH0KKyAgICByZXR1cm4gYnVmOwogfQogCi0vKiBUaGlzIG5lZWRzIHRvIGJl IGRvbmUgYWZ0ZXIgdHJlZSBpcyBzdGFiYWxpemVkIChpZS4gbm8gbW9yZSByZWFsbG9jcyEpLiAq Lwotc3RhdGljIHZvaWQgc2V0X3BhcmVudHMoc3RydWN0IHBhdGhlbGVtICpjaGlsZCwgc3RydWN0 IHBhdGhlbGVtICpwYXJlbnQpCi17Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0KLSAgICBjaGlsZC0+ cGFyZW50ID0gcGFyZW50OwotICAgIGZvciAoaSA9IDA7IGkgPCBjaGlsZC0+bnVtX2VudHJpZXM7 IGkrKykKLQlzZXRfcGFyZW50cyhjaGlsZC0+ZW50cmllc1tpXSwgY2hpbGQpOwotfQogCiB2b2lk IGluaXRfcGF0aHMoY29uc3QgY2hhciAqcHJlZml4KQogewotICAgIGlmIChwcmVmaXhbMF0gIT0g Jy8nIHx8Ci0gICAgICAgIHByZWZpeFswXSA9PSAnXDAnIHx8Ci0gICAgICAgICFzdHJjbXAocHJl Zml4LCAiLyIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBiYXNlID0gbmV3X2VudHJ5KCIiLCBO VUxMLCBwcmVmaXgrMSk7Ci0gICAgYmFzZSA9IGFkZF9kaXJfbWF5YmUoYmFzZSk7Ci0gICAgaWYg KGJhc2UtPm51bV9lbnRyaWVzID09IDApIHsKLSAgICAgICAgZnJlZSAoYmFzZSk7Ci0gICAgICAg IGJhc2UgPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNldF9wYXJlbnRzKGJhc2UsIGJh c2UpOwotICAgIH0KKyAgICBiYXNlID0gc3RyZHVwKHByZWZpeCk7CiB9CiAKLS8qIEZJWE1FOiBE b2Vzbid0IGhhbmRsZSBESVIvLi4gd2hlcmUgRElSIGlzIG5vdCBpbiBlbXVsYXRlZCBkaXIuICov Ci1zdGF0aWMgY29uc3QgY2hhciAqCi1mb2xsb3dfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aGVsZW0g KmN1cnNvciwgY29uc3QgY2hhciAqbmFtZSkKKworCitjaGFyICphZGp1c3RfZm9yX2xlYWthZ2Uo Y2hhciAqcGF0aCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgaSwgbmFtZWxlbjsKKyAgICBjaGFyIHRt cFtQQVRIX01BWCArIDFdOworICAgIGNoYXIgdG1wMltQQVRIX01BWCArIDFdOworICAgIGNoYXIg KmJ1ZjsKKyAgICBjaGFyICpibmFtZSA9IE5VTEwsICpkbmFtZSA9IE5VTEw7CisgICAgaW50IGk7 CiAKLSAgICBuYW1lICs9IHN0cnNwbihuYW1lLCAiLyIpOwotICAgIG5hbWVsZW4gPSBzdHJjc3Bu KG5hbWUsICIvIik7CisgICAgaWYgKCFwYXRoKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAg IGlmIChuYW1lbGVuID09IDApCi0JcmV0dXJuIGN1cnNvci0+cGF0aG5hbWU7CisgICAgbWVtc2V0 KHRtcCwgJ1wwJywgUEFUSF9NQVggKyAxKTsKKyAgICBtZW1zZXQodG1wMiwgJ1wwJywgUEFUSF9N QVggKyAxKTsKKyAgICBpZiAoKGkgPSByZWFkbGluayhwYXRoLCB0bXAsIFBBVEhfTUFYKSA8IDAp KSB7CisgICAgICAgIC8qIG5vdCBhIHN5bWxpbmsgKi8KKyAgICAgICAgcmV0dXJuIHN0cmR1cChw YXRoKTsKKyAgICB9CiAKLSAgICBpZiAoc3RybmVxKG5hbWUsIG5hbWVsZW4sICIuLiIpKQotCXJl dHVybiBmb2xsb3dfcGF0aChjdXJzb3ItPnBhcmVudCwgbmFtZSArIG5hbWVsZW4pOworICAgIGJu YW1lID0gYmFzZW5hbWUoc3RyZHVwKHBhdGgpKTsKKyAgICBkbmFtZSA9IGRpcm5hbWUoc3RyZHVw KHBhdGgpKTsKIAotICAgIGlmIChzdHJuZXEobmFtZSwgbmFtZWxlbiwgIi4iKSkKLQlyZXR1cm4g Zm9sbG93X3BhdGgoY3Vyc29yLCBuYW1lICsgbmFtZWxlbik7CisgICAgLyogY2hlY2sgaWYgdGhl IHN5bWxpbmsgcmVmZXJzIHRvIGl0c2VsZiAqLworICAgIGlmIChzdHJjbXAodG1wLCBibmFtZSkg PT0gMCkgeworICAgICAgICAvKiBzeW1saW5rIHJlZmVycyB0byBpdHNlbGYgKi8KKyAgICAgICAg cmV0dXJuIHN0cmR1cChwYXRoKTsKKyAgICB9CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgY3Vyc29y LT5udW1fZW50cmllczsgaSsrKQotCWlmIChzdHJuZXEobmFtZSwgbmFtZWxlbiwgY3Vyc29yLT5l bnRyaWVzW2ldLT5uYW1lKSkKLQkgICAgcmV0dXJuIGZvbGxvd19wYXRoKGN1cnNvci0+ZW50cmll c1tpXSwgbmFtZSArIG5hbWVsZW4pOworICAgIC8qIG1ha2UgdG1wIGFic29sdXRlIGlmIGl0J3Mg bm90ICovCisgICAgaWYgKHRtcFswXSAhPSAnLycpIHsKKyAgICAgICAgc3RyY3B5KHRtcDIsIGRu YW1lKTsKKyAgICAgICAgc3RyY2F0KHRtcDIsICIvIik7CisgICAgICAgIHN0cmNhdCh0bXAyLCB0 bXApOworICAgIH0KIAotICAgIC8qIE5vdCBmb3VuZCAqLwotICAgIHJldHVybiBOVUxMOworICAg IC8qIHJlbW92ZSAiLiIgYW5kICIuLiIgZW50cmllcyBmcm9tIHRtcCwgZG9uZSBpbi1wbGFjZSAq LworICAgIGJ1ZiA9IGRlY29sb25pemVfcGF0aCh0bXAyKTsKKyAgICBzdHJjcHkodG1wMiwgYnVm KTsKKworICAgIGZyZWUoYnVmKTsKKyAgICBmcmVlKGJuYW1lKTsKKyAgICBmcmVlKGRuYW1lKTsK KworICAgIGlmIChzdHJuY21wKHRtcDIsIGJhc2UsIHN0cmxlbihiYXNlKSkgIT0gMCkgeworICAg ICAgICAvKiB0cmllZCB0byBsZWFrIG91dCwgZml4IGl0ICovCisgICAgICAgIHN0cmNweSh0bXAs IGJhc2UpOworICAgICAgICBzdHJjcHkodG1wLCAiLyIpOworICAgICAgICBzdHJjcHkodG1wLCB0 bXAyKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdF9mb3JfbGVha2FnZSh0bXApOworICAgIH0gZWxz ZSB7CisgICAgICAgIHJldHVybiBhZGp1c3RfZm9yX2xlYWthZ2UodG1wMik7CisgICAgfQogfQog CiAvKiBMb29rIGZvciBwYXRoIGluIGVtdWxhdGlvbiBkaXIsIG90aGVyd2lzZSByZXR1cm4gbmFt ZS4gKi8KIGNvbnN0IGNoYXIgKnBhdGgoY29uc3QgY2hhciAqbmFtZSkKIHsKLSAgICAvKiBPbmx5 IGRvIGFic29sdXRlIHBhdGhzOiBxdWljayBhbmQgZGlydHksIGJ1dCBzaG91bGQgbW9zdGx5IGJl IE9LLgotICAgICAgIENvdWxkIGRvIHJlbGF0aXZlIGJ5IHRyYWNraW5nIGN3ZC4gKi8KLSAgICBp ZiAoIWJhc2UgfHwgbmFtZVswXSAhPSAnLycpCi0JcmV0dXJuIG5hbWU7CisgICAgY2hhciAqdG1w LCAqcmV0OwogCi0gICAgcmV0dXJuIGZvbGxvd19wYXRoKGJhc2UsIG5hbWUpID86IG5hbWU7Cisg ICAgaWYgKHN0cm5jbXAobmFtZSwgYmFzZSwgc3RybGVuKGJhc2UpKSA9PSAwKSB7CisgICAgICAg IC8qIG5hbWUgaXMgd2l0aGluIGVtdWxhdGlvbiBkaXIgKi8KKyAgICAgICAgcmV0ID0gYWRqdXN0 X2Zvcl9sZWFrYWdlKG5hbWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIG5hbWUgaXMgZWxz ZXdoZXJlLCB1c2UgYmFzZSArICIvIiArIG5hbWUgKi8KKyAgICAgICAgdG1wID0gbWFsbG9jKHNp emVvZihjaGFyKSAqIHN0cmxlbihiYXNlKSArIHN0cmxlbihuYW1lKSArIDIpOworICAgICAgICBz dHJjcHkodG1wLCBiYXNlKTsKKyAgICAgICAgaWYgKG5hbWVbMF0gIT0gJy8nKQorICAgICAgICAg ICAgc3RyY2F0KHRtcCwgIi8iKTsKKyAgICAgICAgc3RyY2F0KHRtcCwgbmFtZSk7CisgICAgICAg IHJldCA9IGFkanVzdF9mb3JfbGVha2FnZSh0bXApOworICAgICAgICBmcmVlKHRtcCk7CisgICAg fQorICAgIHJldHVybiByZXQ7CiB9Cg== ------=_Part_6456_11591119.1177270003305--