Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Sep 2018 01:55:11 +1200
From:      Thomas Munro <munro@ip9.org>
To:        freebsd-hackers@freebsd.org
Subject:   Tracking CLDR version in collation definitions
Message-ID:  <CADLWmXWY0doSQ-7uoBC0JUzCgZTx9iw-k_viYWB7ze8Pi7R8gw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--000000000000638e370575343de6
Content-Type: text/plain; charset="UTF-8"

Hello FreeBSD hackers,

An occasional problem run into by PostgreSQL users (and probably other
database-like systems) is that collation definitions change and
on-disk indexes become corrupted.  This was one motivation for
PostgreSQL to adopt optional support for ICU, and to track
ucol_getVersion() and detect when it changes so that the user can be
warned that dependent indexes need to be rebuilt.  However, for
various reason many users prefer to use the OS collation support,
which remains the default, and PostgreSQL supports both ways.

I'd like to be able to track collation definition versions for libc
collations too.  There doesn't currently seem to be a good way to do
that.  Am I missing something?

Here's the idea I had:

1.  Add a new option -V to localedef(1) so that an arbitrary version
string can be stored in some spare space in the header of LC_COLLATE
files.
2.  Add a new libc function: const char *querylocaleversion(int mask,
locale_t locale).
3.  Modify the perl scripts under tools/tools/locale/tools/... to
invoke localedef(1) either with a version set by the maintainer in
unicode.conf (eg "30.0.3"), or perhaps extracted from CLDR data files
directly.

I've attached a proof-of-concept patch which has a very rough
implementation of steps 1 and 2.  It probably needs better bounds
checking, more thought about how to report lack of version string (""
or NULL?), and other details.  Before doing any further work on that I
thought I'd check if people think the idea has legs, or knows of an
existing way to get this information.

I also considered less invasive approaches to detect collation
changes: using a checksum (ie program needs to know how to find the
LC_COLLATE files), or using the FreeBSD version on the basis that
collations should only change when the base system is upgraded
(generating false positives).  I don't really like those approaches
much.

I'd be grateful for any feedback, flames etc.

Thanks,

Thomas Munro

--000000000000638e370575343de6
Content-Type: application/octet-stream; 
	name="0001-Add-querylocaleversion.patch"
Content-Disposition: attachment; 
	filename="0001-Add-querylocaleversion.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_jlqmkirr0

RnJvbSBhY2ExOTM2OTYyZTQyYzQyODYxYjk4Zjk5NmU5YzMyYmZiZDJhNzcyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPG11bnJvQGlwOS5vcmc+CkRhdGU6IFNh
dCwgMTEgQXVnIDIwMTggMDc6NDY6NDUgKzEyMDAKU3ViamVjdDogW1BBVENIXSBBZGQgcXVlcnls
b2NhbGV2ZXJzaW9uKCkuCgpBbGxvdyB1c2VyIHByb2dyYW1zIHRvIGFzayBmb3IgYSB2ZXJzaW9u
IHN0cmluZyBmb3IgdGhlCmNvbXBvbmVudHMgb2YgYSBsb2NhbGVfdC4gIFRoZSBzdHJ1Y3R1cmUg
b2YgdGhlIHZlcnNpb24Kc3RyaW5nIGlzIHVuZGVmaW5lZCwgYnV0IGNhbiBiZSB1c2VkIHRvIGRl
dGVjdCBjaGFuZ2VzCmluIHRoZSBsb2NhbGUncyBkZWZpbml0aW9uLgoKVGhlIGludGVuZGVkIHVz
ZS1jYXNlIGlzIGRhdGFiYXNlcyB0aGF0IHVzZSBsaWJjIGNvbGxhdGlvbnMKdG8gaW1wbGVtZW50
IGluZGV4ZXMuICBXaGVuIGNvbGxhdGlvbiBkZWZpbml0aW9ucyBjaGFuZ2UsCmRhdGFiYXNlIGlu
ZGV4ZXMgYXJlIGZyZXF1ZW50bHkgY29ycnVwdGVkLiAgQnkgZXhwb3NpbmcKdGhlIENMRFIgdmVy
c2lvbiBzdHJpbmcsIGRhdGFiYXNlcyBjYW4gZGV0ZWN0IHRoZSBjaGFuZ2UKYW5kIGlzc3VlIGFu
IGVycm9yIG9yIGZvcmNlIGFuIGluZGV4IHJlYnVpbGQuCgpGb3Igbm93IG9ubHkgTENfQ09MTEFU
RSBjb21wb25lbnRzIGhhdmUgYSB3YXkgdG8gcmVwb3J0CnRoZWlyIHZlcnNpb24uICBUaGUgTENf
Q09MTEFURSBmaWxlIGZvcm1hdCBpcyBiYWNrd2FyZHMKYW5kIGZvcndhcmRzIGNvbXBhdGlibGUu
ICBXaGVyZSBwcmV2aW91c2x5IDI0IGJ5dGVzIGhlbGQKIkJTRCAxLjBcbiIgZm9sbG93ZWQgYnkg
TlVMIGNoYXJhY3RlcnMsIHRoZXJlIGFyZSBub3cgMTIKYnl0ZXMgZm9yIHRoZSBmaWxlIGZvcm1h
dCBpZGVudGlmaWVyIGFuZCB0aGVuIDEyIGJ5dGVzIGZvcgp0aGUgZGF0YSB2ZXJzaW9uIHN0cmlu
Zy4KCioqKiBXT1JLIElOIFBST0dSRVNTLCBQUk9PRiBPRiBDT05DRVBUIENPREUgT05MWSAqKioK
LS0tCiBpbmNsdWRlL3hsb2NhbGUvX2xvY2FsZS5oICAgICAgICAgICAgfCAgMSArCiBsaWIvbGli
Yy9sb2NhbGUvU3ltYm9sLm1hcCAgICAgICAgICAgfCAgMSArCiBsaWIvbGliYy9sb2NhbGUvY29s
bGF0ZS5jICAgICAgICAgICAgfCAgNiArKy0tCiBsaWIvbGliYy9sb2NhbGUvY29sbGF0ZS5oICAg
ICAgICAgICAgfCAgNiArKystCiBsaWIvbGliYy9sb2NhbGUvcXVlcnlsb2NhbGV2ZXJzaW9uLjMg
fCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvbGliYy9sb2NhbGUveGxvY2Fs
ZS5jICAgICAgICAgICAgfCAxNiArKysrKysrKysKIGxpYi9saWJjL2xvY2FsZS94bG9jYWxlX3By
aXZhdGUuaCAgICB8ICA0ICsrKwogdXNyLmJpbi9sb2NhbGVkZWYvY29sbGF0ZS5jICAgICAgICAg
IHwgMTQgKysrKystLS0KIHVzci5iaW4vbG9jYWxlZGVmL2xvY2FsZWRlZi4xICAgICAgICB8ICA3
ICsrKy0KIHVzci5iaW4vbG9jYWxlZGVmL2xvY2FsZWRlZi5jICAgICAgICB8ICA3ICsrKy0KIHVz
ci5iaW4vbG9jYWxlZGVmL2xvY2FsZWRlZi5oICAgICAgICB8ICAyICsrCiAxMSBmaWxlcyBjaGFu
Z2VkLCAxMDUgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBsaWIvbGliYy9sb2NhbGUvcXVlcnlsb2NhbGV2ZXJzaW9uLjMKCmRpZmYgLS1naXQgYS9pbmNs
dWRlL3hsb2NhbGUvX2xvY2FsZS5oIGIvaW5jbHVkZS94bG9jYWxlL19sb2NhbGUuaAppbmRleCBh
NGUwNGYwODJmYS4uODMwMjQxNzVjMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGxvY2FsZS9fbG9j
YWxlLmgKKysrIGIvaW5jbHVkZS94bG9jYWxlL19sb2NhbGUuaApAQCAtNTQsNiArNTQsNyBAQCBs
b2NhbGVfdAkgZHVwbG9jYWxlKGxvY2FsZV90IGJhc2UpOwogdm9pZAkJIGZyZWVsb2NhbGUobG9j
YWxlX3QgbG9jKTsKIGxvY2FsZV90CSBuZXdsb2NhbGUoaW50IG1hc2ssIGNvbnN0IGNoYXIgKmxv
Y2FsZSwgbG9jYWxlX3QgYmFzZSk7CiBjb25zdCBjaGFyCSpxdWVyeWxvY2FsZShpbnQgbWFzaywg
bG9jYWxlX3QgbG9jKTsKK2NvbnN0IGNoYXIJKnF1ZXJ5bG9jYWxldmVyc2lvbihpbnQgbWFzaywg
bG9jYWxlX3QgbG9jKTsKIGxvY2FsZV90CSB1c2Vsb2NhbGUobG9jYWxlX3QgbG9jKTsKIAogI2Vu
ZGlmIC8qIF9YTE9DQUxFX0xPQ0FMRV9IICovCmRpZmYgLS1naXQgYS9saWIvbGliYy9sb2NhbGUv
U3ltYm9sLm1hcCBiL2xpYi9saWJjL2xvY2FsZS9TeW1ib2wubWFwCmluZGV4IGIyZjJhMzVmMmZl
Li5mYTIyZjM5OWRlOSAxMDA2NDQKLS0tIGEvbGliL2xpYmMvbG9jYWxlL1N5bWJvbC5tYXAKKysr
IGIvbGliL2xpYmMvbG9jYWxlL1N5bWJvbC5tYXAKQEAgLTIwNyw2ICsyMDcsNyBAQCBGQlNEXzEu
MyB7CiAJbWJydG9jMTZfbDsKIAltYnJ0b2MzMjsKIAltYnJ0b2MzMl9sOworCXF1ZXJ5bG9jYWxl
dmVyc2lvbjsKIH07CiAKIEZCU0Rwcml2YXRlXzEuMCB7CmRpZmYgLS1naXQgYS9saWIvbGliYy9s
b2NhbGUvY29sbGF0ZS5jIGIvbGliL2xpYmMvbG9jYWxlL2NvbGxhdGUuYwppbmRleCA4ZDA0MGMx
OTQ4Ni4uZmJiMTUwMDBhZjkgMTAwNjQ0Ci0tLSBhL2xpYi9saWJjL2xvY2FsZS9jb2xsYXRlLmMK
KysrIGIvbGliL2xpYmMvbG9jYWxlL2NvbGxhdGUuYwpAQCAtMTUwLDEyICsxNTAsMTQgQEAgX19j
b2xsYXRlX2xvYWRfdGFibGVzX2woY29uc3QgY2hhciAqZW5jb2RpbmcsIHN0cnVjdCB4bG9jYWxl
X2NvbGxhdGUgKnRhYmxlKQogCQlyZXR1cm4gKF9MRFBfRVJST1IpOwogCX0KIAotCWlmIChzdHJu
Y21wKFRNUCwgQ09MTEFURV9WRVJTSU9OLCBDT0xMQVRFX1NUUl9MRU4pICE9IDApIHsKKwlpZiAo
c3RybmNtcChUTVAsIENPTExBVEVfVkVSU0lPTiwgQ09MTEFURV9GT1JNQVRfVkVSU0lPTl9MRU4p
ICE9IDApIHsKIAkJKHZvaWQpIG11bm1hcChtYXAsIHNidWYuc3Rfc2l6ZSk7CiAJCWVycm5vID0g
RUlOVkFMOwogCQlyZXR1cm4gKF9MRFBfRVJST1IpOwogCX0KLQlUTVAgKz0gQ09MTEFURV9TVFJf
TEVOOworCVRNUCArPSBDT0xMQVRFX0ZPUk1BVF9WRVJTSU9OX0xFTjsKKwlzdHJuY3B5KHRhYmxl
LT5oZWFkZXIudmVyc2lvbiwgVE1QLCBzaXplb2YodGFibGUtPmhlYWRlci52ZXJzaW9uKSk7CisJ
VE1QICs9IENPTExBVEVfREFUQV9WRVJTSU9OX0xFTjsKIAogCWluZm8gPSAodm9pZCAqKVRNUDsK
IAlUTVAgKz0gc2l6ZW9mICgqaW5mbyk7CmRpZmYgLS1naXQgYS9saWIvbGliYy9sb2NhbGUvY29s
bGF0ZS5oIGIvbGliL2xpYmMvbG9jYWxlL2NvbGxhdGUuaAppbmRleCA0YWJiMWY5MzZhZS4uZDM2
ZjJjZmE4OTEgMTAwNjQ0Ci0tLSBhL2xpYi9saWJjL2xvY2FsZS9jb2xsYXRlLmgKKysrIGIvbGli
L2xpYmMvbG9jYWxlL2NvbGxhdGUuaApAQCAtNTMsNyArNTMsMTAgQEAKICNlbmRpZgogCiAjZGVm
aW5lCUNPTExBVEVfU1RSX0xFTgkJMjQJCS8qIHNob3VsZCBiZSA2NC1iaXQgbXVsdGlwbGUgKi8K
KworI2RlZmluZQlDT0xMQVRFX0ZPUk1BVF9WRVJTSU9OX0xFTgkJMTIKICNkZWZpbmUJQ09MTEFU
RV9WRVJTSU9OCQkiQlNEIDEuMFxuIgorI2RlZmluZQlDT0xMQVRFX0RBVEFfVkVSU0lPTl9MRU4J
CTEyCiAKICNkZWZpbmUJQ09MTEFURV9NQVhfUFJJT1JJVFkJKDB4N2ZmZmZmZmYpCS8qIG1heCBz
aWduZWQgdmFsdWUgKi8KICNkZWZpbmUJQ09MTEFURV9TVUJTVF9QUklPUklUWQkoMHg0MDAwMDAw
MCkJLyogYml0IGluZGljYXRlcyBzdWJzdCB0YWJsZSAqLwpAQCAtNjksNyArNzIsOCBAQAogLyoK
ICAqIFRoZSBjb2xsYXRlIGZpbGUgZm9ybWF0IGlzIGFzIGZvbGxvd3M6CiAgKgotICogY2hhcgkJ
dmVyc2lvbltDT0xMQVRFX1NUUl9MRU5dOwkvLyBtdXN0IGJlIENPTExBVEVfVkVSU0lPTgorICog
Y2hhcglmb3JtYXRfdmVyc2lvbltDT0xMQVRFX0ZPUk1BVF9WRVJTSU9OX0xFTl07IC8vIG11c3Qg
YmUgQ09MTEFURV9WRVJTSU9OCisgKiBjaGFyCWRhdGFfdmVyc2lvbltDT0xMQVRFX0RBVEFfVkVS
U0lPTl9MRU5dOyAvLyBOVUwtdGVybWluYXRlZCwgbWF5IGJlIGVtcHR5CiAgKiBjb2xsYXRlX2lu
Zm9fdAlpbmZvOwkJCS8vIHNlZSBiZWxvdywgaW5jbHVkZXMgcGFkZGluZwogICogY29sbGF0ZV9j
aGFyX3ByaV90CWNoYXJfZGF0YVsyNTZdOwkJLy8gOCBiaXQgY2hhciB2YWx1ZXMKICAqIGNvbGxh
dGVfc3Vic3RfdAlzdWJzdFsqXTsJCS8vIDAgb3IgbW9yZSBzdWJzdGl0dXRpb25zCmRpZmYgLS1n
aXQgYS9saWIvbGliYy9sb2NhbGUvcXVlcnlsb2NhbGV2ZXJzaW9uLjMgYi9saWIvbGliYy9sb2Nh
bGUvcXVlcnlsb2NhbGV2ZXJzaW9uLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjk0NTgwMTRhNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2xpYmMvbG9jYWxlL3F1
ZXJ5bG9jYWxldmVyc2lvbi4zCkBAIC0wLDAgKzEsNTAgQEAKKy5cIiBDb3B5cmlnaHQgKGMpIDIw
MTggVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisuXCIK
Ky5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBS
RUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorLlwiIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
LlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCisuXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisuXCIgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKy5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorLlwiIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisuXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorLlwiIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKy5c
IiBTVUNIIERBTUFHRS4KKy5cIgorLlwiICRGcmVlQlNEJAorLlwiCisuRGQgU2VwdGVtYmVyIDMs
IDIwMTgKKy5EdCBRVUVSWUxPQ0FMRVZFUlNJT04gMworLk9zCisuU2ggTkFNRQorLk5tIHF1ZXJ5
bG9jYWxldmVyc2lvbgorLk5kIExvb2sgdXAgdGhlIGxvY2FsZSB2ZXJzaW9uIGZvciBhIHNwZWNp
ZmllZCBjYXRlZ29yeQorLlNoIExJQlJBUlkKKy5MYiBsaWJjCisuU2ggU1lOT1BTSVMKKy5JbiBs
b2NhbGUuaAorLkZ0IGNvbnN0IGNoYXIgKgorLkZuIHF1ZXJ5bG9jYWxldmVyc2lvbiAiaW50IG1h
c2siICJsb2NhbGVfdCBsb2NhbGUiCisuU2ggREVTQ1JJUFRJT04KK1JldHVybnMgdGhlIHZlcnNp
b24gb2YgdGhlIGxvY2FsZSBmb3IgdGhlIGNhdGVnb3J5IHNwZWNpZmllZCBieQorLkZhIG1hc2sg
LgorVGhpcyBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBtYXNrIGFyZSB0aGUgc2FtZSBhcyB0aG9z
ZSBpbgorLlhyIG5ld2xvY2FsZSAzIC4KK0N1cnJlbnRseSB0aGUgb25seSBjb21wb25lbnQgdGhh
dCBjYW4gcHJvdmlkZSB2ZXJzaW9uIGluZm9ybWF0aW9uCitpcyBMQ19DT0xMQVRFX01BU0suICBJ
ZiBubyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSwgYQorcG9pbnRlciB0byBhbiBl
bXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCitJZiBtb3JlIHRoYW4gb25lIGJpdCBpbiB0aGUgbWFz
ayBpcyBzZXQsIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyB1bmRlZmluZWQuCisuU2ggU0VFIEFMU08K
Ky5YciBxdWVyeWxvY2FsZSAzICwKKy5YciBsb2NhbGVkZWYgMQpkaWZmIC0tZ2l0IGEvbGliL2xp
YmMvbG9jYWxlL3hsb2NhbGUuYyBiL2xpYi9saWJjL2xvY2FsZS94bG9jYWxlLmMKaW5kZXggODcx
NjBiMjZiNGQuLmRjNDkyYzA4N2ExIDEwMDY0NAotLS0gYS9saWIvbGliYy9sb2NhbGUveGxvY2Fs
ZS5jCisrKyBiL2xpYi9saWJjL2xvY2FsZS94bG9jYWxlLmMKQEAgLTIzMSw2ICsyMzEsOCBAQCBz
dGF0aWMgaW50IGR1cGNvbXBvbmVudChpbnQgdHlwZSwgbG9jYWxlX3QgYmFzZSwgbG9jYWxlX3Qg
bmV3KQogCQlpZiAobmV3LT5jb21wb25lbnRzW3R5cGVdKSB7CiAJCQlzdHJuY3B5KG5ldy0+Y29t
cG9uZW50c1t0eXBlXS0+bG9jYWxlLCBzcmMtPmxvY2FsZSwKIAkJCSAgICBFTkNPRElOR19MRU4p
OworCQkJc3RybmNweShuZXctPmNvbXBvbmVudHNbdHlwZV0tPnZlcnNpb24sIHNyYy0+dmVyc2lv
biwKKwkJCSAgICBMT0NBTEVfVkVSU0lPTl9MRU4pOwogCQl9CiAJfSBlbHNlIGlmIChiYXNlLT5j
b21wb25lbnRzW3R5cGVdKSB7CiAJCW5ldy0+Y29tcG9uZW50c1t0eXBlXSA9IHhsb2NhbGVfcmV0
YWluKGJhc2UtPmNvbXBvbmVudHNbdHlwZV0pOwpAQCAtMzU1LDYgKzM1NywyMCBAQCBjb25zdCBj
aGFyICpxdWVyeWxvY2FsZShpbnQgbWFzaywgbG9jYWxlX3QgbG9jKQogCXJldHVybiAoIkMiKTsK
IH0KIAorLyoKKyAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIGxvY2FsZSBmb3IgYSBwYXJ0
aWN1bGFyIGNvbXBvbmVudCBvZiBhIGxvY2FsZV90LgorICovCitjb25zdCBjaGFyICpxdWVyeWxv
Y2FsZXZlcnNpb24oaW50IG1hc2ssIGxvY2FsZV90IGxvYykKK3sKKwlpbnQgdHlwZSA9IGZmcyht
YXNrKSAtIDE7CisJRklYX0xPQ0FMRShsb2MpOworCWlmICh0eXBlID49IFhMQ19MQVNUKQorCQly
ZXR1cm4gKE5VTEwpOworCWlmIChsb2MtPmNvbXBvbmVudHNbdHlwZV0pCisJCXJldHVybiAobG9j
LT5jb21wb25lbnRzW3R5cGVdLT52ZXJzaW9uKTsKKwlyZXR1cm4gKCIiKTsKK30KKwogLyoKICAq
IEluc3RhbGxzIHRoZSBzcGVjaWZpZWQgbG9jYWxlX3QgYXMgdGhpcyB0aHJlYWQncyBsb2NhbGUu
CiAgKi8KZGlmZiAtLWdpdCBhL2xpYi9saWJjL2xvY2FsZS94bG9jYWxlX3ByaXZhdGUuaCBiL2xp
Yi9saWJjL2xvY2FsZS94bG9jYWxlX3ByaXZhdGUuaAppbmRleCA5YWE0ZDg2Yzg3Yy4uMzcwYzBh
NTNhZjEgMTAwNjQ0Ci0tLSBhL2xpYi9saWJjL2xvY2FsZS94bG9jYWxlX3ByaXZhdGUuaAorKysg
Yi9saWIvbGliYy9sb2NhbGUveGxvY2FsZV9wcml2YXRlLmgKQEAgLTc0LDYgKzc0LDggQEAgX1N0
YXRpY19hc3NlcnQoWExDX1RJTUUgPT0gTENfVElNRSAtIDEsCiBfU3RhdGljX2Fzc2VydChYTENf
TUVTU0FHRVMgPT0gTENfTUVTU0FHRVMgLSAxLAogICAgICAgICAgICAgICAgIlhMQ19NRVNTQUdF
UyBkb2Vzbid0IG1hdGNoIHRoZSBMQ19NRVNTQUdFUyB2YWx1ZS4iKTsKIAorI2RlZmluZSBMT0NB
TEVfVkVSU0lPTl9MRU4gMTEKKwogLyoqCiAgKiBIZWFkZXIgdXNlZCBmb3Igb2JqZWN0cyB0aGF0
IGFyZSByZWZlcmVuY2UgY291bnRlZC4gIE9iamVjdHMgbWF5IG9wdGlvbmFsbHkKICAqIGhhdmUg
YSBkZXN0cnVjdG9yIGFzc29jaWF0ZWQsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBkZXN0cm95
aW5nIHRoZQpAQCAtOTksNiArMTAxLDggQEAgc3RydWN0IHhsb2NhbGVfY29tcG9uZW50IHsKIAlz
dHJ1Y3QgeGxvY2FsZV9yZWZjb3VudGVkIGhlYWRlcjsKIAkvKiogTmFtZSBvZiB0aGUgbG9jYWxl
IHVzZWQgZm9yIHRoaXMgY29tcG9uZW50LiAqLwogCWNoYXIgbG9jYWxlW0VOQ09ESU5HX0xFTisx
XTsKKwkvKiogVmVyc2lvbiBvZiB0aGUgZGF0YSBmb3IgdGhpcyBjb21wb25lbnQuICovCisJY2hh
ciB2ZXJzaW9uW0xPQ0FMRV9WRVJTSU9OX0xFTisxXTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEv
dXNyLmJpbi9sb2NhbGVkZWYvY29sbGF0ZS5jIGIvdXNyLmJpbi9sb2NhbGVkZWYvY29sbGF0ZS5j
CmluZGV4IGQyZThkY2I5MjJhLi5hNmQ4MTg5MDc0MiAxMDA2NDQKLS0tIGEvdXNyLmJpbi9sb2Nh
bGVkZWYvY29sbGF0ZS5jCisrKyBiL3Vzci5iaW4vbG9jYWxlZGVmL2NvbGxhdGUuYwpAQCAtMTEx
Myw3ICsxMTEzLDggQEAgZHVtcF9jb2xsYXRlKHZvaWQpCiAJY29sbGVsZW1fdAkJKmNlOwogCWNv
bGxjaGFyX3QJCSpjYzsKIAlzdWJzdF90CQkJKnNiOwotCWNoYXIJCQl2ZXJzW0NPTExBVEVfU1RS
X0xFTl07CisJY2hhcgkJCWZvcm1hdF92ZXJzaW9uW0NPTExBVEVfRk9STUFUX1ZFUlNJT05fTEVO
XTsKKwljaGFyCQkJZGF0YV92ZXJzaW9uW0NPTExBVEVfREFUQV9WRVJTSU9OX0xFTl07CiAJY29s
bGF0ZV9jaGFyX3QJCWNoYXJzW1VDSEFSX01BWCArIDFdOwogCWNvbGxhdGVfbGFyZ2VfdAkJKmxh
cmdlOwogCWNvbGxhdGVfc3Vic3RfdAkJKnN1YnN0W0NPTExfV0VJR0hUU19NQVhdOwpAQCAtMTE1
NCw4ICsxMTU1LDEyIEBAIGR1bXBfY29sbGF0ZSh2b2lkKQogCX0KIAogCSh2b2lkKSBtZW1zZXQo
JmNoYXJzLCAwLCBzaXplb2YgKGNoYXJzKSk7Ci0JKHZvaWQpIG1lbXNldCh2ZXJzLCAwLCBDT0xM
QVRFX1NUUl9MRU4pOwotCSh2b2lkKSBzdHJsY3B5KHZlcnMsIENPTExBVEVfVkVSU0lPTiwgc2l6
ZW9mICh2ZXJzKSk7CisJKHZvaWQpIG1lbXNldChmb3JtYXRfdmVyc2lvbiwgMCwgQ09MTEFURV9G
T1JNQVRfVkVSU0lPTl9MRU4pOworCSh2b2lkKSBzdHJsY3B5KGZvcm1hdF92ZXJzaW9uLCBDT0xM
QVRFX1ZFUlNJT04sCisJCSAgICAgICBzaXplb2YgKGZvcm1hdF92ZXJzaW9uKSk7CisJKHZvaWQp
IG1lbXNldChkYXRhX3ZlcnNpb24sIDAsIENPTExBVEVfREFUQV9WRVJTSU9OX0xFTik7CisJaWYg
KHZlcnNpb24pCisJCSh2b2lkKSBzdHJsY3B5KGRhdGFfdmVyc2lvbiwgdmVyc2lvbiwgc2l6ZW9m
IChkYXRhX3ZlcnNpb24pKTsKIAogCS8qCiAJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgYXJy
YW5nZSBmb3IgdGhlIFVOREVGSU5FRCBmaWVsZApAQCAtMTI4OCw3ICsxMjkzLDggQEAgZHVtcF9j
b2xsYXRlKHZvaWQpCiAKIAkvKiBUaW1lIHRvIHdyaXRlIHRoZSBlbnRpcmUgZGF0YSBzZXQgb3V0
ICovCiAKLQlpZiAoKHdyX2NhdGVnb3J5KHZlcnMsIENPTExBVEVfU1RSX0xFTiwgZikgPCAwKSB8
fAorCWlmICgod3JfY2F0ZWdvcnkoZm9ybWF0X3ZlcnNpb24sIENPTExBVEVfRk9STUFUX1ZFUlNJ
T05fTEVOLCBmKSA8IDApIHx8CisJICAgICh3cl9jYXRlZ29yeShkYXRhX3ZlcnNpb24sIENPTExB
VEVfREFUQV9WRVJTSU9OX0xFTiwgZikgPCAwKSB8fAogCSAgICAod3JfY2F0ZWdvcnkoJmNvbGxp
bmZvLCBzaXplb2YgKGNvbGxpbmZvKSwgZikgPCAwKSB8fAogCSAgICAod3JfY2F0ZWdvcnkoJmNo
YXJzLCBzaXplb2YgKGNoYXJzKSwgZikgPCAwKSkgewogCQlyZXR1cm47CmRpZmYgLS1naXQgYS91
c3IuYmluL2xvY2FsZWRlZi9sb2NhbGVkZWYuMSBiL3Vzci5iaW4vbG9jYWxlZGVmL2xvY2FsZWRl
Zi4xCmluZGV4IGYwOTZjYTA1MzM2Li5mMzc1MTdmM2M4YSAxMDA2NDQKLS0tIGEvdXNyLmJpbi9s
b2NhbGVkZWYvbG9jYWxlZGVmLjEKKysrIGIvdXNyLmJpbi9sb2NhbGVkZWYvbG9jYWxlZGVmLjEK
QEAgLTEzMSw2ICsxMzEsMTAgQEAgSWYgbm90IHN1cHBsaWVkLCB0aGVuIGRlZmF1bHQgc2NyZWVu
IHdpZHRocyB3aWxsIGJlIGFzc3VtZWQsIHdoaWNoIHdpbGwKIGdlbmVyYWxseSBub3QgYWNjb3Vu
dCBmb3IgRWFzdCBBc2lhbiBlbmNvZGluZ3MgcmVxdWlyaW5nIG1vcmUgdGhhbiBhIHNpbmdsZQog
Y2hhcmFjdGVyIGNlbGwgdG8gZGlzcGxheSwgbm9yIGZvciBjb21iaW5pbmcgb3IgYWNjZW50IG1h
cmtzIHRoYXQgb2NjdXB5CiBubyBhZGRpdGlvbmFsIHNjcmVlbiB3aWR0aC4KKy5JdCBGbCBWIEFy
IHZlcnNpb24KK1NwZWNpZmllcyBhIHZlcnNpb24gc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHNvdXJj
ZSBjb2xsYXRpb24gZGF0YS4gIFRoaXMKK3N0cmluZyBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHF1
ZXJ5bG9jYWxldmVyc2lvbigzKSwgYW5kIGlzIGludGVudGVkIHRvIGFsbG93CithcHBsaWNhdGlv
bnMgdG8gZGV0ZWN0IHdoZW4gdGhlIGRlZmluaXRpb24gb2YgYSBjb2xsYXRpb24gaGFzIGNoYW5n
ZWQuCiAuRWwKIC5QcAogVGhlIGZvbGxvd2luZyBvcGVyYW5kcyBhcmUgcmVxdWlyZWQ6CkBAIC0x
OTUsNyArMTk5LDggQEAgSWYgYW4gZXJyb3IgaXMgZGV0ZWN0ZWQsIG5vIHBlcm1hbmVudCBvdXRw
dXQgd2lsbCBiZSBjcmVhdGVkLgogLlhyIGljb252X29wZW4gMyAsCiAuWHIgbmxfbGFuZ2luZm8g
MyAsCiAuWHIgc3RyZnRpbWUgMyAsCi0uWHIgZW52aXJvbiA3CisuWHIgZW52aXJvbiA3ICwKKy5Y
ciBxdWVyeWxvY2FsZXZlcnNpb24gMQogLlNoIFdBUk5JTkdTCiBJZiB3YXJuaW5ncyBvY2N1ciwg
cGVybWFuZW50IG91dHB1dCB3aWxsIGJlIGNyZWF0ZWQgaWYgdGhlCiAuRmwgYwpkaWZmIC0tZ2l0
IGEvdXNyLmJpbi9sb2NhbGVkZWYvbG9jYWxlZGVmLmMgYi91c3IuYmluL2xvY2FsZWRlZi9sb2Nh
bGVkZWYuYwppbmRleCA0NzNkZTdiM2RiMS4uYzEzZmY3YWJhNzMgMTAwNjQ0Ci0tLSBhL3Vzci5i
aW4vbG9jYWxlZGVmL2xvY2FsZWRlZi5jCisrKyBiL3Vzci5iaW4vbG9jYWxlZGVmL2xvY2FsZWRl
Zi5jCkBAIC01OSw2ICs1OSw3IEBAIGludCB1bmRlZm9rID0gMDsKIGludCB3YXJub2sgPSAwOwog
c3RhdGljIGNoYXIgKmxvY25hbWUgPSBOVUxMOwogc3RhdGljIGNoYXIgbG9jcGF0aFtQQVRIX01B
WF07CitjaGFyICp2ZXJzaW9uID0gTlVMTDsKIAogY29uc3QgY2hhciAqCiBjYXRlZ29yeV9uYW1l
KHZvaWQpCkBAIC0yMzYsNiArMjM3LDcgQEAgdXNhZ2Uodm9pZCkKIAkodm9pZCkgZnByaW50Zihz
dGRlcnIsICIgIC11IGVuY29kaW5nIDogYXNzdW1lIGVuY29kaW5nXG4iKTsKIAkodm9pZCkgZnBy
aW50ZihzdGRlcnIsICIgIC13IHdpZHRocyAgIDogdXNlIHNjcmVlbiB3aWR0aHMgZmlsZVxuIik7
CiAJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiICAtaSBsb2NzcmMgICA6IHNvdXJjZSBmaWxlIGZv
ciBsb2NhbGVcbiIpOworCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiAgLVYgdmVyc2lvbiAgOiB2
ZXJzaW9uIHN0cmluZyBmb3IgbG9jYWxlXG4iKTsKIAlleGl0KDQpOwogfQogCkBAIC0yNjAsNyAr
MjYyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAkodm9pZCkgc2V0bG9jYWxl
KExDX0FMTCwgIiIpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJ3Omk6Y2Y6
dTp2VUQiKSkgIT0gLTEpIHsKKwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgInc6aTpj
Zjp1OnZVRFY6IikpICE9IC0xKSB7CiAJCXN3aXRjaCAoYykgewogCQljYXNlICdEJzoKIAkJCWJz
ZCA9IDE7CkBAIC0yODksNiArMjkxLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ
CWNhc2UgJz8nOgogCQkJdXNhZ2UoKTsKIAkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCXZlcnNp
b24gPSBvcHRhcmc7CisJCQlicmVhazsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvdXNyLmJpbi9s
b2NhbGVkZWYvbG9jYWxlZGVmLmggYi91c3IuYmluL2xvY2FsZWRlZi9sb2NhbGVkZWYuaAppbmRl
eCA0MzY3YTE5ZTJlOC4uNmNhNTBlMTk4ZjEgMTAwNjQ0Ci0tLSBhL3Vzci5iaW4vbG9jYWxlZGVm
L2xvY2FsZWRlZi5oCisrKyBiL3Vzci5iaW4vbG9jYWxlZGVmL2xvY2FsZWRlZi5oCkBAIC01Myw2
ICs1Myw4IEBAIGV4dGVybiBpbnQgdW5kZWZvazsJLyogbW9zdGx5IGlnbm9yZSB1bmRlZmluZWQg
c3ltYm9scyAqLwogZXh0ZXJuIGludCB3YXJub2s7CiBleHRlcm4gaW50IHdhcm5pbmdzOwogCitl
eHRlcm4gY2hhciAqdmVyc2lvbjsKKwogaW50IHl5bGV4KHZvaWQpOwogdm9pZCB5eWVycm9yKGNv
bnN0IGNoYXIgKik7CiBfTm9yZXR1cm4gdm9pZCBlcnJmKGNvbnN0IGNoYXIgKiwgLi4uKSBfX3By
aW50Zmxpa2UoMSwgMik7Ci0tIAoyLjE4LjAKCg==
--000000000000638e370575343de6--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CADLWmXWY0doSQ-7uoBC0JUzCgZTx9iw-k_viYWB7ze8Pi7R8gw>