From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HqHDb-0000Lf-Pi for qemu-devel@nongnu.org; Mon, 21 May 2007 19:23:11 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HqHDa-0000LT-9r for qemu-devel@nongnu.org; Mon, 21 May 2007 19:23:10 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HqHDa-0000LQ-4R for qemu-devel@nongnu.org; Mon, 21 May 2007 19:23:10 -0400 Received: from nz-out-0506.google.com ([64.233.162.230]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1HqHDZ-0005Ws-In for qemu-devel@nongnu.org; Mon, 21 May 2007 19:23:10 -0400 Received: by nz-out-0506.google.com with SMTP id i11so719383nzi for ; Mon, 21 May 2007 16:23:08 -0700 (PDT) Message-ID: <53fbb7580705211623n3c0c3bf2x9e68842fc25a43be@mail.gmail.com> Date: Tue, 22 May 2007 02:23:08 +0300 From: "Lauri Leukkunen" Sender: lauri.leukkunen@gmail.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_103261_13853699.1179789788224" Subject: [Qemu-devel] [PATCH][UPDATED] 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_103261_13853699.1179789788224 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Attached patch fixes the linux-user path mangling code for use with real target root filesystems that have nasty symlinks and lots of files. The old code is terribly slow and can easily end up going through the entire host system /usr hierarchy in a recursive loop. Compared to the previous version of this patch, fixes an issue with attempting to free() a pointer returned by GNU basename(). /lauri ------=_Part_103261_13853699.1179789788224 Content-Type: text/x-diff; name=qemu-linux-user-path2.diff; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f1zkavwx Content-Disposition: attachment; filename="qemu-linux-user-path2.diff" SW5kZXg6IGxpbnV4LXVzZXIvcGF0aC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL3Fl bXUvcWVtdS9saW51eC11c2VyL3BhdGguYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg LXUgLXIxLjIgcGF0aC5jCi0tLSBsaW51eC11c2VyL3BhdGguYwkxMyBTZXAgMjAwNCAyMTozOToz MiAtMDAwMAkxLjIKKysrIGxpbnV4LXVzZXIvcGF0aC5jCTIxIE1heSAyMDA3IDIzOjA2OjU0IC0w MDAwCkBAIC0zLDE0NSArMywyMDEgQEAKIAogICAgVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlz IGFyZWEgZG9lcyBub3QgY2hhbmdlLgogKi8KKworI2RlZmluZSBfR05VX1NPVVJDRQorCiAjaW5j bHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8dW5pc3Rk Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8 ZXJybm8uaD4KICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1 ZGUgInFlbXUuaCIKIAotc3RydWN0IHBhdGhlbGVtCi17Ci0gICAgLyogTmFtZSBvZiB0aGlzLCBl Zy4gbGliICovCi0gICAgY2hhciAqbmFtZTsKLSAgICAvKiBGdWxsIHBhdGggbmFtZSwgZWcuIC91 c3IvZ25lbXVsL3g4Ni1saW51eC9saWIuICovCi0gICAgY2hhciAqcGF0aG5hbWU7Ci0gICAgc3Ry dWN0IHBhdGhlbGVtICpwYXJlbnQ7Ci0gICAgLyogQ2hpbGRyZW4gKi8KLSAgICB1bnNpZ25lZCBp bnQgbnVtX2VudHJpZXM7Ci0gICAgc3RydWN0IHBhdGhlbGVtICplbnRyaWVzWzBdOwotfTsKLQot c3RhdGljIHN0cnVjdCBwYXRoZWxlbSAqYmFzZTsKLQotLyogRmlyc3QgTiBjaGFycyBvZiBTMSBt YXRjaCBTMiwgYW5kIFMyIGlzIE4gY2hhcnMgbG9uZy4gKi8KLXN0YXRpYyBpbnQgc3RybmVxKGNv bnN0IGNoYXIgKnMxLCB1bnNpZ25lZCBpbnQgbiwgY29uc3QgY2hhciAqczIpCi17Ci0gICAgdW5z aWduZWQgaW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCWlmIChzMVtpXSAh PSBzMltpXSkKLQkgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHMyW2ldID09IDA7Ci19CitjaGFy ICpiYXNlID0gTlVMTDsKIAotc3RhdGljIHN0cnVjdCBwYXRoZWxlbSAqYWRkX2VudHJ5KHN0cnVj dCBwYXRoZWxlbSAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgcGF0aF9lbnRyeSB7 CisgICAgc3RydWN0IHBhdGhfZW50cnkgKnByZXY7CisgICAgc3RydWN0IHBhdGhfZW50cnkgKm5l eHQ7CisgICAgY2hhciBuYW1lW1BBVEhfTUFYXTsKK307CiAKLXN0YXRpYyBzdHJ1Y3QgcGF0aGVs ZW0gKm5ld19lbnRyeShjb25zdCBjaGFyICpyb290LAotCQkJCSAgc3RydWN0IHBhdGhlbGVtICpw YXJlbnQsCi0JCQkJICBjb25zdCBjaGFyICpuYW1lKQorY2hhciAqZGVjb2xvbml6ZV9wYXRoKGNv bnN0IGNoYXIgKnBhdGgpCiB7Ci0gICAgc3RydWN0IHBhdGhlbGVtICpuZXcgPSBtYWxsb2Moc2l6 ZW9mKCpuZXcpKTsKLSAgICBuZXctPm5hbWUgPSBzdHJkdXAobmFtZSk7Ci0gICAgYXNwcmludGYo Jm5ldy0+cGF0aG5hbWUsICIlcy8lcyIsIHJvb3QsIG5hbWUpOwotICAgIG5ldy0+bnVtX2VudHJp ZXMgPSAwOwotICAgIHJldHVybiBuZXc7Ci19Ci0KLSNkZWZpbmUgc3RyZXEoYSxiKSAoc3RyY21w KChhKSwgKGIpKSA9PSAwKQorICAgIGNoYXIgKmNwYXRoLCAqaW5kZXgsICpzdGFydDsKKyAgICBj aGFyIGN3ZFtQQVRIX01BWF07CisgICAgc3RydWN0IHBhdGhfZW50cnkgbGlzdDsKKyAgICBzdHJ1 Y3QgcGF0aF9lbnRyeSAqd29yazsKKyAgICBzdHJ1Y3QgcGF0aF9lbnRyeSAqbmV3OworICAgIGNo YXIgKmJ1ZiA9IE5VTEw7CiAKLXN0YXRpYyBzdHJ1Y3QgcGF0aGVsZW0gKmFkZF9kaXJfbWF5YmUo c3RydWN0IHBhdGhlbGVtICpwYXRoKQotewotICAgIERJUiAqZGlyOworICAgIGlmICghcGF0aCkg eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICBpZiAoKGRpciA9IG9wZW5kaXIo cGF0aC0+cGF0aG5hbWUpKSAhPSBOVUxMKSB7Ci0Jc3RydWN0IGRpcmVudCAqZGlyZW50OworICAg IGJ1ZiA9IG1hbGxvYygoUEFUSF9NQVggKyAxKSAqIHNpemVvZihjaGFyKSk7CisgICAgbWVtc2V0 KGJ1ZiwgJ1wwJywgUEFUSF9NQVggKyAxKTsKIAotCXdoaWxlICgoZGlyZW50ID0gcmVhZGRpcihk aXIpKSAhPSBOVUxMKSB7Ci0JICAgIGlmICghc3RyZXEoZGlyZW50LT5kX25hbWUsIi4iKSAmJiAh c3RyZXEoZGlyZW50LT5kX25hbWUsIi4uIikpewotCQlwYXRoID0gYWRkX2VudHJ5KHBhdGgsIGRp cmVudC0+ZF9uYW1lKTsKLQkgICAgfQotCX0KLSAgICAgICAgY2xvc2VkaXIoZGlyKTsKKyAgICBs aXN0Lm5leHQgPSBOVUxMOworICAgIGxpc3QucHJldiA9IE5VTEw7CisgICAgd29yayA9ICZsaXN0 OworCisgICAgaWYgKHBhdGhbMF0gIT0gJy8nKSB7CisgICAgICAgIC8qIG5vdCBhbiBhYnNvbHV0 ZSBwYXRoICovCisgICAgICAgIG1lbXNldChjd2QsICdcMCcsIFBBVEhfTUFYKTsKKyAgICAgICAg aWYgKGdldGN3ZChjd2QsIFBBVEhfTUFYKSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvcigiZXJy b3IgZ2V0dGluZyBjdXJyZW50IHdvcmsgZGlyXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxM OworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGludCBsID0gKHN0cmxlbihjd2QpICsgMSAr IHN0cmxlbihwYXRoKSArIDEpOworICAgICAgICBjcGF0aCA9IG1hbGxvYygoc3RybGVuKGN3ZCkg KyAxCisgICAgICAgICAgICAgICAgICAgICAgICArIHN0cmxlbihwYXRoKSArIDEpICogc2l6ZW9m KGNoYXIpKTsKKyAgICAgICAgbWVtc2V0KGNwYXRoLCAnXDAnLCBsKTsKKyAgICAgICAgc3RyY3B5 KGNwYXRoLCBjd2QpOworICAgICAgICBzdHJjYXQoY3BhdGgsICIvIik7CisgICAgICAgIHN0cmNh dChjcGF0aCwgcGF0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3BhdGggPSBzdHJkdXAocGF0 aCk7CiAgICAgfQotICAgIHJldHVybiBwYXRoOwotfQogCi1zdGF0aWMgc3RydWN0IHBhdGhlbGVt ICphZGRfZW50cnkoc3RydWN0IHBhdGhlbGVtICpyb290LCBjb25zdCBjaGFyICpuYW1lKQotewot ICAgIHJvb3QtPm51bV9lbnRyaWVzKys7Ci0KLSAgICByb290ID0gcmVhbGxvYyhyb290LCBzaXpl b2YoKnJvb3QpCi0JCSAgICsgc2l6ZW9mKHJvb3QtPmVudHJpZXNbMF0pKnJvb3QtPm51bV9lbnRy aWVzKTsKKyAgICBzdGFydCA9IGNwYXRoICsgMTsgICAgICAgICAgLyogaWdub3JlIGxlYWRpbmcg Jy8nICovCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaW5kZXggPSBzdHJzdHIoc3RhcnQsICIv Iik7CisgICAgICAgIGlmICghaW5kZXgpIHsKKyAgICAgICAgICAgIC8qIGFkZCB0aGUgbGFzdCBp dGVtICovCisgICAgICAgICAgICBuZXcgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYXRoX2VudHJ5 KSk7CisgICAgICAgICAgICBtZW1zZXQobmV3LT5uYW1lLCAnXDAnLCBQQVRIX01BWCk7CisgICAg ICAgICAgICBuZXctPnByZXYgPSB3b3JrOworICAgICAgICAgICAgd29yay0+bmV4dCA9IG5ldzsK KyAgICAgICAgICAgIG5ldy0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgICBzdHJjcHkobmV3LT5u YW1lLCBzdGFydCk7CisgICAgICAgICAgICB3b3JrID0gbmV3OworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICAgICAgKmluZGV4ID0gJ1wwJzsKKyAgICAgICAgaWYgKGluZGV4ID09 IChzdGFydCkpIHsKKyAgICAgICAgICAgIGdvdG8gcHJvY2VlZDsgICAgICAgLyogc2tpcCBvdmVy IGVtcHR5IHN0cmluZ3MgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs dGluZyBmcm9tIC8vICovCisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RyY21wKHN0YXJ0LCAi Li4iKSA9PSAwKSB7CisgICAgICAgICAgICAvKiB0cmF2ZWwgdXAgb25lICovCisgICAgICAgICAg ICBpZiAoIXdvcmstPnByZXYpCisgICAgICAgICAgICAgICAgZ290byBwcm9jZWVkOworICAgICAg ICAgICAgd29yayA9IHdvcmstPnByZXY7CisgICAgICAgICAgICBmcmVlKHdvcmstPm5leHQpOwor ICAgICAgICAgICAgd29yay0+bmV4dCA9IE5VTEw7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21w KHN0YXJ0LCAiLiIpID09IDApIHsKKyAgICAgICAgICAgIC8qIGlnbm9yZSAqLworICAgICAgICAg ICAgZ290byBwcm9jZWVkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogYWRkIGFu IGVudHJ5IHRvIG91ciBwYXRoX2VudHJ5IGxpc3QgKi8KKyAgICAgICAgICAgIG5ldyA9IG1hbGxv YyhzaXplb2Yoc3RydWN0IHBhdGhfZW50cnkpKTsKKyAgICAgICAgICAgIG1lbXNldChuZXctPm5h bWUsICdcMCcsIFBBVEhfTUFYKTsKKyAgICAgICAgICAgIG5ldy0+cHJldiA9IHdvcms7CisgICAg ICAgICAgICB3b3JrLT5uZXh0ID0gbmV3OworICAgICAgICAgICAgbmV3LT5uZXh0ID0gTlVMTDsK KyAgICAgICAgICAgIHN0cmNweShuZXctPm5hbWUsIHN0YXJ0KTsKKyAgICAgICAgICAgIHdvcmsg PSBuZXc7CisgICAgICAgIH0KKworICAgICAgcHJvY2VlZDoKKyAgICAgICAgKmluZGV4ID0gJy8n OworICAgICAgICBzdGFydCA9IGluZGV4ICsgMTsKKyAgICB9CiAKLSAgICByb290LT5lbnRyaWVz W3Jvb3QtPm51bV9lbnRyaWVzLTFdID0gbmV3X2VudHJ5KHJvb3QtPnBhdGhuYW1lLCByb290LCBu YW1lKTsKLSAgICByb290LT5lbnRyaWVzW3Jvb3QtPm51bV9lbnRyaWVzLTFdCi0JPSBhZGRfZGly X21heWJlKHJvb3QtPmVudHJpZXNbcm9vdC0+bnVtX2VudHJpZXMtMV0pOwotICAgIHJldHVybiBy b290OworICAgIHdvcmsgPSBsaXN0Lm5leHQ7CisgICAgd2hpbGUgKHdvcmspIHsKKyAgICAgICAg c3RydWN0IHBhdGhfZW50cnkgKnRtcDsKKyAgICAgICAgc3RyY2F0KGJ1ZiwgIi8iKTsKKyAgICAg ICAgc3RyY2F0KGJ1Ziwgd29yay0+bmFtZSk7CisgICAgICAgIHRtcCA9IHdvcms7CisgICAgICAg IHdvcmsgPSB3b3JrLT5uZXh0OworICAgICAgICBmcmVlKHRtcCk7CisgICAgfQorICAgIHJldHVy biBidWY7CiB9CiAKLS8qIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0cmVlIGlzIHN0YWJh bGl6ZWQgKGllLiBubyBtb3JlIHJlYWxsb2NzISkuICovCi1zdGF0aWMgdm9pZCBzZXRfcGFyZW50 cyhzdHJ1Y3QgcGF0aGVsZW0gKmNoaWxkLCBzdHJ1Y3QgcGF0aGVsZW0gKnBhcmVudCkKLXsKLSAg ICB1bnNpZ25lZCBpbnQgaTsKLQotICAgIGNoaWxkLT5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgZm9y IChpID0gMDsgaSA8IGNoaWxkLT5udW1fZW50cmllczsgaSsrKQotCXNldF9wYXJlbnRzKGNoaWxk LT5lbnRyaWVzW2ldLCBjaGlsZCk7Ci19CiAKIHZvaWQgaW5pdF9wYXRocyhjb25zdCBjaGFyICpw cmVmaXgpCiB7Ci0gICAgaWYgKHByZWZpeFswXSAhPSAnLycgfHwKLSAgICAgICAgcHJlZml4WzBd ID09ICdcMCcgfHwKLSAgICAgICAgIXN0cmNtcChwcmVmaXgsICIvIikpCi0gICAgICAgIHJldHVy bjsKLQotICAgIGJhc2UgPSBuZXdfZW50cnkoIiIsIE5VTEwsIHByZWZpeCsxKTsKLSAgICBiYXNl ID0gYWRkX2Rpcl9tYXliZShiYXNlKTsKLSAgICBpZiAoYmFzZS0+bnVtX2VudHJpZXMgPT0gMCkg ewotICAgICAgICBmcmVlIChiYXNlKTsKLSAgICAgICAgYmFzZSA9IE5VTEw7Ci0gICAgfSBlbHNl IHsKLSAgICAgICAgc2V0X3BhcmVudHMoYmFzZSwgYmFzZSk7Ci0gICAgfQorICAgIGJhc2UgPSBz dHJkdXAocHJlZml4KTsKIH0KIAotLyogRklYTUU6IERvZXNuJ3QgaGFuZGxlIERJUi8uLiB3aGVy ZSBESVIgaXMgbm90IGluIGVtdWxhdGVkIGRpci4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKLWZv bGxvd19wYXRoKGNvbnN0IHN0cnVjdCBwYXRoZWxlbSAqY3Vyc29yLCBjb25zdCBjaGFyICpuYW1l KQorCisKK2NoYXIgKmFkanVzdF9mb3JfbGVha2FnZShjaGFyICpwYXRoKQogewotICAgIHVuc2ln bmVkIGludCBpLCBuYW1lbGVuOworICAgIGNoYXIgdG1wW1BBVEhfTUFYICsgMV07CisgICAgY2hh ciB0bXAyW1BBVEhfTUFYICsgMV07CisgICAgY2hhciAqYnVmOworICAgIGNoYXIgKmJuYW1lID0g TlVMTCwgKmRuYW1lID0gTlVMTDsKKyAgICBpbnQgaTsKIAotICAgIG5hbWUgKz0gc3Ryc3BuKG5h bWUsICIvIik7Ci0gICAgbmFtZWxlbiA9IHN0cmNzcG4obmFtZSwgIi8iKTsKKyAgICBpZiAoIXBh dGgpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKG5hbWVsZW4gPT0gMCkKLQlyZXR1 cm4gY3Vyc29yLT5wYXRobmFtZTsKKyAgICBtZW1zZXQodG1wLCAnXDAnLCBQQVRIX01BWCArIDEp OworICAgIG1lbXNldCh0bXAyLCAnXDAnLCBQQVRIX01BWCArIDEpOworICAgIGlmICgoaSA9IHJl YWRsaW5rKHBhdGgsIHRtcCwgUEFUSF9NQVgpIDwgMCkpIHsKKyAgICAgICAgLyogbm90IGEgc3lt bGluayAqLworICAgICAgICByZXR1cm4gc3RyZHVwKHBhdGgpOworICAgIH0KIAotICAgIGlmIChz dHJuZXEobmFtZSwgbmFtZWxlbiwgIi4uIikpCi0JcmV0dXJuIGZvbGxvd19wYXRoKGN1cnNvci0+ cGFyZW50LCBuYW1lICsgbmFtZWxlbik7CisgICAgYm5hbWUgPSBiYXNlbmFtZShwYXRoKTsgLyog cmVseWluZyBvbiBHTlUgdmVyc2lvbiBvZiBiYXNlbmFtZSAqLworICAgIGRuYW1lID0gZGlybmFt ZShzdHJkdXAocGF0aCkpOwogCi0gICAgaWYgKHN0cm5lcShuYW1lLCBuYW1lbGVuLCAiLiIpKQot CXJldHVybiBmb2xsb3dfcGF0aChjdXJzb3IsIG5hbWUgKyBuYW1lbGVuKTsKKyAgICAvKiBjaGVj ayBpZiB0aGUgc3ltbGluayByZWZlcnMgdG8gaXRzZWxmICovCisgICAgaWYgKHN0cmNtcCh0bXAs IGJuYW1lKSA9PSAwKSB7CisgICAgICAgIC8qIHN5bWxpbmsgcmVmZXJzIHRvIGl0c2VsZiAqLwor ICAgICAgICByZXR1cm4gc3RyZHVwKHBhdGgpOworICAgIH0KIAotICAgIGZvciAoaSA9IDA7IGkg PCBjdXJzb3ItPm51bV9lbnRyaWVzOyBpKyspCi0JaWYgKHN0cm5lcShuYW1lLCBuYW1lbGVuLCBj dXJzb3ItPmVudHJpZXNbaV0tPm5hbWUpKQotCSAgICByZXR1cm4gZm9sbG93X3BhdGgoY3Vyc29y LT5lbnRyaWVzW2ldLCBuYW1lICsgbmFtZWxlbik7CisgICAgLyogbWFrZSB0bXAgYWJzb2x1dGUg aWYgaXQncyBub3QgKi8KKyAgICBpZiAodG1wWzBdICE9ICcvJykgeworICAgICAgICBzdHJjcHko dG1wMiwgZG5hbWUpOworICAgICAgICBzdHJjYXQodG1wMiwgIi8iKTsKKyAgICAgICAgc3RyY2F0 KHRtcDIsIHRtcCk7CisgICAgfQogCi0gICAgLyogTm90IGZvdW5kICovCi0gICAgcmV0dXJuIE5V TEw7CisgICAgLyogcmVtb3ZlICIuIiBhbmQgIi4uIiBlbnRyaWVzIGZyb20gdG1wMiAqLworICAg IGJ1ZiA9IGRlY29sb25pemVfcGF0aCh0bXAyKTsKKyAgICBzdHJjcHkodG1wMiwgYnVmKTsKKwor ICAgIGZyZWUoYnVmKTsKKyAgICAvKiBibmFtZSBpcyBub3QgZnJlZSdkLCBiZWNhdXNlIEdOVSBi YXNlbmFtZSByZXR1cm5zIGEgcG9pbnRlcgorICAgICAqIHRvIGl0cyBvd24gYnVmZmVyICovCisg ICAgZnJlZShkbmFtZSk7CisKKyAgICBpZiAoc3RybmNtcCh0bXAyLCBiYXNlLCBzdHJsZW4oYmFz ZSkpICE9IDApIHsKKyAgICAgICAgLyogdHJpZWQgdG8gbGVhayBvdXQsIGZpeCBpdCAqLworICAg ICAgICBzdHJjcHkodG1wLCBiYXNlKTsKKyAgICAgICAgc3RyY3B5KHRtcCwgIi8iKTsKKyAgICAg ICAgc3RyY3B5KHRtcCwgdG1wMik7CisgICAgICAgIHJldHVybiBhZGp1c3RfZm9yX2xlYWthZ2Uo dG1wKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYWRqdXN0X2Zvcl9sZWFrYWdlKHRt cDIpOworICAgIH0KIH0KIAogLyogTG9vayBmb3IgcGF0aCBpbiBlbXVsYXRpb24gZGlyLCBvdGhl cndpc2UgcmV0dXJuIG5hbWUuICovCiBjb25zdCBjaGFyICpwYXRoKGNvbnN0IGNoYXIgKm5hbWUp CiB7Ci0gICAgLyogT25seSBkbyBhYnNvbHV0ZSBwYXRoczogcXVpY2sgYW5kIGRpcnR5LCBidXQg c2hvdWxkIG1vc3RseSBiZSBPSy4KLSAgICAgICBDb3VsZCBkbyByZWxhdGl2ZSBieSB0cmFja2lu ZyBjd2QuICovCi0gICAgaWYgKCFiYXNlIHx8IG5hbWVbMF0gIT0gJy8nKQotCXJldHVybiBuYW1l OworICAgIGNoYXIgKnRtcCwgKnJldDsKIAotICAgIHJldHVybiBmb2xsb3dfcGF0aChiYXNlLCBu YW1lKSA/OiBuYW1lOworICAgIGlmIChzdHJuY21wKG5hbWUsIGJhc2UsIHN0cmxlbihiYXNlKSkg PT0gMCkgeworICAgICAgICAvKiBuYW1lIGlzIHdpdGhpbiBlbXVsYXRpb24gZGlyICovCisgICAg ICAgIHJldCA9IGFkanVzdF9mb3JfbGVha2FnZShuYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAg ICAvKiBuYW1lIGlzIGVsc2V3aGVyZSwgdXNlIGJhc2UgKyAiLyIgKyBuYW1lICovCisgICAgICAg IHRtcCA9IG1hbGxvYyhzaXplb2YoY2hhcikgKiBzdHJsZW4oYmFzZSkgKyBzdHJsZW4obmFtZSkg KyAyKTsKKyAgICAgICAgc3RyY3B5KHRtcCwgYmFzZSk7CisgICAgICAgIGlmIChuYW1lWzBdICE9 ICcvJykKKyAgICAgICAgICAgIHN0cmNhdCh0bXAsICIvIik7CisgICAgICAgIHN0cmNhdCh0bXAs IG5hbWUpOworICAgICAgICByZXQgPSBhZGp1c3RfZm9yX2xlYWthZ2UodG1wKTsKKyAgICAgICAg ZnJlZSh0bXApOworICAgIH0KKyAgICByZXR1cm4gcmV0OwogfQo= ------=_Part_103261_13853699.1179789788224--