[PHP-dev 90] [patch] Async query interface for pgsql

Yasuo Ohgaki php-dev@php.gr.jp
Sun, 04 Nov 2001 03:39:02 +0900


This is a multi-part message in MIME format.
--------------040507030405040102080701
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

大垣です。

pgsqlにAsync query interfaceが無かったので書きました。(4.2.0-dev用)
簡単なwrapper functionなので、使い方さえ間違えなければ問題ありません。
(persistent connectionで利用するのは、きちんと理解して利用しないと
問題があります。)

使い方はlibpqのマニュアルを参照してください。
http://www.postgresql.org/idocs/index.php?libpq-async.html
他のpg_*と同じで、lipqpのPQ*のwrapper functionになっています。

問題があった場合は直すのでメールしてください。

--
Yasuo Ohgaki

--------------040507030405040102080701
Content-Type: text/plain;
 name="pgsql_async_query.diff"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="pgsql_async_query.diff"

SW5kZXg6IHBnc3FsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvcGhw
NC9leHQvcGdzcWwvcGdzcWwuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMzAKZGlmZiAt
dSAtcjEuMTMwIHBnc3FsLmMKLS0tIHBnc3FsLmMJMTEgT2N0IDIwMDEgMjM6MzM6NDAgLTAw
MDAJMS4xMzAKKysrIHBnc3FsLmMJMyBOb3YgMjAwMSAxODoxOToyMCAtMDAwMApAQCAtOTQs
NiArOTQsMTcgQEAKIAlQSFBfRkFMSUFTKHBnX2NsaWVudGVuY29kaW5nLAkJcGdfY2xpZW50
X2VuY29kaW5nLAkJCU5VTEwpCiAJUEhQX0ZBTElBUyhwZ19zZXRjbGllbnRlbmNvZGluZywJ
cGdfc2V0X2NsaWVudF9lbmNvZGluZywJTlVMTCkKICNlbmRpZgorCS8qIGFzeW5jcm9ub3Vz
IHF1ZXJ5IGludGVyZmFjZSAqLworCVBIUF9GRShwZ19zZW5kcXVlcnksICAgICAgTlVMTCkK
KwlQSFBfRkUocGdfc2V0bm9uYmxvY2tpbmcsIE5VTEwpCisJUEhQX0ZFKHBnX2lzbm9uYmxv
Y2tpbmcsICBOVUxMKQorCVBIUF9GRShwZ19nZXRyZXN1bHQsICAgICAgTlVMTCkKKwlQSFBf
RkUocGdfaXNidXN5LCAgICAgICAgIE5VTEwpCisJUEhQX0ZFKHBnX2ZsdXNoLCAgICAgICAg
ICBOVUxMKQorCVBIUF9GRShwZ19zb2NrZXQsICAgICAgICAgTlVMTCkKKwlQSFBfRkUocGdf
Y29uc3VtZWlucHV0LCAgIE5VTEwpCisJUEhQX0ZFKHBnX3JlcXVlc3RjYW5jZWwsICBOVUxM
KQorCVBIUF9GRShwZ19ub3RpZmllcywgICAgICAgTlVMTCkKIAl7TlVMTCwgTlVMTCwgTlVM
TH0KIH07CiAvKiB9fX0gKi8KQEAgLTE5NSw4ICsyMDYsOSBAQAogCQogCVBHRyhpZ25vcmVf
bm90aWNlcykgPSAxOwogCVBRZXhlYyhsaW5rLCJCRUdJTjtST0xMQkFDSzsiKTsKKwlQUWZs
dXNoKGxpbmspOwogCVBHRyhpZ25vcmVfbm90aWNlcykgPSAwOwotCisJCiAJcmV0dXJuIDA7
CiB9CiAvKiB9fX0gKi8KQEAgLTIyNiw3ICsyMzgsOCBAQAogUEhQX0lOSV9CRUdJTigpCiAJ
U1REX1BIUF9JTklfQk9PTEVBTigicGdzcWwuYWxsb3dfcGVyc2lzdGVudCIsCSIxIiwJUEhQ
X0lOSV9TWVNURU0sCQlPblVwZGF0ZUludCwJCWFsbG93X3BlcnNpc3RlbnQsCXBocF9wZ3Nx
bF9nbG9iYWxzLAkJcGdzcWxfZ2xvYmFscykKIAlTVERfUEhQX0lOSV9FTlRSWV9FWCgicGdz
cWwubWF4X3BlcnNpc3RlbnQiLAkiLTEiLAlQSFBfSU5JX1NZU1RFTSwJCU9uVXBkYXRlSW50
LAkJbWF4X3BlcnNpc3RlbnQsCQlwaHBfcGdzcWxfZ2xvYmFscywJCXBnc3FsX2dsb2JhbHMs
CWRpc3BsYXlfbGlua19udW1iZXJzKQotCVNURF9QSFBfSU5JX0VOVFJZX0VYKCJwZ3NxbC5t
YXhfbGlua3MiLAkJIi0xIiwJUEhQX0lOSV9TWVNURU0sCQkJT25VcGRhdGVJbnQsCQltYXhf
bGlua3MsCQkJcGhwX3Bnc3FsX2dsb2JhbHMsCQlwZ3NxbF9nbG9iYWxzLAlkaXNwbGF5X2xp
bmtfbnVtYmVycykKKwlTVERfUEhQX0lOSV9FTlRSWV9FWCgicGdzcWwubWF4X2xpbmtzIiwJ
CSItMSIsCSAgICBQSFBfSU5JX1NZU1RFTSwJCU9uVXBkYXRlSW50LAkJbWF4X2xpbmtzLAkJ
CXBocF9wZ3NxbF9nbG9iYWxzLAkJcGdzcWxfZ2xvYmFscywJZGlzcGxheV9saW5rX251bWJl
cnMpCisJU1REX1BIUF9JTklfQk9PTEVBTigicGdzcWwuYWxsb3dfYXN5bmNfcGVyc2lzdGVu
dCIsCSIwIixQSFBfSU5JX1NZU1RFTSwJCU9uVXBkYXRlSW50LAkJYWxsb3dfYXN5bmNfcGVy
c2lzdGVudCwJcGhwX3Bnc3FsX2dsb2JhbHMsCXBnc3FsX2dsb2JhbHMpCiBQSFBfSU5JX0VO
RCgpCiAvKiB9fX0gKi8KIApAQCAtMTk2Miw3ICsxOTc1LDI5MSBAQAogfQogLyogfX19ICov
CiAjZW5kaWYKKworLyogRm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZm9yIGFzeW5jcm9ub3Vz
IHF1ZXJ5CisgICBOb3RlOiBJdCBpcyBQSFAgcHJvZ3JhbW1lcnMnIHJlc3BvbnNpYmlsdHkg
bWFraW5nIHN1cmUgZ2V0dGluZyBjb25zaXN0ZW50IHJlc3VsdAorICAgICAgICAgd2hlbiBh
c3luYyBxdWVyeSBmdW5jdGlvbiBpcyB1c2VkIGZvciBwZXJzaXN0ZW50IGNvbm5lY3Rpb24u
IAorKi8gCisKKyNkZWZpbmUgUEhQX1BHX0FTWU5DX0lTTk9OQkxPQ0tJTkcgMQorI2RlZmlu
ZSBQSFBfUEdfQVNZTkNfQ09OU1VNRUlOUFVUICAyCisjZGVmaW5lIFBIUF9QR19BU1lOQ19J
U0JVU1kgICAgICAgIDMKKyNkZWZpbmUgUEhQX1BHX0FTWU5DX0ZMVVNIICAgICAgICAgNAor
I2RlZmluZSBQSFBfUEdfQVNZTkNfUkVRVUVTVENBTkNFTCA1CisKK3ZvaWQgcGhwX3Bnc3Fs
X2FzeW5jX3F1ZXJ5KElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNRVRFUlMsIGludCB0eXBlKSAK
K3sKKwl6dmFsICoqcGdzcWxfbGluayA9IE5VTEw7CisJaW50IGlkID0gLTE7CisJUEdjb25u
ICpwZ3NxbDsKKworCXN3aXRjaChaRU5EX05VTV9BUkdTKCkpIHsKKwkJY2FzZSAwOgorCQkJ
aWQgPSBQR0coZGVmYXVsdF9saW5rKTsKKwkJCUNIRUNLX0RFRkFVTFRfTElOSyhpZCk7CisJ
CQlicmVhazsKKwkJY2FzZSAxOgorCQkJaWYgKHplbmRfZ2V0X3BhcmFtZXRlcnNfZXgoMSwg
JnBnc3FsX2xpbmspPT1GQUlMVVJFKSB7CisJCQkJUkVUVVJOX0ZBTFNFOworCQkJfQorCQkJ
YnJlYWs7CisJCWRlZmF1bHQ6CisJCQlXUk9OR19QQVJBTV9DT1VOVDsKKwkJCWJyZWFrOwor
CX0KKworCVpFTkRfRkVUQ0hfUkVTT1VSQ0UyKHBnc3FsLCBQR2Nvbm4gKiwgcGdzcWxfbGlu
aywgaWQsICJQb3N0Z3JlU1FMIGxpbmsiLCBsZV9saW5rLCBsZV9wbGluayk7CisKKwlzd2l0
Y2godHlwZSkgeworCQljYXNlIFBIUF9QR19BU1lOQ19JU05PTkJMT0NLSU5HOgorCQkJWl9M
VkFMX1AocmV0dXJuX3ZhbHVlKSA9IFBRaXNub25ibG9ja2luZyhwZ3NxbCk7CisJCQlaX1RZ
UEVfUChyZXR1cm5fdmFsdWUpID0gSVNfTE9ORzsKKwkJCWJyZWFrOworCQljYXNlIFBIUF9Q
R19BU1lOQ19DT05TVU1FSU5QVVQ6CisJCQlaX0xWQUxfUChyZXR1cm5fdmFsdWUpID0gUFFj
b25zdW1lSW5wdXQocGdzcWwpOworCQkJWl9UWVBFX1AocmV0dXJuX3ZhbHVlKSA9IElTX0xP
Tkc7CisJCQlicmVhazsKKwkJY2FzZSBQSFBfUEdfQVNZTkNfSVNCVVNZOgorCQkJWl9MVkFM
X1AocmV0dXJuX3ZhbHVlKSA9IFBRaXNCdXN5KHBnc3FsKTsKKwkJCVpfVFlQRV9QKHJldHVy
bl92YWx1ZSkgPSBJU19MT05HOworCQkJYnJlYWs7CisJCWNhc2UgUEhQX1BHX0FTWU5DX0ZM
VVNIOgorCQkJWl9MVkFMX1AocmV0dXJuX3ZhbHVlKSA9IFBRZmx1c2gocGdzcWwpOworCQkJ
Wl9UWVBFX1AocmV0dXJuX3ZhbHVlKSA9IElTX0xPTkc7CisJCWNhc2UgUEhQX1BHX0FTWU5D
X1JFUVVFU1RDQU5DRUw6CisJCQlaX0xWQUxfUChyZXR1cm5fdmFsdWUpID0gUFFyZXF1ZXN0
Q2FuY2VsKHBnc3FsKTsKKwkJCVpfVFlQRV9QKHJldHVybl92YWx1ZSkgPSBJU19MT05HOwor
CQlkZWZhdWx0OgorCQkJcGhwX2Vycm9yKEVfRVJST1IsIlBnc3FsIG1vZHVsZSBlcnJvci4g
UmVwb3J0IHRoaXMgZXJyb3IiKTsKKwkJCWJyZWFrOworCX0KKwljb252ZXJ0X3RvX2Jvb2xl
YW5fZXgoJnJldHVybl92YWx1ZSk7Cit9CisKKy8qIHt7eyBwcm90byBib29sIHBnX2NvbnN1
bWVpbnB1dChbcmVzb3VyY2UgY29ubmVjdGlvbl0pCisgICBDb25zdW1lIGlucHV0ICovCitQ
SFBfRlVOQ1RJT04ocGdfY29uc3VtZWlucHV0KQoreworCXBocF9wZ3NxbF9hc3luY19xdWVy
eShJTlRFUk5BTF9GVU5DVElPTl9QQVJBTV9QQVNTVEhSVSwgUEhQX1BHX0FTWU5DX0NPTlNV
TUVJTlBVVCk7Cit9CisvKiB9fX0gKi8KKworLyoge3t7IHByb3RvIGJvb2wgcGdfcmVxdWVz
dGNhbmNlbChbcmVzb3VyY2UgY29ubmVjdGlvbl0pCisgICBDYW5jZWwgcmVxdWVzdCAqLwor
UEhQX0ZVTkNUSU9OKHBnX3JlcXVlc3RjYW5jZWwpCit7CisJcGhwX3Bnc3FsX2FzeW5jX3F1
ZXJ5KElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNX1BBU1NUSFJVLCBQSFBfUEdfQVNZTkNfUkVR
VUVTVENBTkNFTCk7Cit9CisvKiB9fX0gKi8KKworLyoge3t7IHByb3RvIHF1ZXJ5IGJvb2wg
cGdfaXNidXN5KFtyZXNvdXJjZSBjb25uZWN0aW9uXSkKKyAgIEdldCBjb25uZWN0aW9uIGlz
IGJ1c3kgb3Igbm90ICovCitQSFBfRlVOQ1RJT04ocGdfaXNidXN5KQoreworCXBocF9wZ3Nx
bF9hc3luY19xdWVyeShJTlRFUk5BTF9GVU5DVElPTl9QQVJBTV9QQVNTVEhSVSwgUEhQX1BH
X0FTWU5DX0lTQlVTWSk7Cit9CisvKiB9fX0gKi8KKworLyoge3t7IHByb3RvIHF1ZXJ5IGJv
b2wgcGdfZmx1c2goW3Jlc291cmNlIGNvbm5lY3Rpb25dKQorICAgVHJ5IHRvIGZsdXNoIGFu
eSBkYXRhIGluIGJhY2tlbmQgKi8KK1BIUF9GVU5DVElPTihwZ19mbHVzaCkKK3sKKwlwaHBf
cGdzcWxfYXN5bmNfcXVlcnkoSU5URVJOQUxfRlVOQ1RJT05fUEFSQU1fUEFTU1RIUlUsIFBI
UF9QR19BU1lOQ19GTFVTSCk7Cit9CisvKiB9fX0gKi8KKworLyoge3t7IHByb3RvIGJvb2wg
cGdfaXNub25ibG9ja2luZyhbcmVzb3VyY2UgY29ubmVjdGlvbl0pCisgICBTZXQgYmxvY2sg
bW9kZSAqLworUEhQX0ZVTkNUSU9OKHBnX2lzbm9uYmxvY2tpbmcpCit7CisJcGhwX3Bnc3Fs
X2FzeW5jX3F1ZXJ5KElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNX1BBU1NUSFJVLCBQSFBfUEdf
QVNZTkNfSVNOT05CTE9DS0lORyk7Cit9CisKKy8qIHt7eyBwcm90byBib29sIHBnX3NldG5v
bmJsb2NraW5nKFtyZXNvdXJjZSBjb25uZWN0aW9uXSwgYm9vbCBmbGFnKQorICAgU2V0IGJs
b2NraW5nIG1vZGUgKi8KK1BIUF9GVU5DVElPTihwZ19zZXRub25ibG9ja2luZykKK3sKKyAg
ICB6dmFsICoqcGdzcWxfbGluayA9IE5VTEw7CisgICAgenZhbCAqKmZsYWc7CisgICAgaW50
IGlkID0gLTE7CisgICAgUEdjb25uICpwZ3NxbDsKKworICAgIHN3aXRjaChaRU5EX05VTV9B
UkdTKCkpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKHplbmRfZ2V0X3Bh
cmFtZXRlcnNfZXgoMSwgJmZsYWcpPT1GQUlMVVJFKSB7CisgICAgICAgICAgICAgICAgUkVU
VVJOX0ZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWQgPSBQR0coZGVmYXVs
dF9saW5rKTsKKyAgICAgICAgICAgIENIRUNLX0RFRkFVTFRfTElOSyhpZCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaWYgKHplbmRfZ2V0
X3BhcmFtZXRlcnNfZXgoMiwgJnBnc3FsX2xpbmssICZmbGFnKT09RkFJTFVSRSkgeworICAg
ICAgICAgICAgICAgIFJFVFVSTl9GQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNvbnZlcnRfdG9fYm9vbGVhbl9leChmbGFnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgV1JPTkdfUEFSQU1fQ09VTlQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBaRU5EX0ZFVENIX1JFU09VUkNFMihwZ3NxbCwg
UEdjb25uICosIHBnc3FsX2xpbmssIGlkLCAiUG9zdGdyZVNRTCBsaW5rIiwgbGVfbGluaywg
bGVfcGxpbmspOworCQorICAgIGNvbnZlcnRfdG9fbG9uZ19leChmbGFnKTsKKyAgICBpZiAo
UFFzZXRub25ibG9ja2luZyhwZ3NxbCwgWl9MVkFMX1BQKGZsYWcpKSkgeworICAgICAgICBS
RVRVUk5fRkFMU0U7CisgICAgfQorICAgIFJFVFVSTl9UUlVFOworfQorCisvKiB7e3sgcHJv
dG8gYm9vbCBwZ19zZW5kcXVlcnkoW3Jlc291cmNlIGNvbm5lY3Rpb25dLCBzdHJpbmcgcWV1
cnkpCisgICBTZW5kIGFzeW5jaHJvbm91cyBxdWVyeSAqLworUEhQX0ZVTkNUSU9OKHBnX3Nl
bmRxdWVyeSkKK3sKKwl6dmFsICoqcXVlcnksICoqcGdzcWxfbGluayA9IE5VTEw7CisJaW50
IGlkID0gLTE7CisJUEdjb25uICpwZ3NxbDsKKworCXN3aXRjaChaRU5EX05VTV9BUkdTKCkp
IHsKKwkJY2FzZSAxOgorCQkJaWYgKHplbmRfZ2V0X3BhcmFtZXRlcnNfZXgoMSwgJnF1ZXJ5
KT09RkFJTFVSRSkgeworCQkJCVJFVFVSTl9GQUxTRTsKKwkJCX0KKwkJCWlkID0gUEdHKGRl
ZmF1bHRfbGluayk7CisJCQlDSEVDS19ERUZBVUxUX0xJTksoaWQpOworCQkJYnJlYWs7CisJ
CWNhc2UgMjoKKwkJCWlmICh6ZW5kX2dldF9wYXJhbWV0ZXJzX2V4KDIsICZwZ3NxbF9saW5r
LCAmcXVlcnkpPT1GQUlMVVJFKSB7CisJCQkJUkVUVVJOX0ZBTFNFOworCQkJfQorCQkJYnJl
YWs7CisJCWRlZmF1bHQ6CisJCQlXUk9OR19QQVJBTV9DT1VOVDsKKwkJCWJyZWFrOworCX0K
IAkKKwlaRU5EX0ZFVENIX1JFU09VUkNFMihwZ3NxbCwgUEdjb25uICosIHBnc3FsX2xpbmss
IGlkLCAiUG9zdGdyZVNRTCBsaW5rIiwgbGVfbGluaywgbGVfcGxpbmspOworCQorCWNvbnZl
cnRfdG9fc3RyaW5nX2V4KHF1ZXJ5KTsKKwlpZiAoIVBRc2VuZFF1ZXJ5KHBnc3FsLCBaX1NU
UlZBTF9QUChxdWVyeSkpKSB7CisJCVJFVFVSTl9GQUxTRTsKKwl9CisJUkVUVVJOX1RSVUU7
Cit9CisvKiB9fX0gKi8KKworCisvKiB7e3sgcHJvdG8gcXVlcnkgcmVzb3VjZSBwZ19nZXRy
ZXN1bHQoW3Jlc291cmNlIGNvbm5lY3Rpb25dKQorICAgR2V0IGFzeW5jaHJvbm91cyBxdWVy
eSByZXN1bHQgKi8KK1BIUF9GVU5DVElPTihwZ19nZXRyZXN1bHQpCit7CisJenZhbCAqKnBn
c3FsX2xpbmsgPSBOVUxMOworCWludCBpZCA9IC0xOworCVBHY29ubiAqcGdzcWw7CisJUEdy
ZXN1bHQgKnBnc3FsX3Jlc3VsdDsKKwlwZ3NxbF9yZXN1bHRfaGFuZGxlICpwZ19yZXN1bHQ7
CisKKwlzd2l0Y2goWkVORF9OVU1fQVJHUygpKSB7CisJCWNhc2UgMDoKKwkJCWlkID0gUEdH
KGRlZmF1bHRfbGluayk7CisJCQlDSEVDS19ERUZBVUxUX0xJTksoaWQpOworCQkJYnJlYWs7
CisJCWNhc2UgMToKKwkJCWlmICh6ZW5kX2dldF9wYXJhbWV0ZXJzX2V4KDEsICZwZ3NxbF9s
aW5rKT09RkFJTFVSRSkgeworCQkJCVJFVFVSTl9GQUxTRTsKKwkJCX0KKwkJCWJyZWFrOwor
CQlkZWZhdWx0OgorCQkJV1JPTkdfUEFSQU1fQ09VTlQ7CisJCQlicmVhazsKKwl9CisKKwla
RU5EX0ZFVENIX1JFU09VUkNFMihwZ3NxbCwgUEdjb25uICosIHBnc3FsX2xpbmssIGlkLCAi
UG9zdGdyZVNRTCBsaW5rIiwgbGVfbGluaywgbGVfcGxpbmspOworCisJcGdzcWxfcmVzdWx0
ID0gUFFnZXRSZXN1bHQocGdzcWwpOworCQorCWlmIChwZ3NxbF9yZXN1bHQpIHsKKwkJcGdf
cmVzdWx0ID0gKHBnc3FsX3Jlc3VsdF9oYW5kbGUgKikgZW1hbGxvYyhzaXplb2YocGdzcWxf
cmVzdWx0X2hhbmRsZSkpOworCQlwZ19yZXN1bHQtPmNvbm4gPSBwZ3NxbDsKKwkJcGdfcmVz
dWx0LT5yZXN1bHQgPSBwZ3NxbF9yZXN1bHQ7CisJCXBnX3Jlc3VsdC0+cm93ID0gLTE7CisJ
CVpFTkRfUkVHSVNURVJfUkVTT1VSQ0UocmV0dXJuX3ZhbHVlLCBwZ19yZXN1bHQsIGxlX3Jl
c3VsdCk7CisJfSBlbHNlIHsKKwkJUkVUVVJOX0ZBTFNFOworCX0KK30KKy8qIH19fSAqLwor
CisvKiB7e3sgcHJvdG8gaW50IHBnX3NvY2tldChbcmVzb3VyY2UgY29ubmVjdGlvbl0pCisg
ICBSZXR1cm5zIGJhY2tlbmQncyBzb2tldCBudW1iZXIgKi8KK1BIUF9GVU5DVElPTihwZ19z
b2NrZXQpCit7CisJenZhbCAqKnBnc3FsX2xpbmsgPSBOVUxMOworCWludCBpZCA9IC0xOwor
CWludCBzb2NrID0gLTE7CisJUEdjb25uICpwZ3NxbDsKKworCXN3aXRjaChaRU5EX05VTV9B
UkdTKCkpIHsKKwkJY2FzZSAwOgorCQkJaWQgPSBQR0coZGVmYXVsdF9saW5rKTsKKwkJCUNI
RUNLX0RFRkFVTFRfTElOSyhpZCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaWYgKHpl
bmRfZ2V0X3BhcmFtZXRlcnNfZXgoMSwgJnBnc3FsX2xpbmspPT1GQUlMVVJFKSB7CisJCQkJ
UkVUVVJOX0ZBTFNFOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlXUk9OR19Q
QVJBTV9DT1VOVDsKKwkJCWJyZWFrOworCX0KKworCVpFTkRfRkVUQ0hfUkVTT1VSQ0UyKHBn
c3FsLCBQR2Nvbm4gKiwgcGdzcWxfbGluaywgaWQsICJQb3N0Z3JlU1FMIGxpbmsiLCBsZV9s
aW5rLCBsZV9wbGluayk7CisKKwlzb2NrID0gUFFzb2NrZXQocGdzcWwpOworCWlmIChzb2Nr
ID09IC0xKSB7CisJCVJFVFVSTl9GQUxTRTsKKwl9CisJWl9MVkFMX1AocmV0dXJuX3ZhbHVl
KSA9IHNvY2s7CisJWl9UWVBFX1AocmV0dXJuX3ZhbHVlKSA9IElTX0xPTkc7Cit9CisvKiB9
fX0gKi8KKworLyoge3t7IHByb3RvIHN0cmluZyBwZ19ub3RpZnkgcGdfbm90aWZpZXMoW3Jl
c291cmNlIGNvbm5lY3Rpb25dKQorICAgR2V0IG5vdGlmaWNhdGlvbiAqLworUEhQX0ZVTkNU
SU9OKHBnX25vdGlmaWVzKQoreworCXp2YWwgKipwZ3NxbF9saW5rID0gTlVMTDsKKwlpbnQg
aWQgPSAtMTsKKwlQR2Nvbm4gKnBnc3FsOworCVBHbm90aWZ5ICpub3RpY2U7CisKKwlzd2l0
Y2goWkVORF9OVU1fQVJHUygpKSB7CisJCWNhc2UgMDoKKwkJCWlkID0gUEdHKGRlZmF1bHRf
bGluayk7CisJCQlDSEVDS19ERUZBVUxUX0xJTksoaWQpOworCQkJYnJlYWs7CisJCWNhc2Ug
MToKKwkJCWlmICh6ZW5kX2dldF9wYXJhbWV0ZXJzX2V4KDEsICZwZ3NxbF9saW5rKT09RkFJ
TFVSRSkgeworCQkJCVJFVFVSTl9GQUxTRTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJV1JPTkdfUEFSQU1fQ09VTlQ7CisJCQlicmVhazsKKwl9CisKKwlaRU5EX0ZFVENI
X1JFU09VUkNFMihwZ3NxbCwgUEdjb25uICosIHBnc3FsX2xpbmssIGlkLCAiUG9zdGdyZVNR
TCBsaW5rIiwgbGVfbGluaywgbGVfcGxpbmspOworCisJbm90aWNlID0gUFFub3RpZmllcyhw
Z3NxbCk7CisJaWYgKCFub3RpY2UpIHsKKwkJUkVUVVJOX0ZBTFNFOworCX0KKwlaX1NUUkxF
Tl9QKHJldHVybl92YWx1ZSkgPSBzdHJsZW4obm90aWNlLT5yZWxuYW1lKTsKKwlaX1NUUlZB
TF9QKHJldHVybl92YWx1ZSkgPSAoY2hhciAqKWVzdHJuZHVwKG5vdGljZS0+cmVsbmFtZSwg
Wl9TVFJMRU5fUChyZXR1cm5fdmFsdWUpKTsKKwlaX1RZUEVfUChyZXR1cm5fdmFsdWUpID0g
SVNfU1RSSU5HOworfQorCiAjZW5kaWYKIAogLyoKSW5kZXg6IHBocF9wZ3NxbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L3BocDQvZXh0L3Bnc3FsL3BocF9wZ3Nx
bC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMzCmRpZmYgLXUgLXIxLjMzIHBocF9wZ3Nx
bC5oCi0tLSBwaHBfcGdzcWwuaAkyNiBTZXAgMjAwMSAyMTo0NDo0OCAtMDAwMAkxLjMzCisr
KyBwaHBfcGdzcWwuaAkzIE5vdiAyMDAxIDE4OjE5OjIxIC0wMDAwCkBAIC05NCw2ICs5NCwx
OCBAQAogUEhQX0ZVTkNUSU9OKHBnX2NsaWVudF9lbmNvZGluZyk7CiBQSFBfRlVOQ1RJT04o
cGdfc2V0X2NsaWVudF9lbmNvZGluZyk7CiAjZW5kaWYKKy8qIEFzeW5jaHJvbnVzIFF1ZXJ5
IEludGVyZmFzZQorICAgTm90ZTogVGhlc2UgYXJlIG5vdCB0aHJlYWQgc2FmZS4gU2VwYXJh
dGUgY29ubmVjdGlvbiBtdXN0IGJlIHVzZWQgaWYgbmVzc2VzYXJ5ICovCitQSFBfRlVOQ1RJ
T04ocGdfc2VuZHF1ZXJ5KTsKK1BIUF9GVU5DVElPTihwZ19zZXRub25ibG9ja2luZyk7CitQ
SFBfRlVOQ1RJT04ocGdfaXNub25ibG9ja2luZyk7CitQSFBfRlVOQ1RJT04ocGdfZ2V0cmVz
dWx0KTsKK1BIUF9GVU5DVElPTihwZ19pc2J1c3kpOworUEhQX0ZVTkNUSU9OKHBnX2ZsdXNo
KTsKK1BIUF9GVU5DVElPTihwZ19zb2NrZXQpOworUEhQX0ZVTkNUSU9OKHBnX2NvbnN1bWVp
bnB1dCk7CitQSFBfRlVOQ1RJT04ocGdfcmVxdWVzdGNhbmNlbCk7CitQSFBfRlVOQ1RJT04o
cGdfbm90aWZpZXMpOwogCiB2b2lkIHBocF9wZ3NxbF9kb19jb25uZWN0KElOVEVSTkFMX0ZV
TkNUSU9OX1BBUkFNRVRFUlMsaW50IHBlcnNpc3RlbnQpOwogaW50IHBocF9wZ3NxbF9nZXRf
ZGVmYXVsdF9saW5rKElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNRVRFUlMpOwpAQCAtMTAzLDcg
KzExNSw2IEBACiB2b2lkIHBocF9wZ3NxbF9nZXRfZmllbGRfaW5mbyhJTlRFUk5BTF9GVU5D
VElPTl9QQVJBTUVURVJTLCBpbnQgZW50cnlfdHlwZSk7CiB2b2lkIHBocF9wZ3NxbF9kYXRh
X2luZm8oSU5URVJOQUxfRlVOQ1RJT05fUEFSQU1FVEVSUywgaW50IGVudHJ5X3R5cGUpOwog
Ci0KIHR5cGVkZWYgc3RydWN0IHBnTG9mcCB7CiAgICAgICAgIFBHY29ubiAqY29ubjsKIAlp
bnQgbG9mZDsKQEAgLTEyMCw2ICsxMzEsNyBAQAogCWxvbmcgbnVtX2xpbmtzLG51bV9wZXJz
aXN0ZW50OwogCWxvbmcgbWF4X2xpbmtzLG1heF9wZXJzaXN0ZW50OwogCWxvbmcgYWxsb3df
cGVyc2lzdGVudDsKKwlsb25nIGFsbG93X2FzeW5jX3BlcnNpc3RlbnQ7CiAJaW50IGxlX2xv
ZnAsbGVfc3RyaW5nOwogCWludCBpZ25vcmVfbm90aWNlczsKIAljaGFyICpsYXN0X25vdGlj
ZTsK
--------------040507030405040102080701--


_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com