fix inode/device usage for win32, take #1

[email protected] (Pierre Joye) Sat, 17 Oct 2009 20:15:21 +0200
Newsgroups php.apc.dev
Message-ID <[email protected]>
--00c09ffb4d2ee7d4e80476257ee7
Content-Type: text/plain; charset=ISO-8859-1

hi,

This is a first attempt (draft) to fix the pecl bug #16860
(http://pecl.php.net/bugs/bug.php?id=16860).

Here are the changes I made so far:

- add apc_ino_t and apc_dev_t
  - native ino_t/dev_t on non windows platform
  - unsigned int64 on windows

- use string for the inode and device key (cache info and iterator)
- device uses now the volume serial number (part of the file information)
- inode uses now the file id (part of the file information)
- add zend_file_handle support to apc_cache_make_file_key to avoid (no
need to open/stat a file already opened)
  - to do: have to add fstat on unix
  - getfileinfofromhandle (stat-like) is used on windows

I have tested it using fcgi and apache 2.2 on windows and everything
seems to work as it should. However I like to test it further and fix
any side effects before to apply it. Thomas Peterson also tested it
using apache and CLI with the test cases provided in the report.

Comments and suggestions welcome :)

Cheers,
-- 
Pierre

http://blog.thepimp.net | http://www.libgd.org

--00c09ffb4d2ee7d4e80476257ee7
Content-Type: text/plain; charset=US-ASCII; name="inode_win32_fix.txt"
Content-Disposition: attachment; filename="inode_win32_fix.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g0wkr8q30

SW5kZXg6IGFwY19tYWluLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBhcGNfbWFpbi5jCShyZXZpc2lvbiAy
ODk2ODkpDQorKysgYXBjX21haW4uYwkod29ya2luZyBjb3B5KQ0KQEAgLTUyMSw3ICs1MjEsNyBA
QA0KICNlbmRpZgogCiAgICAgLyogdHJ5IHRvIGNyZWF0ZSBhIGNhY2hlIGtleTsgaWYgd2UgZmFp
bCwgZ2l2ZSB1cCBvbiBjYWNoaW5nICovCi0gICAgaWYgKCFhcGNfY2FjaGVfbWFrZV9maWxlX2tl
eSgma2V5LCBoLT5maWxlbmFtZSwgUEcoaW5jbHVkZV9wYXRoKSwgdCBUU1JNTFNfQ0MpKSB7Cisg
ICAgaWYgKCFhcGNfY2FjaGVfbWFrZV9maWxlX2tleSgma2V5LCBoLT5maWxlbmFtZSwgUEcoaW5j
bHVkZV9wYXRoKSwgdCwgaCBUU1JNTFNfQ0MpKSB7CiAgICAgICAgIHJldHVybiBvbGRfY29tcGls
ZV9maWxlKGgsIHR5cGUgVFNSTUxTX0NDKTsKICAgICB9CiAKSW5kZXg6IHBocF9hcGMuYw0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIHBocF9hcGMuYwkocmV2aXNpb24gMjg5Njg5KQ0KKysrIHBocF9hcGMuYwko
d29ya2luZyBjb3B5KQ0KQEAgLTQ2Miw4ICs0NjIsMjEgQEANCiAKICAgICAgICAgaWYocC0+dHlw
ZSA9PSBBUENfQ0FDSEVfRU5UUllfRklMRSkgewogICAgICAgICAgICAgYWRkX2Fzc29jX3N0cmlu
ZyhsaW5rLCAiZmlsZW5hbWUiLCBwLT5kYXRhLmZpbGUuZmlsZW5hbWUsIDEpOworI2lmZGVmIFBI
UF9XSU4zMgorCQkJeworCQkJCWNoYXIgYnVmWzIwXTsKKwkJCQlzcHJpbnRmKGJ1ZiwgIiVJNjRk
IiwgIHAtPmRhdGEuZmlsZS5kZXZpY2UpOworCQkJCWFkZF9hc3NvY19zdHJpbmcobGluaywgImRl
dmljZSIsIGJ1ZiwgMSk7CisKKwkJCQlzcHJpbnRmKGJ1ZiwgIiVJNjRkIiwgIHAtPmRhdGEuZmls
ZS5pbm9kZSk7CisJCQkJYWRkX2Fzc29jX3N0cmluZyhsaW5rLCAiaW5vZGUiLCBidWYsIDEpOwor
CQkJfQorI2Vsc2UKICAgICAgICAgICAgIGFkZF9hc3NvY19sb25nKGxpbmssICJkZXZpY2UiLCBw
LT5kYXRhLmZpbGUuZGV2aWNlKTsKICAgICAgICAgICAgIGFkZF9hc3NvY19sb25nKGxpbmssICJp
bm9kZSIsIHAtPmRhdGEuZmlsZS5pbm9kZSk7CisjZW5kaWYKKworCiAgICAgICAgICAgICBhZGRf
YXNzb2Nfc3RyaW5nKGxpbmssICJ0eXBlIiwgImZpbGUiLCAxKTsKICAgICAgICAgICAgIGlmKEFQ
Q0coZmlsZV9tZDUpKSB7CiAgICAgICAgICAgICAgICAgbWFrZV9kaWdlc3QobWQ1c3RyLCBwLT5k
YXRhLmZpbGUubWQ1KTsKQEAgLTUwMCw4ICs1MTMsMjAgQEANCiAKICAgICAgICAgaWYocC0+dHlw
ZSA9PSBBUENfQ0FDSEVfRU5UUllfRklMRSkgewogICAgICAgICAgICAgYWRkX2Fzc29jX3N0cmlu
ZyhsaW5rLCAiZmlsZW5hbWUiLCBwLT5kYXRhLmZpbGUuZmlsZW5hbWUsIDEpOworI2lmZGVmIFBI
UF9XSU4zMgorCQkJeworCQkJCWNoYXIgYnVmWzIwXTsKKwkJCQlzcHJpbnRmKGJ1ZiwgIiVJNjRk
IiwgIHAtPmRhdGEuZmlsZS5kZXZpY2UpOworCQkJCWFkZF9hc3NvY19zdHJpbmcobGluaywgImRl
dmljZSIsIGJ1ZiwgMSk7CisKKwkJCQlzcHJpbnRmKGJ1ZiwgIiVJNjRkIiwgIHAtPmRhdGEuZmls
ZS5pbm9kZSk7CisJCQkJYWRkX2Fzc29jX3N0cmluZyhsaW5rLCAiaW5vZGUiLCBidWYsIDEpOwor
CQkJfQorI2Vsc2UKICAgICAgICAgICAgIGFkZF9hc3NvY19sb25nKGxpbmssICJkZXZpY2UiLCBw
LT5kYXRhLmZpbGUuZGV2aWNlKTsKICAgICAgICAgICAgIGFkZF9hc3NvY19sb25nKGxpbmssICJp
bm9kZSIsIHAtPmRhdGEuZmlsZS5pbm9kZSk7CisjZW5kaWYKKwogICAgICAgICAgICAgYWRkX2Fz
c29jX3N0cmluZyhsaW5rLCAidHlwZSIsICJmaWxlIiwgMSk7CiAgICAgICAgICAgICBpZihBUENH
KGZpbGVfbWQ1KSkgewogICAgICAgICAgICAgICAgIG1ha2VfZGlnZXN0KG1kNXN0ciwgcC0+ZGF0
YS5maWxlLm1kNSk7CkBAIC0xMjU1LDcgKzEyODAsNyBAQA0KICAgICAgICAgICAgIGZpbGVfaGFu
ZGxlLmZyZWVfZmlsZW5hbWUgPSAwOwogICAgICAgICAgICAgZmlsZV9oYW5kbGUub3BlbmVkX3Bh
dGggPSBOVUxMOwogCi0gICAgICAgICAgICBpZiAoIWFwY19jYWNoZV9tYWtlX2ZpbGVfa2V5KCYo
a2V5c1tpXSksIGZpbGVfaGFuZGxlLmZpbGVuYW1lLCBQRyhpbmNsdWRlX3BhdGgpLCB0IFRTUk1M
U19DQykpIHsKKyAgICAgICAgICAgIGlmICghYXBjX2NhY2hlX21ha2VfZmlsZV9rZXkoJihrZXlz
W2ldKSwgZmlsZV9oYW5kbGUuZmlsZW5hbWUsIFBHKGluY2x1ZGVfcGF0aCksIHQsIE5VTEwgVFNS
TUxTX0NDKSkgewogICAgICAgICAgICAgICAgIGFkZF9hc3NvY19sb25nKHJldHVybl92YWx1ZSwg
Wl9TVFJWQUxfUFAoaGVudHJ5KSwgLTEpOyAgLyogLTE6IGNvbXBpbGF0aW9uIGVycm9yICovCiAg
ICAgICAgICAgICAgICAgYXBjX3dwcmludCgiRXJyb3IgY29tcGlsaW5nICVzIGluIGFwY19jb21w
aWxlX2ZpbGUuIiwgZmlsZV9oYW5kbGUuZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwpJbmRleDogYXBjX2l0ZXJhdG9yLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBhcGNfaXRlcmF0b3IuYwko
cmV2aXNpb24gMjg5Njg5KQ0KKysrIGFwY19pdGVyYXRvci5jCSh3b3JraW5nIGNvcHkpDQpAQCAt
NDYsNyArNDYsMTEgQEANCiAKICAgICBpZiAoc2xvdC0+a2V5LnR5cGUgPT0gQVBDX0NBQ0hFX0tF
WV9GSUxFKSB7CiAgICAgICAgIC8qIGtleXMgc2hvdWxkIGJlIHVuaXF1ZSBhbmQgd2l0aCBzdGF0
PTEgd2UgY291bGQgaGF2ZSBtdWx0aXBsZSBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUsIHNvIHVz
ZSAnPGRldmljZT4gPGlub2RlPicgaW5zdGVhZCAqLworI2lmZGVmIFBIUF9XSU4zMgorICAgICAg
ICBpdGVtLT5rZXlfbGVuID0gc3BwcmludGYoJml0ZW0tPmtleSwgMCwgIiVJNjRkICVJNjRkIiwg
c2xvdC0+a2V5LmRhdGEuZmlsZS5kZXZpY2UsIHNsb3QtPmtleS5kYXRhLmZpbGUuaW5vZGUpOwor
I2Vsc2UKICAgICAgICAgaXRlbS0+a2V5X2xlbiA9IHNwcHJpbnRmKCZpdGVtLT5rZXksIDAsICIl
bGQgJWxkIiwgKHVsb25nKXNsb3QtPmtleS5kYXRhLmZpbGUuZGV2aWNlLCAodWxvbmcpc2xvdC0+
a2V5LmRhdGEuZmlsZS5pbm9kZSk7CisjZW5kaWYKICAgICAgICAgaXRlbS0+ZmlsZW5hbWVfa2V5
ID0gZXN0cmR1cChzbG90LT52YWx1ZS0+ZGF0YS5maWxlLmZpbGVuYW1lKTsKICAgICB9IGVsc2Ug
aWYgKHNsb3QtPmtleS50eXBlID09IEFQQ19DQUNIRV9LRVlfVVNFUikgewogICAgICAgICBpdGVt
LT5rZXkgPSBlc3RybmR1cCgoY2hhciopc2xvdC0+a2V5LmRhdGEudXNlci5pZGVudGlmaWVyLCBz
bG90LT5rZXkuZGF0YS51c2VyLmlkZW50aWZpZXJfbGVuKTsKQEAgLTgwLDEyICs4NCwyNCBAQA0K
ICAgICB9CiAgICAgaWYgKEFQQ19JVEVSX0RFVklDRSAmIGl0ZXJhdG9yLT5mb3JtYXQpIHsKICAg
ICAgICAgaWYoc2xvdC0+a2V5LnR5cGUgPT0gQVBDX0NBQ0hFX0tFWV9GSUxFKSB7CisjaWZkZWYg
UEhQX1dJTjMyCisJCQljaGFyIGJ1ZlsyMF07CisJCQlzcHJpbnRmKGJ1ZiwgIiVJNjRkIiwgc2xv
dC0+a2V5LmRhdGEuZmlsZS5kZXZpY2UpOworCQkJYWRkX2Fzc29jX3N0cmluZyhpdGVtLT52YWx1
ZSwgImRldmljZSIsIGJ1ZiwgMSk7CisjZWxzZQogICAgICAgICAgICAgYWRkX2Fzc29jX2xvbmco
aXRlbS0+dmFsdWUsICJkZXZpY2UiLCBzbG90LT5rZXkuZGF0YS5maWxlLmRldmljZSk7CisjZW5k
aWYKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoQVBDX0lURVJfSU5PREUgJiBpdGVyYXRvci0+
Zm9ybWF0KSB7CiAgICAgICAgIGlmKHNsb3QtPmtleS50eXBlID09IEFQQ19DQUNIRV9LRVlfRklM
RSkgeworI2lmZGVmIFBIUF9XSU4zMgorCQkJY2hhciBidWZbMjBdOworCQkJc3ByaW50ZihidWYs
ICIlSTY0ZCIsIHNsb3QtPmtleS5kYXRhLmZpbGUuZGV2aWNlKTsKKwkJCWFkZF9hc3NvY19zdHJp
bmcoaXRlbS0+dmFsdWUsICJkZXZpY2UiLCBidWYsIDEpOworI2Vsc2UKICAgICAgICAgICAgIGFk
ZF9hc3NvY19sb25nKGl0ZW0tPnZhbHVlLCAiaW5vZGUiLCBzbG90LT5rZXkuZGF0YS5maWxlLmlu
b2RlKTsKKyNlbmRpZgogICAgICAgICB9CiAgICAgfQogICAgIGlmIChBUENfSVRFUl9LRVkgJiBp
dGVyYXRvci0+Zm9ybWF0KSB7CkluZGV4OiBhcGNfY2FjaGUuYw0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGFw
Y19jYWNoZS5jCShyZXZpc2lvbiAyODk2ODkpDQorKysgYXBjX2NhY2hlLmMJKHdvcmtpbmcgY29w
eSkNCkBAIC00OCwxMCArNDgsMTcgQEANCiBzdGF0aWMgdm9pZCBhcGNfY2FjaGVfZXhwdW5nZShh
cGNfY2FjaGVfdCogY2FjaGUsIHNpemVfdCBzaXplKTsKIAogLyoge3t7IGhhc2ggKi8KKyNpZmRl
ZiBQSFBfV0lOMzIKK3N0YXRpYyBfX2ludDY0IGhhc2goYXBjX2NhY2hlX2tleV90IGtleSkKK3sK
KyAgICByZXR1cm4ga2V5LmRhdGEuZmlsZS5kZXZpY2UgKyBrZXkuZGF0YS5maWxlLmlub2RlOwor
fQorI2Vsc2UKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaChhcGNfY2FjaGVfa2V5X3Qga2V5KQog
ewogICAgIHJldHVybiBrZXkuZGF0YS5maWxlLmRldmljZSArIGtleS5kYXRhLmZpbGUuaW5vZGU7
CiB9CisjZW5kaWYKIC8qIH19fSAqLwogCiAvKiB7e3sgc3RyaW5nX25oYXNoXzggKi8KQEAgLTcw
MCw3ICs3MDcsNyBAQA0KICAgICB0ID0gYXBjX3RpbWUoKTsKIAogICAgIC8qIHRyeSB0byBjcmVh
dGUgYSBjYWNoZSBrZXk7IGlmIHdlIGZhaWwsIGdpdmUgdXAgb24gY2FjaGluZyAqLwotICAgIGlm
ICghYXBjX2NhY2hlX21ha2VfZmlsZV9rZXkoJmtleSwgZmlsZW5hbWUsIFBHKGluY2x1ZGVfcGF0
aCksIHQgVFNSTUxTX0NDKSkgeworICAgIGlmICghYXBjX2NhY2hlX21ha2VfZmlsZV9rZXkoJmtl
eSwgZmlsZW5hbWUsIFBHKGluY2x1ZGVfcGF0aCksIHQsIE5VTEwgVFNSTUxTX0NDKSkgewogICAg
ICAgICBhcGNfd3ByaW50KCJDb3VsZCBub3Qgc3RhdCBmaWxlICVzLCB1bmFibGUgdG8gZGVsZXRl
IGZyb20gY2FjaGUuIiwgZmlsZW5hbWUpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAt
NzQ4LDE0ICs3NTUsMjMgQEANCiBpbnQgYXBjX2NhY2hlX21ha2VfZmlsZV9rZXkoYXBjX2NhY2hl
X2tleV90KiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbmNsdWRlX3BhdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVfdCB0CisgICAgICAgICAgICAgICAgICAgICAgIHRpbWVf
dCB0LAorICAgICAgICAgICAgICAgICAgICAgICB6ZW5kX2ZpbGVfaGFuZGxlKiB6ZmgKICAgICAg
ICAgICAgICAgICAgICAgICAgVFNSTUxTX0RDKQogewogICAgIHN0cnVjdCBzdGF0ICp0bXBfYnVm
PU5VTEw7CiAgICAgc3RydWN0IGFwY19maWxlaW5mb190IGZpbGVpbmZvID0geyB7MH0sIH07CiAg
ICAgaW50IGxlbjsKKyNpZmRlZiBQSFBfV0lOMzIKKwlIQU5ETEUgaEZpbGUgPSBJTlZBTElEX0hB
TkRMRV9WQUxVRTsKKwlCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBoSW5mbzsKKwlCT09MIGNs
b3NlX2hmaWxlID0gRkFMU0U7CisjZW5kaWYKIAogICAgIGFzc2VydChrZXkgIT0gTlVMTCk7CisJ
aWYgKCFmaWxlbmFtZSAmJiB6ZmggJiYgemZoLT5vcGVuZWRfcGF0aCkgeworCQlmaWxlbmFtZSA9
IHpmaC0+b3BlbmVkX3BhdGg7CisJfQogCiAgICAgaWYgKCFmaWxlbmFtZSB8fCAhU0cocmVxdWVz
dF9pbmZvKS5wYXRoX3RyYW5zbGF0ZWQpIHsKICNpZmRlZiBfX0RFQlVHX0FQQ19fCkBAIC04MzIs
OCArODQ4LDU2IEBADQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyNpZiBQSFBfV0lOMzIK
KyAgICBpZiAoemZoKSB7CisJCXN3aXRjaCAoemZoLT50eXBlKSB7CisJCQljYXNlIFpFTkRfSEFO
RExFX0ZEOgorCQkJCWhGaWxlID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUoemZoLT5oYW5kbGUu
ZmQpOworCQkJCWJyZWFrOworCisJCQljYXNlIFpFTkRfSEFORExFX0ZQOgorCQkJCWhGaWxlID0g
KEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUoZmlsZW5vKHpmaC0+aGFuZGxlLmZwKSk7CisJCQkJYnJl
YWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIDA7CisJCX0KKyAgICB9CisKKyAgICBpZiAo
aEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJLyogVXNlIHRoZSBGRCBmcm9tIHpl
bmQgaGFuZGxlIGluc3RlYWQsIGdldCBhIGZpbGUgSEFORExFIHVzaW5nCisJCSAgIF9nZXRfb3Nm
aGFuZGxlICovCisJCUhBTkRMRSBoRmlsZTsKKworCQloRmlsZSA9IENyZWF0ZUZpbGUoZmlsZW5h
bWUsIEdFTkVSSUNfV1JJVEUsIEZJTEVfU0hBUkVfV1JJVEV8RklMRV9TSEFSRV9SRUFELCBOVUxM
LCBPUEVOX0FMV0FZUywgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsIE5VTEwpOworCQlpZiAo
IWhGaWxlKSB7CisjIGlmZGVmIF9fREVCVUdfQVBDX18KKwkJCWZwcmludGYoc3RkZXJyLCJDYW5u
b3QgY3JlYXRlIGEgZmlsZSBIQU5ETEUgZm9yICVzXG4iLCBmaWxlbmFtZSk7CisjIGVuZGlmCisJ
CQlyZXR1cm4gMDsKKwkJfQorCQljbG9zZV9oZmlsZSA9IFRSVUU7CisJfQorCisJaWYgKCFHZXRG
aWxlSW5mb3JtYXRpb25CeUhhbmRsZShoRmlsZSwgJmhJbmZvKSkgeworIyBpZmRlZiBfX0RFQlVH
X0FQQ19fCisJCWZwcmludGYoc3RkZXJyLCJDYW5ub3QgZ2V0IGZpbGUgaW5mb3JtYXRpb24gZnJv
bSBoYW5kbGVcbiIpOworIyBlbmRpZgorCQlDbG9zZUhhbmRsZShoRmlsZSk7CisJCXJldHVybiAw
OworCX0KKwkKKwlpZiAoY2xvc2VfaGZpbGUpIHsKKwkJQ2xvc2VIYW5kbGUoaEZpbGUpOworCX0K
KwlrZXktPmRhdGEuZmlsZS5kZXZpY2UgPSBoSW5mby5kd1ZvbHVtZVNlcmlhbE51bWJlcjsKKwlr
ZXktPmRhdGEuZmlsZS5pbm9kZSA9ICgoKGFwY19pbm9fdCkoaEluZm8ubkZpbGVJbmRleEhpZ2gp
IDw8IDMyKSB8IChhcGNfaW5vX3QpIGhJbmZvLm5GaWxlSW5kZXhMb3cpOworCisjZWxzZQogICAg
IGtleS0+ZGF0YS5maWxlLmRldmljZSA9IGZpbGVpbmZvLnN0X2J1Zi5zYi5zdF9kZXY7CiAgICAg
a2V5LT5kYXRhLmZpbGUuaW5vZGUgID0gZmlsZWluZm8uc3RfYnVmLnNiLnN0X2lubzsKKyNlbmRp
ZgorCiAgICAgLyoKICAgICAgKiBJZiB3b3JraW5nIHdpdGggY29udGVudCBtYW5hZ2VtZW50IHN5
c3RlbXMgdGhhdCBsaWtlIHRvIG11bmdlIHRoZSBtdGltZSwgCiAgICAgICogaXQgbWlnaHQgYmUg
YXBwcm9wcmlhdGUgdG8ga2V5IG9mZiBvZiB0aGUgY3RpbWUgdG8gYmUgaW1tdW5lIHRvIHN5c3Rl
bXMKSW5kZXg6IGFwY19jYWNoZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gYXBjX2NhY2hlLmgJKHJldmlz
aW9uIDI4OTY4OSkNCisrKyBhcGNfY2FjaGUuaAkod29ya2luZyBjb3B5KQ0KQEAgLTQ5LDYgKzQ5
LDE0IEBADQogI2RlZmluZSBBUENfQ0FDSEVfS0VZX1VTRVIgICAgIDIKICNkZWZpbmUgQVBDX0NB
Q0hFX0tFWV9GUEZJTEUgICAzCiAKKyNpZmRlZiBQSFBfV0lOMzIKK3R5cGVkZWYgX19pbnQ2NCBh
cGNfaW5vX3Q7Cit0eXBlZGVmIF9faW50NjQgYXBjX2Rldl90OworI2Vsc2UKK3R5cGVkZWYgaW5v
X3QgYXBjX2lub190OwordHlwZWRlZiBpbm9fdCBhcGNfZGV2X3Q7CisjZW5kaWYKKwogLyoge3t7
IGNhY2hlIGxvY2tpbmcgbWFjcm9zICovCiAjZGVmaW5lIENBQ0hFX0xPQ0soY2FjaGUpICAgICAg
ICB7IExPQ0soY2FjaGUtPmhlYWRlci0+bG9jayk7ICAgY2FjaGUtPmhhc19sb2NrID0gMTsgfQog
I2RlZmluZSBDQUNIRV9VTkxPQ0soY2FjaGUpICAgICAgeyBVTkxPQ0soY2FjaGUtPmhlYWRlci0+
bG9jayk7IGNhY2hlLT5oYXNfbG9jayA9IDA7IH0KQEAgLTYyLDggKzcwLDggQEANCiAKIHR5cGVk
ZWYgdW5pb24gX2FwY19jYWNoZV9rZXlfZGF0YV90IHsKICAgICBzdHJ1Y3QgewotICAgICAgICBk
ZXZfdCBkZXZpY2U7ICAgICAgICAgICAgIC8qIHRoZSBmaWxlc3lzdGVtIGRldmljZSAqLwotICAg
ICAgICBpbm9fdCBpbm9kZTsgICAgICAgICAgICAgIC8qIHRoZSBmaWxlc3lzdGVtIGlub2RlICov
CisgICAgICAgIGFwY19kZXZfdCBkZXZpY2U7ICAgICAgICAgICAgIC8qIHRoZSBmaWxlc3lzdGVt
IGRldmljZSAqLworICAgICAgICBhcGNfaW5vX3QgaW5vZGU7ICAgICAgICAgICAgICAvKiB0aGUg
ZmlsZXN5c3RlbSBpbm9kZSAqLwogICAgIH0gZmlsZTsKICAgICBzdHJ1Y3QgewogICAgICAgICBj
b25zdCBjaGFyICppZGVudGlmaWVyOwpAQCAtMjMxLDcgKzIzOSw4IEBADQogZXh0ZXJuIGludCBh
cGNfY2FjaGVfbWFrZV9maWxlX2tleShhcGNfY2FjaGVfa2V5X3QqIGtleSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluY2x1ZGVfcGF0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV90IHQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZV90IHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHplbmRfZmlsZV9oYW5kbGUqIGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVFNSTUxTX0RDKTsKIAogLyoKQEAgLTI1OSw4ICsyNjgsOCBAQA0KIHR5cGVkZWYgdW5p
b24gX2FwY19jYWNoZV9saW5rX2RhdGFfdCB7CiAgICAgc3RydWN0IHsKICAgICAgICAgY2hhciAq
ZmlsZW5hbWU7Ci0gICAgICAgIGRldl90IGRldmljZTsKLSAgICAgICAgaW5vX3QgaW5vZGU7Cisg
ICAgICAgIGFwY19pbm9fdCBkZXZpY2U7CisgICAgICAgIGFwY19kZXZfdCBpbm9kZTsKICAgICAg
ICAgdW5zaWduZWQgY2hhciAqbWQ1OwogICAgIH0gZmlsZTsKICAgICBzdHJ1Y3QgewpJbmRleDog
YXBjX2Jpbi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gYXBjX2Jpbi5jCShyZXZpc2lvbiAyODk2ODkpDQor
KysgYXBjX2Jpbi5jCSh3b3JraW5nIGNvcHkpDQpAQCAtODk0LDcgKzg5NCw3IEBADQogICAgICAg
ICAgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgaWYgKCFhcGNfY2FjaGVfbWFrZV9maWxlX2tleSgmY2FjaGVfa2V5LCBlcC0+dmFs
LmZpbGUuZmlsZW5hbWUsIFBHKGluY2x1ZGVfcGF0aCksIHQgVFNSTUxTX0NDKSkgeworICAgICAg
ICAgICAgICAgIGlmICghYXBjX2NhY2hlX21ha2VfZmlsZV9rZXkoJmNhY2hlX2tleSwgZXAtPnZh
bC5maWxlLmZpbGVuYW1lLCBQRyhpbmNsdWRlX3BhdGgpLCB0LCBOVUxMIFRTUk1MU19DQykpIHsK
ICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsdXJlOwogICAgICAgICAgICAgICAgIH0KIAo=
--00c09ffb4d2ee7d4e80476257ee7--