From owner-freebsd-current@FreeBSD.ORG Mon Aug 16 10:42:47 2010 Return-Path: Delivered-To: current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A04A91065675; Mon, 16 Aug 2010 10:42:47 +0000 (UTC) (envelope-from dimitry@andric.com) Received: from tensor.andric.com (cl-327.ede-01.nl.sixxs.net [IPv6:2001:7b8:2ff:146::2]) by mx1.freebsd.org (Postfix) with ESMTP id 3405E8FC13; Mon, 16 Aug 2010 10:42:46 +0000 (UTC) Received: from [IPv6:2001:7b8:3a7:0:8c6d:ecb1:2b0e:5d24] (unknown [IPv6:2001:7b8:3a7:0:8c6d:ecb1:2b0e:5d24]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by tensor.andric.com (Postfix) with ESMTPSA id C03935C43; Mon, 16 Aug 2010 12:42:42 +0200 (CEST) Message-ID: <4C691629.4010006@andric.com> Date: Mon, 16 Aug 2010 12:42:49 +0200 From: Dimitry Andric User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.9pre) Gecko/20100814 Lanikai/3.1.3pre MIME-Version: 1.0 To: =?UTF-8?B?RGFnLUVybGluZyBTbcO4cmdyYXY=?= References: <4C6505A4.9060203@FreeBSD.org> <20100813085235.GA16268@freebsd.org> <4C66C010.3040308@FreeBSD.org> <4C673F02.8000805@FreeBSD.org> <20100815013438.GA8958@troutmask.apl.washington.edu> <4C67492C.5020206@FreeBSD.org> <8639ufd78w.fsf@ds4.des.no> <4C6844D8.5070602@andric.com> In-Reply-To: <4C6844D8.5070602@andric.com> Content-Type: multipart/mixed; boundary="------------030707040809090904070205" Cc: Doug Barton , Justin Hibbits , core@freebsd.org, delphij@freebsd.org, Gabor Kovesdan , Steve Kargl , current@freebsd.org Subject: Re: Official request: Please make GNU grep the default X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 Aug 2010 10:42:47 -0000 This is a multi-part message in MIME format. --------------030707040809090904070205 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 2010-08-15 21:49, Dimitry Andric wrote: > ...I > have attached a more complete patch that: > > - Replaces the horrendously inefficient grep_fgetln() with mostly the > same implementation as the libc fgetln() function. > - Uses plain file descriptors instead of struct FILE, since the > buffering is done manually anyway, and it makes it easier to support > gzip and bzip2. > - Let the bzip2 reader just read the file as plain data, when the > initial magic number doesn't match, mimicking the behaviour of GNU > grep. Here is a new patch, updated against Gabor's changes in r211364. --------------030707040809090904070205 Content-Type: text/plain; name="bsdgrep-speed-2.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bsdgrep-speed-2.diff" ZGlmZiAtLWdpdCBhL3Vzci5iaW4vZ3JlcC9mYXN0Z3JlcC5jIGIvdXNyLmJpbi9ncmVwL2Zh c3RncmVwLmMKaW5kZXggYzY2ZjBhNy4uMzBhMmRjNSAxMDA2NDQKLS0tIGEvdXNyLmJpbi9n cmVwL2Zhc3RncmVwLmMKKysrIGIvdXNyLmJpbi9ncmVwL2Zhc3RncmVwLmMKQEAgLTE5OCw3 ICsxOTgsNyBAQCBmYXN0Y29tcChmYXN0Z3JlcF90ICpmZywgY29uc3QgY2hhciAqcGF0KQog fQogCiBpbnQKLWdyZXBfc2VhcmNoKGZhc3RncmVwX3QgKmZnLCB1bnNpZ25lZCBjaGFyICpk YXRhLCBzaXplX3QgbGVuLCByZWdtYXRjaF90ICpwbWF0Y2gpCitncmVwX3NlYXJjaChmYXN0 Z3JlcF90ICpmZywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgcmVn bWF0Y2hfdCAqcG1hdGNoKQogewogCXVuc2lnbmVkIGludCBqOwogCWludCByZXQgPSBSRUdf Tk9NQVRDSDsKZGlmZiAtLWdpdCBhL3Vzci5iaW4vZ3JlcC9maWxlLmMgYi91c3IuYmluL2dy ZXAvZmlsZS5jCmluZGV4IDE4NzJkMGUuLjE4NWFiMWQgMTAwNjQ0Ci0tLSBhL3Vzci5iaW4v Z3JlcC9maWxlLmMKKysrIGIvdXNyLmJpbi9ncmVwL2ZpbGUuYwpAQCAtMzcsNyArMzcsNyBA QCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8YnpsaWIuaD4KICNpbmNsdWRl IDxlcnIuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j bHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcu aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTQ3LDEzOCArNDcsMTYwIEBAIF9fRkJTRElE KCIkRnJlZUJTRCQiKTsKIAogI2luY2x1ZGUgImdyZXAuaCIKIAotc3RhdGljIGNoYXIJIGZu YW1lW01BWFBBVEhMRU5dOwkvKiBmaWxlIG5hbWUgKi8KKyNkZWZpbmUJTUFYQlVGU0laCSgz MiAqIDEwMjQpCisjZGVmaW5lCUxOQlVGQlVNUAk4MAogCi0jZGVmaW5lCQkgTUFYQlVGU0la CSgxNiAqIDEwMjQpCi0jZGVmaW5lCQkgUFJFUkVBRF9NCTAuMgorc3RhdGljIGd6RmlsZSBn emJ1ZmRlc2M7CitzdGF0aWMgQlpGSUxFKiBiemJ1ZmRlc2M7CiAKLS8qIFNvbWUgZ2xvYmFs IHZhcmlhYmxlcyBmb3IgdGhlIGJ1ZmZlcmluZyBhbmQgcmVhZGluZy4gKi8KLXN0YXRpYyBj aGFyCSpsbmJ1ZjsKLXN0YXRpYyBzaXplX3QJIGxuYnVmbGVuOwotc3RhdGljIHVuc2lnbmVk IGNoYXIgKmJpbmJ1ZjsKLXN0YXRpYyBpbnQJIGJpbmJ1ZnNpejsKLXVuc2lnbmVkIGNoYXIJ KmJpbmJ1ZnB0cjsKLXN0YXRpYyBpbnQJIGJ6ZXJyOworc3RhdGljIHVuc2lnbmVkIGNoYXIg YnVmZmVyW01BWEJVRlNJWl07CitzdGF0aWMgdW5zaWduZWQgY2hhciAqYnVmcG9zOworc3Rh dGljIHNpemVfdCBidWZyZW07CiAKLSNkZWZpbmUgaXN3YmluYXJ5KGNoKQkoIWlzd3NwYWNl KChjaCkpICYmIGlzd2NudHJsKChjaCkpICYmIFwKLQkJCSAgICAoY2ggIT0gTCdcYicpICYm IChjaCAhPSBMJ1wwJykpCitzdGF0aWMgdW5zaWduZWQgY2hhciAqbG5idWY7CitzdGF0aWMg c2l6ZV90IGxuYnVmbGVuOwogCi0vKgotICogUmV0dXJucyBhIHNpbmdsZSBjaGFyYWN0ZXIg YWNjb3JkaW5nIHRvIHRoZSBmaWxlIHR5cGUuCi0gKiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUu Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1ncmVwX2ZnZXRjKHN0cnVjdCBmaWxlICpmKQor c3RhdGljIGludAorZ3JlcF9yZWZpbGwoc3RydWN0IGZpbGUgKmYpCiB7Ci0JdW5zaWduZWQg Y2hhciBjOworCXNzaXplX3QgbnI7CisJaW50IGJ6ZXJyOwogCi0Jc3dpdGNoIChmaWxlYmVo YXZlKSB7Ci0JY2FzZSBGSUxFX1NURElPOgotCQlyZXR1cm4gKGdldGNfdW5sb2NrZWQoZi0+ ZikpOwotCWNhc2UgRklMRV9HWklQOgotCQlyZXR1cm4gKGd6Z2V0YyhmLT5nemYpKTsKLQlj YXNlIEZJTEVfQlpJUDoKLQkJQloyX2J6UmVhZCgmYnplcnIsIGYtPmJ6ZiwgJmMsIDEpOwot CQlpZiAoYnplcnIgPT0gQlpfU1RSRUFNX0VORCkKLQkJCXJldHVybiAoLTEpOwotCQllbHNl IGlmIChiemVyciAhPSBCWl9TRVFVRU5DRV9FUlJPUiAmJiBiemVyciAhPSBCWl9PSykKLQkJ CWVycngoMiwgIiVzIiwgZ2V0c3RyKDIpKTsKLQkJcmV0dXJuIChjKTsKKwlidWZwb3MgPSBi dWZmZXI7CisJYnVmcmVtID0gMDsKKworCWlmIChmaWxlYmVoYXZlID09IEZJTEVfR1pJUCkg eworCQluciA9IGd6cmVhZChnemJ1ZmRlc2MsIGJ1ZmZlciwgTUFYQlVGU0laKTsKKwl9IGVs c2UgaWYgKGZpbGViZWhhdmUgPT0gRklMRV9CWklQICYmIGJ6YnVmZGVzYyAhPSBOVUxMKSB7 CisJCW5yID0gQloyX2J6UmVhZCgmYnplcnIsIGJ6YnVmZGVzYywgYnVmZmVyLCBNQVhCVUZT SVopOworCQlzd2l0Y2ggKGJ6ZXJyKSB7CisJCWNhc2UgQlpfT0s6CisJCWNhc2UgQlpfU1RS RUFNX0VORDoKKwkJCS8qIE5vIHByb2JsZW0sIG5yIHdpbGwgYmUgb2theSAqLworCQkJYnJl YWs7CisJCWNhc2UgQlpfREFUQV9FUlJPUl9NQUdJQzoKKwkJCS8qCisJCQkgKiBBcyBvcHBv c2VkIHRvIGd6cmVhZCgpLCB3aGljaCBzaW1wbHkgcmV0dXJucyB0aGUKKwkJCSAqIHBsYWlu IGZpbGUgZGF0YSwgaWYgaXQgaXMgbm90IGluIHRoZSBjb3JyZWN0CisJCQkgKiBjb21wcmVz c2VkIGZvcm1hdCwgQloyX2J6UmVhZCgpIGluc3RlYWQgYWJvcnRzLgorCQkJICoKKwkJCSAq IFNvLCBqdXN0IHJlc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSBhZ2FpbiwK KwkJCSAqIGFuZCB1c2UgcGxhaW4gcmVhZHMgZnJvbSBub3cgb24uCisJCQkgKi8KKwkJCUJa Ml9ielJlYWRDbG9zZSgmYnplcnIsIGJ6YnVmZGVzYyk7CisJCQliemJ1ZmRlc2MgPSBOVUxM OworCQkJaWYgKGxzZWVrKGYtPmZkLCAwLCBTRUVLX1NFVCkgPT0gLTEpCisJCQkJcmV0dXJu IChFT0YpOworCQkJbnIgPSByZWFkKGYtPmZkLCBidWZmZXIsIE1BWEJVRlNJWik7CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIE1ha2Ugc3VyZSB3ZSBleGl0IHdpdGggYW4gZXJy b3IgKi8KKwkJCW5yID0gLTE7CisJCX0KKwl9IGVsc2UgeworCQluciA9IHJlYWQoZi0+ZmQs IGJ1ZmZlciwgTUFYQlVGU0laKTsKIAl9Ci0JcmV0dXJuICgtMSk7CisKKwlpZiAobnIgPD0g MCkKKwkJcmV0dXJuIChFT0YpOworCisJYnVmcmVtID0gbnI7CisJcmV0dXJuICgwKTsKIH0K IAotLyoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBwb3NpdGlvbiBpcyBhIEVPRiwg cmV0dXJucyBmYWxzZQotICogb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludAot Z3JlcF9mZW9mKHN0cnVjdCBmaWxlICpmKQorc3RhdGljIGludAorZ3JlcF9sbmJ1Zmdyb3co c2l6ZV90IG5ld2xlbikKIHsKKwl1bnNpZ25lZCBjaGFyICpwOwogCi0Jc3dpdGNoIChmaWxl YmVoYXZlKSB7Ci0JY2FzZSBGSUxFX1NURElPOgotCQlyZXR1cm4gKGZlb2ZfdW5sb2NrZWQo Zi0+ZikpOwotCWNhc2UgRklMRV9HWklQOgotCQlyZXR1cm4gKGd6ZW9mKGYtPmd6ZikpOwot CWNhc2UgRklMRV9CWklQOgotCQlyZXR1cm4gKGJ6ZXJyID09IEJaX1NUUkVBTV9FTkQpOwot CX0KLQlyZXR1cm4gKDEpOworCWlmIChsbmJ1ZmxlbiA+PSBuZXdsZW4pCisJCXJldHVybiAo MCk7CisJaWYgKChwID0gcmVhbGxvYyhsbmJ1ZiwgbmV3bGVuKSkgPT0gTlVMTCkKKwkJcmV0 dXJuIChFT0YpOworCWxuYnVmID0gcDsKKwlsbmJ1ZmxlbiA9IG5ld2xlbjsKKwlyZXR1cm4g KDApOwogfQogCi0vKgotICogQXQgdGhlIGZpcnN0IGNhbGwsIGZpbGxzIGluIGFuIGludGVy bmFsIGJ1ZmZlciBhbmQgY2hlY2tzIGlmIHRoZSBnaXZlbgotICogZmlsZSBpcyBhIGJpbmFy eSBmaWxlIGFuZCBzZXRzIHRoZSBiaW5hcnkgZmxhZyBhY2NvcmRpbmdseS4gIFRoZW4gcmV0 dXJucwotICogYSBzaW5nbGUgbGluZSBhbmQgc2V0cyBsZW4gdG8gdGhlIGxlbmd0aCBvZiB0 aGUgcmV0dXJuZWQgbGluZS4KLSAqIEF0IGFueSBvdGhlciBjYWxsIHJldHVybnMgYSBzaW5n bGUgbGluZSBlaXRoZXIgZnJvbSB0aGUgaW50ZXJuYWwgYnVmZmVyCi0gKiBvciBmcm9tIHRo ZSBmaWxlIGlmIHRoZSBidWZmZXIgaXMgZXhoYXVzdGVkIGFuZCBzZXRzIGxlbiB0byB0aGUg bGVuZ3RoCi0gKiBvZiB0aGUgbGluZS4KLSAqLwogY2hhciAqCi1ncmVwX2ZnZXRsbihzdHJ1 Y3QgZmlsZSAqZiwgc2l6ZV90ICpsZW4pCitncmVwX2ZnZXRsbihzdHJ1Y3QgZmlsZSAqZiwg c2l6ZV90ICpsZW5wKQogewotCXN0cnVjdCBzdGF0IHN0OwotCXNpemVfdCBidWZzaXosIGkg PSAwOwotCWludCBjaCA9IDA7Ci0KLQkvKiBGaWxsIGluIHRoZSBidWZmZXIgaWYgaXQgaXMg ZW1wdHkuICovCi0JaWYgKGJpbmJ1ZnB0ciA9PSBOVUxMKSB7Ci0KLQkJLyogT25seSBwcmUt cmVhZCB0byB0aGUgYnVmZmVyIGlmIHdlIG5lZWQgdGhlIGJpbmFyeSBjaGVjay4gKi8KLQkJ aWYgKGJpbmJlaGF2ZSAhPSBCSU5GSUxFX1RFWFQpIHsKLQkJCWlmIChmLT5zdGRpbikKLQkJ CQlzdC5zdF9zaXplID0gTUFYQlVGU0laOwotCQkJZWxzZSBpZiAoc3RhdChmbmFtZSwgJnN0 KSAhPSAwKQotCQkJCWVycigyLCBOVUxMKTsKLQkJCS8qIG5vIG5lZWQgdG8gYWxsb2NhdGUg YnVmZmVyLiAqLwotCQkJaWYgKHN0LnN0X3NpemUgPT0gMCkKLQkJCQlyZXR1cm4gKE5VTEwp OwotCi0JCQlidWZzaXogPSAoTUFYQlVGU0laID4gKHN0LnN0X3NpemUgKiBQUkVSRUFEX00p KSA/Ci0JCQkgICAgKHN0LnN0X3NpemUgLyAyKSA6IE1BWEJVRlNJWjsKLQotCQkJYmluYnVm ID0gZ3JlcF9tYWxsb2Moc2l6ZW9mKGNoYXIpICogYnVmc2l6KTsKLQotCQkJd2hpbGUgKGkg PCBidWZzaXopIHsKLQkJCQljaCA9IGdyZXBfZmdldGMoZik7Ci0JCQkJaWYgKGNoID09IEVP RikKLQkJCQkJYnJlYWs7Ci0JCQkJYmluYnVmW2krK10gPSBjaDsKLQkJCQlpZiAoKGNoID09 ICdcbicpICYmIGxiZmxhZykKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWYtPmJpbmFyeSA9 IG1lbWNocihiaW5idWYsIChmaWxlYmVoYXZlICE9IEZJTEVfR1pJUCkgPwotCQkJICAgICdc MCcgOiAnXDIwMCcsIGkgLSAxKSAhPSBOVUxMOwotCQl9Ci0JCWJpbmJ1ZnNpeiA9IGk7Ci0J CWJpbmJ1ZnB0ciA9IGJpbmJ1ZjsKKwl1bnNpZ25lZCBjaGFyICpwOworCWNoYXIgKnJldDsK KwlzaXplX3QgbGVuOworCXNpemVfdCBkaWZmOworCXNpemVfdCBvZmY7CisKKwkvKiBGaWxs IHRoZSBidWZmZXIsIGlmIG5lY2Vzc2FyeSAqLworCWlmIChidWZyZW0gPT0gMCAmJiBncmVw X3JlZmlsbChmKSkgeworZXJyb3I6CisJCSpsZW5wID0gMDsKKwkJcmV0dXJuIChOVUxMKTsK Kwl9CisKKwkvKiBMb29rIGZvciBhIG5ld2xpbmUgaW4gdGhlIHJlbWFpbmluZyBwYXJ0IG9m IHRoZSBidWZmZXIgKi8KKwlpZiAoKHAgPSBtZW1jaHIoYnVmcG9zLCAnXG4nLCBidWZyZW0p KSAhPSBOVUxMKSB7CisJCSsrcDsgLyogYWR2YW5jZSBvdmVyIG5ld2xpbmUgKi8KKwkJcmV0 ID0gYnVmcG9zOworCQlsZW4gPSBwIC0gYnVmcG9zOworCQlidWZyZW0gLT0gbGVuOworCQli dWZwb3MgPSBwOworCQkqbGVucCA9IGxlbjsKKwkJcmV0dXJuIChyZXQpOwogCX0KIAotCS8q IFJlYWQgYSBsaW5lIHdoZXRoZXIgZnJvbSB0aGUgYnVmZmVyIG9yIGZyb20gdGhlIGZpbGUg aXRzZWxmLiAqLwotCWZvciAoaSA9IDA7ICEoZ3JlcF9mZW9mKGYpICYmCi0JICAgIChiaW5i dWZwdHIgPT0gJmJpbmJ1ZltiaW5idWZzaXpdKSk7IGkrKykgewotCQlpZiAoYmluYnVmcHRy ID09ICZiaW5idWZbYmluYnVmc2l6XSkgewotCQkJY2ggPSBncmVwX2ZnZXRjKGYpOwotCQl9 IGVsc2UgewotCQkJY2ggPSBiaW5idWZwdHJbMF07Ci0JCQliaW5idWZwdHIrKzsKLQkJfQot CQlpZiAoaSA+PSBsbmJ1ZmxlbikgewotCQkJbG5idWZsZW4gKj0gMjsKLQkJCWxuYnVmID0g Z3JlcF9yZWFsbG9jKGxuYnVmLCArK2xuYnVmbGVuKTsKLQkJfQotCQlpZiAoKGNoID09ICdc bicpIHx8IChjaCA9PSBFT0YpKSB7Ci0JCQlsbmJ1ZltpXSA9ICdcMCc7Ci0JCQlicmVhazsK LQkJfSBlbHNlCi0JCQlsbmJ1ZltpXSA9IGNoOworCS8qIFdlIGhhdmUgdG8gY29weSB0aGUg Y3VycmVudCBidWZmZXJlZCBkYXRhIHRvIHRoZSBsaW5lIGJ1ZmZlciAqLworCWZvciAobGVu ID0gYnVmcmVtLCBvZmYgPSAwOyA7IGxlbiArPSBidWZyZW0pIHsKKwkJLyogTWFrZSBzdXJl IHRoZXJlIGlzIHJvb20gZm9yIG1vcmUgZGF0YSAqLworCQlpZiAoZ3JlcF9sbmJ1Zmdyb3co bGVuICsgTE5CVUZCVU1QKSkKKwkJCWdvdG8gZXJyb3I7CisJCW1lbWNweShsbmJ1ZiArIG9m ZiwgYnVmcG9zLCBsZW4gLSBvZmYpOworCQlvZmYgPSBsZW47CisJCWlmIChncmVwX3JlZmls bChmKSkKKwkJCWJyZWFrOyAvKiBFT0Ygb3IgZXJyb3I6IHJldHVybiBwYXJ0aWFsIGxpbmUg Ki8KKwkJaWYgKChwID0gbWVtY2hyKGJ1ZnBvcywgJ1xuJywgYnVmcmVtKSkgPT0gTlVMTCkK KwkJCWNvbnRpbnVlOworCQkvKiBnb3QgaXQ6IGZpbmlzaCB1cCB0aGUgbGluZSAobGlrZSBj b2RlIGFib3ZlKSAqLworCQkrK3A7CisJCWRpZmYgPSBwIC0gYnVmcG9zOworCQlsZW4gPSsg ZGlmZjsKKwkJaWYgKGdyZXBfbG5idWZncm93KGxlbikpCisJCSAgICBnb3RvIGVycm9yOwor CQltZW1jcHkobG5idWYgKyBvZmYsIGJ1ZnBvcywgZGlmZik7CisJCWJ1ZnJlbSAtPSBkaWZm OworCQlidWZwb3MgPSBwOworCQlicmVhazsKIAl9Ci0JaWYgKGdyZXBfZmVvZihmKSAmJiAo aSA9PSAwKSAmJiAoY2ggIT0gJ1xuJykpCisJKmxlbnAgPSBsZW47CisJcmV0dXJuIGxuYnVm OworfQorCitzdGF0aWMgc3RydWN0IGZpbGUgKgorZ3JlcF9maWxlX2luaXQoc3RydWN0IGZp bGUgKmYpCit7CisKKwlpZiAoZmlsZWJlaGF2ZSA9PSBGSUxFX0daSVAgJiYKKwkgICAgKGd6 YnVmZGVzYyA9IGd6ZG9wZW4oZi0+ZmQsICJyIikpID09IE5VTEwpIHsKK2Vycm9yOgorCQlp ZiAoIWYtPnN0ZGluKQorCQkJY2xvc2UoZi0+ZmQpOworCQlmcmVlKGYpOwogCQlyZXR1cm4g KE5VTEwpOwotCSpsZW4gPSBpOwotCXJldHVybiAobG5idWYpOworCX0KKworCWlmIChmaWxl YmVoYXZlID09IEZJTEVfQlpJUCAmJgorCSAgICAoYnpidWZkZXNjID0gQloyX2J6ZG9wZW4o Zi0+ZmQsICJyIikpID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBGaWxsIHJlYWQg YnVmZmVyLCBhbHNvIGNhdGNoZXMgZXJyb3JzIGVhcmx5ICovCisJaWYgKGdyZXBfcmVmaWxs KGYpKQorCQlnb3RvIGVycm9yOworCisJLyogQ2hlY2sgZm9yIGJpbmFyeSBzdHVmZiwgaWYg bmVjZXNzYXJ5ICovCisJaWYgKGJpbmJlaGF2ZSAhPSBCSU5GSUxFX1RFWFQgJiYgbWVtY2hy KGJ1ZnBvcywgJ1wwJywgYnVmcmVtKSAhPSBOVUxMKQorCQlmLT5iaW5hcnkgPSB0cnVlOwor CisJcmV0dXJuIChmKTsKIH0KIAogLyoKQEAgLTE5Miw3NyArMjE0LDQ2IEBAIGdyZXBfc3Rk aW5fb3Blbih2b2lkKQogCS8qIFByb2Nlc3Npbmcgc3RkaW4gaW1wbGllcyAtLWxpbmUtYnVm ZmVyZWQgZm9yIHRhaWwgLWYgdG8gd29yay4gKi8KIAlsYmZsYWcgPSB0cnVlOwogCi0Jc25w cmludGYoZm5hbWUsIHNpemVvZiBmbmFtZSwgIiVzIiwgZ2V0c3RyKDEpKTsKLQogCWYgPSBn cmVwX21hbGxvYyhzaXplb2YgKmYpOworCW1lbXNldChmLCAwLCBzaXplb2YgKmYpOworCWYt PmZkID0gU1RESU5fRklMRU5POworCWYtPnN0ZGluID0gdHJ1ZTsKIAotCWJpbmJ1ZiA9IE5V TEw7Ci0JaWYgKChmLT5mID0gZmRvcGVuKFNURElOX0ZJTEVOTywgInIiKSkgIT0gTlVMTCkg ewotCQlmbG9ja2ZpbGUoZi0+Zik7Ci0JCWYtPnN0ZGluID0gdHJ1ZTsKLQkJcmV0dXJuIChm KTsKLQl9Ci0KLQlmcmVlKGYpOwotCXJldHVybiAoTlVMTCk7CisJcmV0dXJuIGdyZXBfZmls ZV9pbml0KGYpOwogfQogCiAvKgotICogT3BlbnMgYSBub3JtYWwsIGEgZ3ppcHBlZCBvciBh IGJ6aXAyIGNvbXByZXNzZWQgZmlsZSBmb3IgcHJvY2Vzc2luZy4KKyAqIE9wZW5zIGEgZmls ZSBmb3IgcHJvY2Vzc2luZy4KICAqLwogc3RydWN0IGZpbGUgKgogZ3JlcF9vcGVuKGNvbnN0 IGNoYXIgKnBhdGgpCiB7CiAJc3RydWN0IGZpbGUgKmY7CiAKLQlzbnByaW50ZihmbmFtZSwg c2l6ZW9mIGZuYW1lLCAiJXMiLCBwYXRoKTsKLQogCWYgPSBncmVwX21hbGxvYyhzaXplb2Yg KmYpOwotCi0JYmluYnVmID0gTlVMTDsKLQlmLT5zdGRpbiA9IGZhbHNlOwotCXN3aXRjaCAo ZmlsZWJlaGF2ZSkgewotCWNhc2UgRklMRV9TVERJTzoKLQkJaWYgKChmLT5mID0gZm9wZW4o cGF0aCwgInIiKSkgIT0gTlVMTCkgewotCQkJZmxvY2tmaWxlKGYtPmYpOwotCQkJcmV0dXJu IChmKTsKLQkJfQotCQlicmVhazsKLQljYXNlIEZJTEVfR1pJUDoKLQkJaWYgKChmLT5nemYg PSBnem9wZW4oZm5hbWUsICJyIikpICE9IE5VTEwpCi0JCQlyZXR1cm4gKGYpOwotCQlicmVh azsKLQljYXNlIEZJTEVfQlpJUDoKLQkJaWYgKChmLT5iemYgPSBCWjJfYnpvcGVuKGZuYW1l LCAiciIpKSAhPSBOVUxMKQotCQkJcmV0dXJuIChmKTsKLQkJYnJlYWs7CisJbWVtc2V0KGYs IDAsIHNpemVvZiAqZik7CisJaWYgKChmLT5mZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpKSA9 PSAtMSkgeworCQlmcmVlKGYpOworCQlyZXR1cm4gKE5VTEwpOwogCX0KIAotCWZyZWUoZik7 Ci0JcmV0dXJuIChOVUxMKTsKKwlyZXR1cm4gZ3JlcF9maWxlX2luaXQoZik7CiB9CiAKIC8q Ci0gKiBDbG9zZXMgYSBub3JtYWwsIGEgZ3ppcHBlZCBvciBhIGJ6aXAyIGNvbXByZXNzZWQg ZmlsZS4KKyAqIENsb3NlcyBhIGZpbGUuCiAgKi8KIHZvaWQKIGdyZXBfY2xvc2Uoc3RydWN0 IGZpbGUgKmYpCiB7CiAKLQlzd2l0Y2ggKGZpbGViZWhhdmUpIHsKLQljYXNlIEZJTEVfU1RE SU86Ci0JCWZ1bmxvY2tmaWxlKGYtPmYpOwotCQlmY2xvc2UoZi0+Zik7Ci0JCWJyZWFrOwot CWNhc2UgRklMRV9HWklQOgotCQlnemNsb3NlKGYtPmd6Zik7Ci0JCWJyZWFrOwotCWNhc2Ug RklMRV9CWklQOgotCQlCWjJfYnpjbG9zZShmLT5iemYpOwotCQlicmVhazsKLQl9CisJY2xv c2UoZi0+ZmQpOwogCi0JLyogUmVzZXQgcmVhZCBidWZmZXIgZm9yIHRoZSBmaWxlIHdlIGFy ZSBjbG9zaW5nICovCi0JYmluYnVmcHRyID0gTlVMTDsKLQlmcmVlKGJpbmJ1Zik7CisJLyog UmVzZXQgcmVhZCBidWZmZXIgYW5kIGxpbmUgYnVmZmVyICovCisJYnVmcG9zID0gYnVmZmVy OworCWJ1ZnJlbSA9IDA7CisKKwlmcmVlKGxuYnVmKTsKKwlsbmJ1ZiA9IE5VTEw7CisJbG5i dWZsZW4gPSAwOwogfQpkaWZmIC0tZ2l0IGEvdXNyLmJpbi9ncmVwL2dyZXAuaCBiL3Vzci5i aW4vZ3JlcC9ncmVwLmgKaW5kZXggMmY3NDNlNC4uOTY3ZDQ2NCAxMDA2NDQKLS0tIGEvdXNy LmJpbi9ncmVwL2dyZXAuaAorKysgYi91c3IuYmluL2dyZXAvZ3JlcC5oCkBAIC03NywxMCAr NzcsNyBAQCBleHRlcm4gY29uc3QgY2hhcgkJKmVycnN0cltdOwogI2RlZmluZSBNQVhfTElO RV9NQVRDSEVTCTMyCiAKIHN0cnVjdCBmaWxlIHsKLQlzdHJ1Y3QgbW1maWxlCSptbWY7Ci0J QlpGSUxFCQkqYnpmOwotCUZJTEUJCSpmOwotCWd6RmlsZQkJKmd6ZjsKKwlpbnQJCSBmZDsK IAlib29sCQkgYmluYXJ5OwogCWJvb2wJCSBzdGRpbjsKIH07CkBAIC0xNTcsNCArMTU0LDQg QEAgY2hhcgkJKmdyZXBfZmdldGxuKHN0cnVjdCBmaWxlICpmLCBzaXplX3QgKmxlbik7CiAv KiBmYXN0Z3JlcC5jICovCiBpbnQJCSBmYXN0Y29tcChmYXN0Z3JlcF90ICosIGNvbnN0IGNo YXIgKik7CiB2b2lkCQkgZmdyZXBjb21wKGZhc3RncmVwX3QgKiwgY29uc3QgY2hhciAqKTsK LWludAkJIGdyZXBfc2VhcmNoKGZhc3RncmVwX3QgKiwgdW5zaWduZWQgY2hhciAqLCBzaXpl X3QsIHJlZ21hdGNoX3QgKik7CitpbnQJCSBncmVwX3NlYXJjaChmYXN0Z3JlcF90ICosIGNv bnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LCByZWdtYXRjaF90ICopOwo= --------------030707040809090904070205--