Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:50844 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 87164 invoked from network); 5 Dec 2010 00:11:45 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 5 Dec 2010 00:11:45 -0000 Authentication-Results: pb1.pair.com smtp.mail=kontakt@beberlei.de; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=kontakt@beberlei.de; sender-id=unknown Received-SPF: error (pb1.pair.com: domain beberlei.de from 178.77.98.152 cause and error) X-PHP-List-Original-Sender: kontakt@beberlei.de X-Host-Fingerprint: 178.77.98.152 lvps178-77-98-152.dedicated.hosteurope.de Linux 2.6 Received: from [178.77.98.152] ([178.77.98.152:56522] helo=beberlei.de) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 5C/86-40184-DB8DAFC4 for ; Sat, 04 Dec 2010 19:11:44 -0500 Received: by beberlei.de (Postfix, from userid 33) id CDF876E08F62; Sun, 5 Dec 2010 01:11:37 +0100 (CET) To: MIME-Version: 1.0 Date: Sun, 05 Dec 2010 01:11:37 +0100 Message-ID: X-Sender: kontakt@beberlei.de User-Agent: RoundCube Webmail/0.3.1 Content-Type: multipart/mixed; boundary="=_5109fc07da9b3412d513b2f649e23a25" Subject: Patch: Marking DateTime Instances Immutable From: kontakt@beberlei.de (Benjamin Eberlei) --=_5109fc07da9b3412d513b2f649e23a25 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 In the current implementation DateTime is not a value object, but its internal state can be modified at any given time. This can lead to very obscure bugs when references to DateTime objects are shared or objects are passed through a chain of methods/functions that modify it. Using DateTime is not side-effect free. I propose to allow to work with DateTime objects that are marked as immutable optionally. This means that all methods add, sub, modify, setDate, setTime, setISODate, setTimestamp and setTimezone will return a NEW instance of Datetime instead of reusing the old one. I also talked to Derick about this and he agrees that immutable DateTime objects would be desirable. I have talked to many other people who agreed that the current behavior is weird. My proposed syntax would be: $immutableDateTime = date_create("2010-12-05", null, true); $immutableDateTime = new DateTime("2010-12-05", null, true); $immutableDateTime = DateTime::createFromFormat("%Y-%m-%d", "2010-12-05", null, true); Where the third and fourth variable respectivly are boolean flags $immutable yes or no. Also the DatePeriod iterator would be modified. If an immutable start date is passed the date iterator would also create immutable dates. I have attached a patch that implements this functionality and a little test-script that shows how it would work. This is the first complex bit of C-code that I did so please bear with any mistakes I made ;-) Also i havent followed the coding standards. Any feedback is greatly appreciated. My C-Skills arent that good so i am not finished with an additional solution allowing to call a method "setImmutable()" on any datetime instance, marking it as immutable. Obviously this would only mark the instance as immutable, allowing to accept a flag to reset it to be mutable would be counter-productive. The only drawback I see to this patch is the additional int variable on the _php_date_obj and _php_date_period structs. I am not sure if they affect memory in such a way that this solution isn't viable. If this topic needs more discussion or pro/cons I am willing to open up an RFC for a more detailed discussion. --=_5109fc07da9b3412d513b2f649e23a25 Content-Transfer-Encoding: base64 Content-Type: text/x-php; charset=UTF-8; name=datetime.php; Content-Disposition: attachment; filename=datetime.php; PD9waHAKCmluaV9zZXQoImRhdGUudGltZXpvbmUiLCAiRXVyb3BlL0JlcmxpbiIpOwoKJGQgPSBu ZXcgRGF0ZVRpbWUoIm5vdyIsIG5ldyBEYXRlVGltZVpvbmUoIkV1cm9wZS9CZXJsaW4iKSwgdHJ1 ZSk7CgokZDIgPSAkZC0+YWRkKERhdGVJbnRlcnZhbDo6Y3JlYXRlRnJvbURhdGVTdHJpbmcoIjEg bW9udGgiKSk7CiRkMyA9ICRkLT5zdWIoRGF0ZUludGVydmFsOjpjcmVhdGVGcm9tRGF0ZVN0cmlu ZygiMSBtb250aCIpKTsKCmVjaG8gJGQyLT5mb3JtYXQoJ2QubS5ZJykgLiAiICIgLiAkZC0+Zm9y bWF0KCdkLm0uWScpIC4gIiAiIC4gJGQzLT5mb3JtYXQoJ2QubS5ZJyk7CmVjaG8gIlxuZD09PWQy OiAiOwplY2hvICRkID09PSAkZDIgPyAiZXF1YWxzIiA6ICJuZXciOwplY2hvICJcbmQ9PT1kMzog IjsKZWNobyAkZCA9PT0gJGQzID8gImVxdWFscyIgOiAibmV3IjsKZWNobyAiXG4iOwoKJGJlZ2lu ID0gbmV3IERhdGVUaW1lKCAnMjAwNy0xMi0zMScsICBuZXcgRGF0ZVRpbWVab25lKCJFdXJvcGUv QmVybGluIiksIHRydWUpOwokZW5kID0gbmV3IERhdGVUaW1lKCAnMjAwOS0xMi0zMSAyMzo1OTo1 OScsICBuZXcgRGF0ZVRpbWVab25lKCJFdXJvcGUvQmVybGluIiksIHRydWUpOwoKJGludGVydmFs ID0gRGF0ZUludGVydmFsOjpjcmVhdGVGcm9tRGF0ZVN0cmluZygnbGFzdCB0aHVyc2RheSBvZiBu ZXh0IG1vbnRoJyk7CiRwZXJpb2QgPSBuZXcgRGF0ZVBlcmlvZCgkYmVnaW4sICRpbnRlcnZhbCwg JGVuZCwgRGF0ZVBlcmlvZDo6RVhDTFVERV9TVEFSVF9EQVRFKTsKCiRkYXRlcyA9IGFycmF5KCk7 CmZvcmVhY2ggKCAkcGVyaW9kIGFzICRkdCApIHsKICAgICRuZXdkYXRlID0gJGR0LT5hZGQoRGF0 ZUludGVydmFsOjpjcmVhdGVGcm9tRGF0ZVN0cmluZygiMSBtb250aCIpKTsKICAgIGVjaG8gIkl0 ZXJhdG9yOiAiOwogICAgZWNobyAkbmV3ZGF0ZSA9PT0gJGR0ID8gImVxdWFsIiA6ICJuZXciOwog ICAgZWNobyAiXG4iOwp9CgoK --=_5109fc07da9b3412d513b2f649e23a25 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; charset=UTF-8; name=php_immuntable_datetime.patch; Content-Disposition: attachment; filename=php_immuntable_datetime.patch; SW5kZXg6IGV4dC9kYXRlL3BocF9kYXRlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZXh0L2RhdGUvcGhwX2Rh dGUuYwkocmV2aXNpb24gMzA1OTY1KQorKysgZXh0L2RhdGUvcGhwX2RhdGUuYwkod29ya2luZyBj b3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgInBocF9kYXRlLmgiCiAjaW5jbHVkZSAi emVuZF9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAibGliL3RpbWVsaWIuaCIKKyNpbmNsdWRlICJa ZW5kL3plbmRfb3BlcmF0b3JzLmgiCiAjaW5jbHVkZSA8dGltZS5oPgogCiAjaWZkZWYgUEhQX1dJ TjMyCkBAIC0xNDAsMTIgKzE0MSwxNCBAQAogWkVORF9CRUdJTl9BUkdfSU5GT19FWChhcmdpbmZv X2RhdGVfY3JlYXRlLCAwLCAwLCAwKQogCVpFTkRfQVJHX0lORk8oMCwgdGltZSkKIAlaRU5EX0FS R19JTkZPKDAsIG9iamVjdCkKKyAgICAgICAgWkVORF9BUkdfSU5GTygwLCBpbW11dGFibGUpCiBa RU5EX0VORF9BUkdfSU5GTygpCiAKIFpFTkRfQkVHSU5fQVJHX0lORk9fRVgoYXJnaW5mb19kYXRl X2NyZWF0ZV9mcm9tX2Zvcm1hdCwgMCwgMCwgMikKIAlaRU5EX0FSR19JTkZPKDAsIGZvcm1hdCkK IAlaRU5EX0FSR19JTkZPKDAsIHRpbWUpCiAJWkVORF9BUkdfSU5GTygwLCBvYmplY3QpCisgICAg ICAgIFpFTkRfQVJHX0lORk8oMCwgaW1tdXRhYmxlKQogWkVORF9FTkRfQVJHX0lORk8oKQogCiBa RU5EX0JFR0lOX0FSR19JTkZPX0VYKGFyZ2luZm9fZGF0ZV9wYXJzZSwgMCwgMCwgMSkKQEAgLTE4 NTUsNiArMTg1OCw3IEBACiAJbmV3ZGF0ZW9iaiA9IChwaHBfZGF0ZV9vYmogKikgemVuZF9vYmpl Y3Rfc3RvcmVfZ2V0X29iamVjdChpdGVyYXRvci0+Y3VycmVudCBUU1JNTFNfQ0MpOwogCW5ld2Rh dGVvYmotPnRpbWUgPSB0aW1lbGliX3RpbWVfY3RvcigpOwogCSpuZXdkYXRlb2JqLT50aW1lID0g Kml0X3RpbWU7CisgICAgICAgIG5ld2RhdGVvYmotPmltbXV0YWJsZSA9IG9iamVjdC0+aW1tdXRh YmxlOwogCWlmIChpdF90aW1lLT50el9hYmJyKSB7CiAJCW5ld2RhdGVvYmotPnRpbWUtPnR6X2Fi YnIgPSBzdHJkdXAoaXRfdGltZS0+dHpfYWJicik7CiAJfQpAQCAtMjAyMiw2ICsyMDI2LDcgQEAK IAlpZiAocHRyKSB7CiAJCSpwdHIgPSBpbnRlcm47CiAJfQorICAgICAgICBpbnRlcm4tPmltbXV0 YWJsZSA9IDA7CiAJCiAJemVuZF9vYmplY3Rfc3RkX2luaXQoJmludGVybi0+c3RkLCBjbGFzc190 eXBlIFRTUk1MU19DQyk7CiAJemVuZF9oYXNoX2NvcHkoaW50ZXJuLT5zdGQucHJvcGVydGllcywg JmNsYXNzX3R5cGUtPmRlZmF1bHRfcHJvcGVydGllcywgKGNvcHlfY3Rvcl9mdW5jX3QpIHp2YWxf YWRkX3JlZiwgKHZvaWQgKikgJnRtcCwgc2l6ZW9mKHp2YWwgKikpOwpAQCAtMjAzNyw2ICsyMDQy LDE4IEBACiAJcmV0dXJuIGRhdGVfb2JqZWN0X25ld19kYXRlX2V4KGNsYXNzX3R5cGUsIE5VTEwg VFNSTUxTX0NDKTsKIH0KIAorc3RhdGljIHp2YWwqIGRhdGVfb2JqZWN0X2Nsb25lKHp2YWwgKm9s ZCBUU1JNTFNfREMpCit7CisgICAgenZhbCAqbmV3OworICAgIHplbmRfb2JqZWN0X3ZhbHVlIG9s ZHZhbHVlID0gZGF0ZV9vYmplY3RfY2xvbmVfZGF0ZShvbGQpOworCisgICAgTUFLRV9TVERfWlZB TChuZXcpOworICAgIFpfVFlQRV9QKG5ldykgPSBJU19PQkpFQ1Q7CisgICAgWl9PQkpWQUxfUChu ZXcpID0gb2xkdmFsdWU7CisKKyAgICByZXR1cm4gbmV3OworfQorCiBzdGF0aWMgemVuZF9vYmpl Y3RfdmFsdWUgZGF0ZV9vYmplY3RfY2xvbmVfZGF0ZSh6dmFsICp0aGlzX3B0ciBUU1JNTFNfREMp CiB7CiAJcGhwX2RhdGVfb2JqICpuZXdfb2JqID0gTlVMTDsKQEAgLTIzNzIsNyArMjM4OSw3IEBA CiAJREFURUcobGFzdF9lcnJvcnMpID0gbGFzdF9lcnJvcnM7CiB9CiAKLVBIUEFQSSBpbnQgcGhw X2RhdGVfaW5pdGlhbGl6ZShwaHBfZGF0ZV9vYmogKmRhdGVvYmosIC8qY29uc3QqLyBjaGFyICp0 aW1lX3N0ciwgaW50IHRpbWVfc3RyX2xlbiwgY2hhciAqZm9ybWF0LCB6dmFsICp0aW1lem9uZV9v YmplY3QsIGludCBjdG9yIFRTUk1MU19EQykKK1BIUEFQSSBpbnQgcGhwX2RhdGVfaW5pdGlhbGl6 ZShwaHBfZGF0ZV9vYmogKmRhdGVvYmosIC8qY29uc3QqLyBjaGFyICp0aW1lX3N0ciwgaW50IHRp bWVfc3RyX2xlbiwgY2hhciAqZm9ybWF0LCB6dmFsICp0aW1lem9uZV9vYmplY3QsIHplbmRfYm9v bCBpbW11dGFibGVfZmxhZywgaW50IGN0b3IgVFNSTUxTX0RDKQogewogCXRpbWVsaWJfdGltZSAg ICpub3c7CiAJdGltZWxpYl90emluZm8gKnR6aTsKQEAgLTIzOTAsNiArMjQwNyw4IEBACiAJCWRh dGVvYmotPnRpbWUgPSB0aW1lbGliX3N0cnRvdGltZSh0aW1lX3N0cl9sZW4gPyB0aW1lX3N0ciA6 ICJub3ciLCB0aW1lX3N0cl9sZW4gPyB0aW1lX3N0cl9sZW4gOiBzaXplb2YoIm5vdyIpIC0xLCAm ZXJyLCBEQVRFX1RJTUVaT05FREIpOwogCX0KIAorICAgICAgICBkYXRlb2JqLT5pbW11dGFibGUg PSBpbW11dGFibGVfZmxhZzsKKwogCS8qIHVwZGF0ZSBsYXN0IGVycm9ycyBhbmQgd2FybmluZ3Mg Ki8KIAl1cGRhdGVfZXJyb3JzX3dhcm5pbmdzKGVyciBUU1JNTFNfQ0MpOwogCkBAIC0yNDU5LDE2 ICsyNDc4LDE3IEBACiAqLwogUEhQX0ZVTkNUSU9OKGRhdGVfY3JlYXRlKQogeworICAgICAgICB6 ZW5kX2Jvb2wgICAgICBpbW11dGFibGVfZmxhZyA9IDA7CiAJenZhbCAgICAgICAgICAgKnRpbWV6 b25lX29iamVjdCA9IE5VTEw7CiAJY2hhciAgICAgICAgICAgKnRpbWVfc3RyID0gTlVMTDsKIAlp bnQgICAgICAgICAgICAgdGltZV9zdHJfbGVuID0gMDsKIAotCWlmICh6ZW5kX3BhcnNlX3BhcmFt ZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgInxzTyIsICZ0aW1lX3N0ciwgJnRpbWVf c3RyX2xlbiwgJnRpbWV6b25lX29iamVjdCwgZGF0ZV9jZV90aW1lem9uZSkgPT0gRkFJTFVSRSkg eworCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywg InxzT2IiLCAmdGltZV9zdHIsICZ0aW1lX3N0cl9sZW4sICZ0aW1lem9uZV9vYmplY3QsIGRhdGVf Y2VfdGltZXpvbmUsICZpbW11dGFibGVfZmxhZykgPT0gRkFJTFVSRSkgewogCQlSRVRVUk5fRkFM U0U7CiAJfQogCiAJcGhwX2RhdGVfaW5zdGFudGlhdGUoZGF0ZV9jZV9kYXRlLCByZXR1cm5fdmFs dWUgVFNSTUxTX0NDKTsKLQlpZiAoIXBocF9kYXRlX2luaXRpYWxpemUoemVuZF9vYmplY3Rfc3Rv cmVfZ2V0X29iamVjdChyZXR1cm5fdmFsdWUgVFNSTUxTX0NDKSwgdGltZV9zdHIsIHRpbWVfc3Ry X2xlbiwgTlVMTCwgdGltZXpvbmVfb2JqZWN0LCAwIFRTUk1MU19DQykpIHsKKwlpZiAoIXBocF9k YXRlX2luaXRpYWxpemUoemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChyZXR1cm5fdmFsdWUg VFNSTUxTX0NDKSwgdGltZV9zdHIsIHRpbWVfc3RyX2xlbiwgTlVMTCwgdGltZXpvbmVfb2JqZWN0 LCBpbW11dGFibGVfZmxhZywgMCBUU1JNTFNfQ0MpKSB7CiAJCVJFVFVSTl9GQUxTRTsKIAl9CiB9 CkBAIC0yNDc5LDE2ICsyNDk5LDE3IEBACiAqLwogUEhQX0ZVTkNUSU9OKGRhdGVfY3JlYXRlX2Zy b21fZm9ybWF0KQogeworICAgICAgICB6ZW5kX2Jvb2wgICAgICBpbW11dGFibGVfZmxhZyA9IDA7 CiAJenZhbCAgICAgICAgICAgKnRpbWV6b25lX29iamVjdCA9IE5VTEw7CiAJY2hhciAgICAgICAg ICAgKnRpbWVfc3RyID0gTlVMTCwgKmZvcm1hdF9zdHIgPSBOVUxMOwogCWludCAgICAgICAgICAg ICB0aW1lX3N0cl9sZW4gPSAwLCBmb3JtYXRfc3RyX2xlbiA9IDA7CiAKLQlpZiAoemVuZF9wYXJz ZV9wYXJhbWV0ZXJzKFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsICJzc3xPIiwgJmZvcm1hdF9z dHIsICZmb3JtYXRfc3RyX2xlbiwgJnRpbWVfc3RyLCAmdGltZV9zdHJfbGVuLCAmdGltZXpvbmVf b2JqZWN0LCBkYXRlX2NlX3RpbWV6b25lKSA9PSBGQUlMVVJFKSB7CisJaWYgKHplbmRfcGFyc2Vf cGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAic3N8T2IiLCAmZm9ybWF0X3N0 ciwgJmZvcm1hdF9zdHJfbGVuLCAmdGltZV9zdHIsICZ0aW1lX3N0cl9sZW4sICZ0aW1lem9uZV9v YmplY3QsIGRhdGVfY2VfdGltZXpvbmUsICZpbW11dGFibGVfZmxhZykgPT0gRkFJTFVSRSkgewog CQlSRVRVUk5fRkFMU0U7CiAJfQogCiAJcGhwX2RhdGVfaW5zdGFudGlhdGUoZGF0ZV9jZV9kYXRl LCByZXR1cm5fdmFsdWUgVFNSTUxTX0NDKTsKLQlpZiAoIXBocF9kYXRlX2luaXRpYWxpemUoemVu ZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChyZXR1cm5fdmFsdWUgVFNSTUxTX0NDKSwgdGltZV9z dHIsIHRpbWVfc3RyX2xlbiwgZm9ybWF0X3N0ciwgdGltZXpvbmVfb2JqZWN0LCAwIFRTUk1MU19D QykpIHsKKwlpZiAoIXBocF9kYXRlX2luaXRpYWxpemUoemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29i amVjdChyZXR1cm5fdmFsdWUgVFNSTUxTX0NDKSwgdGltZV9zdHIsIHRpbWVfc3RyX2xlbiwgZm9y bWF0X3N0ciwgdGltZXpvbmVfb2JqZWN0LCBpbW11dGFibGVfZmxhZywgMCBUU1JNTFNfQ0MpKSB7 CiAJCVJFVFVSTl9GQUxTRTsKIAl9CiB9CkBAIC0yNDk5LDE0ICsyNTIwLDE1IEBACiAqLwogUEhQ X01FVEhPRChEYXRlVGltZSwgX19jb25zdHJ1Y3QpCiB7CisgICAgICAgIHplbmRfYm9vbCBpbW11 dGFibGVfZmxhZyA9IDA7CiAJenZhbCAqdGltZXpvbmVfb2JqZWN0ID0gTlVMTDsKIAljaGFyICp0 aW1lX3N0ciA9IE5VTEw7CiAJaW50IHRpbWVfc3RyX2xlbiA9IDA7CiAJemVuZF9lcnJvcl9oYW5k bGluZyBlcnJvcl9oYW5kbGluZzsKIAogCXplbmRfcmVwbGFjZV9lcnJvcl9oYW5kbGluZyhFSF9U SFJPVywgTlVMTCwgJmVycm9yX2hhbmRsaW5nIFRTUk1MU19DQyk7Ci0JaWYgKFNVQ0NFU1MgPT0g emVuZF9wYXJzZV9wYXJhbWV0ZXJzKFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsICJ8c08iLCAm dGltZV9zdHIsICZ0aW1lX3N0cl9sZW4sICZ0aW1lem9uZV9vYmplY3QsIGRhdGVfY2VfdGltZXpv bmUpKSB7Ci0JCXBocF9kYXRlX2luaXRpYWxpemUoemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVj dChnZXRUaGlzKCkgVFNSTUxTX0NDKSwgdGltZV9zdHIsIHRpbWVfc3RyX2xlbiwgTlVMTCwgdGlt ZXpvbmVfb2JqZWN0LCAxIFRTUk1MU19DQyk7CisJaWYgKFNVQ0NFU1MgPT0gemVuZF9wYXJzZV9w YXJhbWV0ZXJzKFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsICJ8c09iIiwgJnRpbWVfc3RyLCAm dGltZV9zdHJfbGVuLCAmdGltZXpvbmVfb2JqZWN0LCBkYXRlX2NlX3RpbWV6b25lLCAmaW1tdXRh YmxlX2ZsYWcpKSB7CisJCXBocF9kYXRlX2luaXRpYWxpemUoemVuZF9vYmplY3Rfc3RvcmVfZ2V0 X29iamVjdChnZXRUaGlzKCkgVFNSTUxTX0NDKSwgdGltZV9zdHIsIHRpbWVfc3RyX2xlbiwgTlVM TCwgdGltZXpvbmVfb2JqZWN0LCBpbW11dGFibGVfZmxhZywgMSBUU1JNTFNfQ0MpOwogCX0KIAl6 ZW5kX3Jlc3RvcmVfZXJyb3JfaGFuZGxpbmcoJmVycm9yX2hhbmRsaW5nIFRTUk1MU19DQyk7CiB9 CkBAIC0yNTMzLDcgKzI1NTUsNyBAQAogCQkJCQljYXNlIFRJTUVMSUJfWk9ORVRZUEVfQUJCUjog ewogCQkJCQkJY2hhciAqdG1wID0gZW1hbGxvYyhaX1NUUkxFTl9QUCh6X2RhdGUpICsgWl9TVFJM RU5fUFAoel90aW1lem9uZSkgKyAyKTsKIAkJCQkJCXNucHJpbnRmKHRtcCwgWl9TVFJMRU5fUFAo el9kYXRlKSArIFpfU1RSTEVOX1BQKHpfdGltZXpvbmUpICsgMiwgIiVzICVzIiwgWl9TVFJWQUxf UFAoel9kYXRlKSwgWl9TVFJWQUxfUFAoel90aW1lem9uZSkpOwotCQkJCQkJcGhwX2RhdGVfaW5p dGlhbGl6ZSgqZGF0ZW9iaiwgdG1wLCBaX1NUUkxFTl9QUCh6X2RhdGUpICsgWl9TVFJMRU5fUFAo el90aW1lem9uZSkgKyAxLCBOVUxMLCBOVUxMLCAwIFRTUk1MU19DQyk7CisJCQkJCQlwaHBfZGF0 ZV9pbml0aWFsaXplKCpkYXRlb2JqLCB0bXAsIFpfU1RSTEVOX1BQKHpfZGF0ZSkgKyBaX1NUUkxF Tl9QUCh6X3RpbWV6b25lKSArIDEsIE5VTEwsIE5VTEwsIDAsIDAgVFNSTUxTX0NDKTsKIAkJCQkJ CWVmcmVlKHRtcCk7CiAJCQkJCQlyZXR1cm4gMTsKIAkJCQkJfQpAQCAtMjU0OSw3ICsyNTcxLDcg QEAKIAkJCQkJCXR6b2JqLT50emkudHogPSB0emk7CiAJCQkJCQl0em9iai0+aW5pdGlhbGl6ZWQg PSAxOwogCi0JCQkJCQlwaHBfZGF0ZV9pbml0aWFsaXplKCpkYXRlb2JqLCBaX1NUUlZBTF9QUCh6 X2RhdGUpLCBaX1NUUkxFTl9QUCh6X2RhdGUpLCBOVUxMLCB0bXBfb2JqLCAwIFRTUk1MU19DQyk7 CisJCQkJCQlwaHBfZGF0ZV9pbml0aWFsaXplKCpkYXRlb2JqLCBaX1NUUlZBTF9QUCh6X2RhdGUp LCBaX1NUUkxFTl9QUCh6X2RhdGUpLCBOVUxMLCB0bXBfb2JqLCAwLCAwIFRTUk1MU19DQyk7CiAJ CQkJCQl6dmFsX3B0cl9kdG9yKCZ0bXBfb2JqKTsKIAkJCQkJCXJldHVybiAxOwogCQkJCX0KQEAg LTI3ODAsNiArMjgwMiwxMSBAQAogCQlSRVRVUk5fRkFMU0U7CiAJfQogCWRhdGVvYmogPSAocGhw X2RhdGVfb2JqICopIHplbmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3Qob2JqZWN0IFRTUk1MU19D Qyk7CisgICAgICAgIGlmIChkYXRlb2JqLT5pbW11dGFibGUpIHsKKyAgICAgICAgICAgIG9iamVj dCA9IGRhdGVfb2JqZWN0X2Nsb25lKG9iamVjdCk7CisgICAgICAgICAgICBkYXRlb2JqID0gKHBo cF9kYXRlX29iaiAqKSB6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KG9iamVjdCBUU1JNTFNf Q0MpOworICAgICAgICB9CisKIAlEQVRFX0NIRUNLX0lOSVRJQUxJWkVEKGRhdGVvYmotPnRpbWUs IERhdGVUaW1lKTsKIAogCXRtcF90aW1lID0gdGltZWxpYl9zdHJ0b3RpbWUobW9kaWZ5LCBtb2Rp ZnlfbGVuLCAmZXJyLCBEQVRFX1RJTUVaT05FREIpOwpAQCAtMjgwNyw2ICsyODM0LDggQEAKIH0K IC8qIH19fSAqLwogCisKKwogLyoge3t7IHByb3RvIERhdGVUaW1lIGRhdGVfYWRkKERhdGVUaW1l IG9iamVjdCwgRGF0ZUludGVydmFsIGludGVydmFsKQogICAgQWRkcyBhbiBpbnRlcnZhbCB0byB0 aGUgY3VycmVudCBkYXRlIGluIG9iamVjdC4KICovCkBAIC0yODIxLDExICsyODUwLDE1IEBACiAJ CVJFVFVSTl9GQUxTRTsKIAl9CiAJZGF0ZW9iaiA9IChwaHBfZGF0ZV9vYmogKikgemVuZF9vYmpl Y3Rfc3RvcmVfZ2V0X29iamVjdChvYmplY3QgVFNSTUxTX0NDKTsKKyAgICAgICAgaWYgKGRhdGVv YmotPmltbXV0YWJsZSkgeworICAgICAgICAgICAgb2JqZWN0ID0gZGF0ZV9vYmplY3RfY2xvbmUo b2JqZWN0KTsKKyAgICAgICAgICAgIGRhdGVvYmogPSAocGhwX2RhdGVfb2JqICopIHplbmRfb2Jq ZWN0X3N0b3JlX2dldF9vYmplY3Qob2JqZWN0IFRTUk1MU19DQyk7CisgICAgICAgIH0KKwogCURB VEVfQ0hFQ0tfSU5JVElBTElaRUQoZGF0ZW9iai0+dGltZSwgRGF0ZVRpbWUpOwogCWludG9iaiA9 IChwaHBfaW50ZXJ2YWxfb2JqICopIHplbmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3QoaW50ZXJ2 YWwgVFNSTUxTX0NDKTsKIAlEQVRFX0NIRUNLX0lOSVRJQUxJWkVEKGludG9iai0+aW5pdGlhbGl6 ZWQsIERhdGVJbnRlcnZhbCk7CiAKLQogCWlmIChpbnRvYmotPmRpZmYtPmhhdmVfd2Vla2RheV9y ZWxhdGl2ZSB8fCBpbnRvYmotPmRpZmYtPmhhdmVfc3BlY2lhbF9yZWxhdGl2ZSkgewogCQltZW1j cHkoJmRhdGVvYmotPnRpbWUtPnJlbGF0aXZlLCBpbnRvYmotPmRpZmYsIHNpemVvZihzdHJ1Y3Qg dGltZWxpYl9yZWxfdGltZSkpOwogCX0gZWxzZSB7CkBAIC0yODY2LDYgKzI4OTksMTEgQEAKIAkJ UkVUVVJOX0ZBTFNFOwogCX0KIAlkYXRlb2JqID0gKHBocF9kYXRlX29iaiAqKSB6ZW5kX29iamVj dF9zdG9yZV9nZXRfb2JqZWN0KG9iamVjdCBUU1JNTFNfQ0MpOworICAgICAgICBpZiAoZGF0ZW9i ai0+aW1tdXRhYmxlKSB7CisgICAgICAgICAgICBvYmplY3QgPSBkYXRlX29iamVjdF9jbG9uZShv YmplY3QpOworICAgICAgICAgICAgZGF0ZW9iaiA9IChwaHBfZGF0ZV9vYmogKikgemVuZF9vYmpl Y3Rfc3RvcmVfZ2V0X29iamVjdChvYmplY3QgVFNSTUxTX0NDKTsKKyAgICAgICAgfQorCiAJREFU RV9DSEVDS19JTklUSUFMSVpFRChkYXRlb2JqLT50aW1lLCBEYXRlVGltZSk7CiAJaW50b2JqID0g KHBocF9pbnRlcnZhbF9vYmogKikgemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChpbnRlcnZh bCBUU1JNTFNfQ0MpOwogCURBVEVfQ0hFQ0tfSU5JVElBTElaRUQoaW50b2JqLT5pbml0aWFsaXpl ZCwgRGF0ZUludGVydmFsKTsKQEAgLTI5NTEsNiArMjk4OSwxMCBAQAogCQlSRVRVUk5fRkFMU0U7 CiAJfQogCWRhdGVvYmogPSAocGhwX2RhdGVfb2JqICopIHplbmRfb2JqZWN0X3N0b3JlX2dldF9v YmplY3Qob2JqZWN0IFRTUk1MU19DQyk7CisgICAgICAgIGlmIChkYXRlb2JqLT5pbW11dGFibGUp IHsKKyAgICAgICAgICAgIG9iamVjdCA9IGRhdGVfb2JqZWN0X2Nsb25lKG9iamVjdCk7CisgICAg ICAgICAgICBkYXRlb2JqID0gKHBocF9kYXRlX29iaiAqKSB6ZW5kX29iamVjdF9zdG9yZV9nZXRf b2JqZWN0KG9iamVjdCBUU1JNTFNfQ0MpOworICAgICAgICB9CiAJREFURV9DSEVDS19JTklUSUFM SVpFRChkYXRlb2JqLT50aW1lLCBEYXRlVGltZSk7CiAJdHpvYmogPSAocGhwX3RpbWV6b25lX29i aiAqKSB6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KHRpbWV6b25lX29iamVjdCBUU1JNTFNf Q0MpOwogCWlmICh0em9iai0+dHlwZSAhPSBUSU1FTElCX1pPTkVUWVBFX0lEKSB7CkBAIC0zMDEy LDYgKzMwNTQsMTEgQEAKIAkJUkVUVVJOX0ZBTFNFOwogCX0KIAlkYXRlb2JqID0gKHBocF9kYXRl X29iaiAqKSB6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KG9iamVjdCBUU1JNTFNfQ0MpOwor ICAgICAgICBpZiAoZGF0ZW9iai0+aW1tdXRhYmxlKSB7CisgICAgICAgICAgICBvYmplY3QgPSBk YXRlX29iamVjdF9jbG9uZShvYmplY3QpOworICAgICAgICAgICAgZGF0ZW9iaiA9IChwaHBfZGF0 ZV9vYmogKikgemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChvYmplY3QgVFNSTUxTX0NDKTsK KyAgICAgICAgfQorCiAJREFURV9DSEVDS19JTklUSUFMSVpFRChkYXRlb2JqLT50aW1lLCBEYXRl VGltZSk7CiAJZGF0ZW9iai0+dGltZS0+aCA9IGg7CiAJZGF0ZW9iai0+dGltZS0+aSA9IGk7CkBA IC0zMDM1LDYgKzMwODIsMTAgQEAKIAkJUkVUVVJOX0ZBTFNFOwogCX0KIAlkYXRlb2JqID0gKHBo cF9kYXRlX29iaiAqKSB6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KG9iamVjdCBUU1JNTFNf Q0MpOworICAgICAgICBpZiAoZGF0ZW9iai0+aW1tdXRhYmxlKSB7CisgICAgICAgICAgICBvYmpl Y3QgPSBkYXRlX29iamVjdF9jbG9uZShvYmplY3QpOworICAgICAgICAgICAgZGF0ZW9iaiA9IChw aHBfZGF0ZV9vYmogKikgemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChvYmplY3QgVFNSTUxT X0NDKTsKKyAgICAgICAgfQogCURBVEVfQ0hFQ0tfSU5JVElBTElaRUQoZGF0ZW9iai0+dGltZSwg RGF0ZVRpbWUpOwogCWRhdGVvYmotPnRpbWUtPnkgPSB5OwogCWRhdGVvYmotPnRpbWUtPm0gPSBt OwpAQCAtMzA1OCw2ICszMTA5LDExIEBACiAJCVJFVFVSTl9GQUxTRTsKIAl9CiAJZGF0ZW9iaiA9 IChwaHBfZGF0ZV9vYmogKikgemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChvYmplY3QgVFNS TUxTX0NDKTsKKyAgICAgICAgaWYgKGRhdGVvYmotPmltbXV0YWJsZSkgeworICAgICAgICAgICAg b2JqZWN0ID0gZGF0ZV9vYmplY3RfY2xvbmUob2JqZWN0KTsKKyAgICAgICAgICAgIGRhdGVvYmog PSAocGhwX2RhdGVfb2JqICopIHplbmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3Qob2JqZWN0IFRT Uk1MU19DQyk7CisgICAgICAgIH0KKwogCURBVEVfQ0hFQ0tfSU5JVElBTElaRUQoZGF0ZW9iai0+ dGltZSwgRGF0ZVRpbWUpOwogCWRhdGVvYmotPnRpbWUtPnkgPSB5OwogCWRhdGVvYmotPnRpbWUt Pm0gPSAxOwpAQCAtMzA4NCw2ICszMTQwLDEwIEBACiAJCVJFVFVSTl9GQUxTRTsKIAl9CiAJZGF0 ZW9iaiA9IChwaHBfZGF0ZV9vYmogKikgemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChvYmpl Y3QgVFNSTUxTX0NDKTsKKyAgICAgICAgaWYgKGRhdGVvYmotPmltbXV0YWJsZSkgeworICAgICAg ICAgICAgb2JqZWN0ID0gZGF0ZV9vYmplY3RfY2xvbmUob2JqZWN0KTsKKyAgICAgICAgICAgIGRh dGVvYmogPSAocGhwX2RhdGVfb2JqICopIHplbmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3Qob2Jq ZWN0IFRTUk1MU19DQyk7CisgICAgICAgIH0KIAlEQVRFX0NIRUNLX0lOSVRJQUxJWkVEKGRhdGVv YmotPnRpbWUsIERhdGVUaW1lKTsKIAl0aW1lbGliX3VuaXh0aW1lMmxvY2FsKGRhdGVvYmotPnRp bWUsICh0aW1lbGliX3NsbCl0aW1lc3RhbXApOwogCXRpbWVsaWJfdXBkYXRlX3RzKGRhdGVvYmot PnRpbWUsIE5VTEwpOwpAQCAtMzc1NCw2ICszODE0LDkgQEAKIAkJaWYgKGRhdGVvYmotPnRpbWUt PnR6X2luZm8pIHsKIAkJCWNsb25lLT50el9pbmZvID0gZGF0ZW9iai0+dGltZS0+dHpfaW5mbzsK IAkJfQorICAgICAgICAgICAgICAgIGlmIChkYXRlb2JqLT5pbW11dGFibGUpIHsKKyAgICAgICAg ICAgICAgICAgICAgZHBvYmotPmltbXV0YWJsZSA9IDE7CisgICAgICAgICAgICAgICAgfQogCQlk cG9iai0+c3RhcnQgPSBjbG9uZTsKIAogCQkvKiBpbnRlcnZhbCAqLwpJbmRleDogZXh0L2RhdGUv cGhwX2RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBleHQvZGF0ZS9waHBfZGF0ZS5oCShyZXZpc2lvbiAz MDU5NjUpCisrKyBleHQvZGF0ZS9waHBfZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiAr MTExLDcgQEAKIAl6ZW5kX29iamVjdCAgIHN0ZDsKIAl0aW1lbGliX3RpbWUgKnRpbWU7CiAJSGFz aFRhYmxlICAgICpwcm9wczsKKyAgICAgICAgaW50ICAgICAgICAgIGltbXV0YWJsZTsKIH07CiAK IHN0cnVjdCBfcGhwX3RpbWV6b25lX29iaiB7CkBAIC0xNDIsNiArMTQzLDcgQEAKIAl0aW1lbGli X3RpbWUgICAgICpjdXJyZW50OwogCXRpbWVsaWJfdGltZSAgICAgKmVuZDsKIAl0aW1lbGliX3Jl bF90aW1lICppbnRlcnZhbDsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgaW1tdXRhYmxlOwog CWludCAgICAgICAgICAgICAgIHJlY3VycmVuY2VzOwogCWludCAgICAgICAgICAgICAgIGluaXRp YWxpemVkOwogCWludCAgICAgICAgICAgICAgIGluY2x1ZGVfc3RhcnRfZGF0ZTsKQEAgLTE4MCw3 ICsxODIsNyBAQAogCiAvKiBGdW5jdGlvbnMgZm9yIGNyZWF0aW5nIERhdGVUaW1lIG9iamVjdHMs IGFuZCBpbml0aWFsaXppbmcgdGhlbSBmcm9tIGEgc3RyaW5nICovCiBQSFBBUEkgenZhbCAqcGhw X2RhdGVfaW5zdGFudGlhdGUoemVuZF9jbGFzc19lbnRyeSAqcGNlLCB6dmFsICpvYmplY3QgVFNS TUxTX0RDKTsKLVBIUEFQSSBpbnQgcGhwX2RhdGVfaW5pdGlhbGl6ZShwaHBfZGF0ZV9vYmogKmRh dGVvYmosIC8qY29uc3QqLyBjaGFyICp0aW1lX3N0ciwgaW50IHRpbWVfc3RyX2xlbiwgY2hhciAq Zm9ybWF0LCB6dmFsICp0aW1lem9uZV9vYmplY3QsIGludCBjdG9yIFRTUk1MU19EQyk7CitQSFBB UEkgaW50IHBocF9kYXRlX2luaXRpYWxpemUocGhwX2RhdGVfb2JqICpkYXRlb2JqLCAvKmNvbnN0 Ki8gY2hhciAqdGltZV9zdHIsIGludCB0aW1lX3N0cl9sZW4sIGNoYXIgKmZvcm1hdCwgenZhbCAq dGltZXpvbmVfb2JqZWN0LCB6ZW5kX2Jvb2wgaW1tdXRhYmxlRmxhZywgaW50IGN0b3IgVFNSTUxT X0RDKTsKIAogCiAjZW5kaWYgLyogUEhQX0RBVEVfSCAqLwo= --=_5109fc07da9b3412d513b2f649e23a25--