Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1shC7M-00EQ1k-FK for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Aug 2024 18:01:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1shC7I-004U8q-MV for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Aug 2024 18:01:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1shC7I-004U8i-2N for pgsql-hackers@lists.postgresql.org; Thu, 22 Aug 2024 18:01:00 +0000 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1shC7F-000wAe-De for pgsql-hackers@postgresql.org; Thu, 22 Aug 2024 18:00:59 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2021aeee5e4so8391405ad.0 for ; Thu, 22 Aug 2024 11:00:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1724349656; x=1724954456; darn=postgresql.org; h=mime-version:user-agent:date:to:from:subject:message-id:from:to:cc :subject:date:message-id:reply-to; bh=A7HSkEsbWmOGFgi7O5FPuUNPpU7dyIqoecADT3c6WFU=; b=HdAdlhIpvnWWNcMn678Rt8QbZ8ZXTR7u9+g7cfolCglltLEGNumoB0eVgTr3iUn1me MvBEQQG5NVge0T+XH22pKikQiPHvLKIXOwfRILSxHpbEddsnuW/Fwgn/nntIg91KhC1q 3gefLJ3p4DmZYMpih6mBMKRuDAAVTKu6OoJbbgzVMLW0gtFIJOURZ/fTBcgtPu6yLyi3 2RhWcb/Yy61OdIsqBaiYDDt7KtVJK5BTd3f5372S0HfAtP3ukBIvamAGGbdtnvrq3hK+ 7tohi5Orq6wVf8lkxczRhMy7criQrMQy34YKyjamomWy7dtmc2bTE7N5jlzVidzjsyqg y44g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724349656; x=1724954456; h=mime-version:user-agent:date:to:from:subject:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=A7HSkEsbWmOGFgi7O5FPuUNPpU7dyIqoecADT3c6WFU=; b=PMw+7WaVTa5M8wwn3K1XRWbzerjbgohp+3LeDaDywLOeSO46X5ozCCqMT7yUKkD/O2 mLgUUifTlw/eij1Ml25KSPpBd0WKnamVzYWpBCyW379GOT3SDi0ikCAYUvUS+1ZO+nGD dF+0d60uiTzFb1pMHkh2CGC+0d97J5wJVgDiXHNm8RxNJ1d3tqWb92t0mPDyB7F5BTX3 6F06f8LAyIBAPUuzEWF1b1fIwoaVlGQgER6f/WRXdrz5yugwHIBEJ7OTR6b7g3B3J326 Tf1y5I6aXam/VXJKZQEYiT/LPKXztBtgZR1zVt8fA07cytCqAvRyYnGF5ls6hWOfXHjT kPiw== X-Gm-Message-State: AOJu0Yx2vsGJtLDlKTe687ZFm8dXLwmbjWZqvUFqH7EzxnG4hb/jpNRb RdnGZjOBiD08qvYIBKZzRDz0tXkLU/vkRvSsKY+AeOJszJ2E4EWqAcSVQuMcTjtOTAKbnjGBd9M = X-Google-Smtp-Source: AGHT+IEggNCCPVCHVxl6MvCl/EGlsGSPcO9OIZ4UmKIfaKBCEwDRLM453riq7aTKbyJfJHBzKNazfA== X-Received: by 2002:a17:902:eccf:b0:201:fe7d:babe with SMTP id d9443c01a7336-2038834a25bmr32935715ad.35.1724349655716; Thu, 22 Aug 2024 11:00:55 -0700 (PDT) Received: from jeff-laptop.lan (c-76-102-242-158.hsd1.ca.comcast.net. [76.102.242.158]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-203855ddb7esm15450535ad.153.2024.08.22.11.00.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Aug 2024 11:00:55 -0700 (PDT) Message-ID: <2d758e07dff26bcc7cbe2aec57431329bfe3679a.camel@j-davis.com> Subject: Refactor: allow pg_strncoll(), etc., to accept -1 length for NUL-terminated cstrings. From: Jeff Davis To: pgsql-hackers@postgresql.org Date: Thu, 22 Aug 2024 11:00:54 -0700 Content-Type: multipart/mixed; boundary="=-tbqRUFhCBkwqPmgVZT1e" User-Agent: Evolution 3.44.4-0ubuntu2 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-tbqRUFhCBkwqPmgVZT1e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Like ICU, allow -1 length to mean that the input string is NUL- terminated for pg_strncoll(), pg_strnxfrm(), and pg_strnxfrm_prefix(). This simplifies the API and code a bit. Along with some other refactoring in this area, we are getting close to the point where the collation provider can just be a table of methods, which means we can add an extension hook to provide a different method table. That still requires more work, I'm just mentioning it here for context. Regards, Jeff Davis --=-tbqRUFhCBkwqPmgVZT1e Content-Disposition: attachment; filename*0=v1-0001-Allow-length-1-for-NUL-terminated-input-to-pg_str.pat; filename*1=ch Content-Type: text/x-patch; name="v1-0001-Allow-length-1-for-NUL-terminated-input-to-pg_str.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA2ZjBjMGE5ZTA1MDM5Y2QyOTVjNmMwOTBiM2Q5OGQzODEyNDRiMzVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDIxIEF1ZyAyMDI0IDEwOjU5OjI4IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2MV0gQWxsb3cg bGVuZ3RoPS0xIGZvciBOVUwtdGVybWluYXRlZCBpbnB1dCB0byBwZ19zdHJuY29sbCgpLAogZXRj LgoKTGlrZSBJQ1UsIGFsbG93IGEgbGVuZ3RoIG9mIC0xIHRvIGJlIHNwZWNpZmllZCBmb3IgTlVM LXRlcm1pbmF0ZWQKYXJndW1lbnRzIHRvIHBnX3N0cm5jb2xsKCksIHBnX3N0cm54ZnJtKCksIGFu ZCBwZ19zdHJueGZybV9wcmVmaXgoKS4KClNpbXBsaWZpZXMgdGhlIGNvZGUgYW5kIGNvbW1lbnRz LgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyB8IDE4NiArKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2NCBpbnNlcnRpb25zKCspLCAx MjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xv Y2FsZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCmluZGV4IDQ4YjdlMTZk ODFiLi4yNmIwZjQ1NzdmMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xv Y2FsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwpAQCAtMTgwOSw2 ICsxODA5LDggQEAgZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihjaGFyIGNvbGxwcm92aWRl ciwgY29uc3QgY2hhciAqY29sbGNvbGxhdGUpCiAgKgogICogV2luMzIgZG9lcyBub3QgaGF2ZSBV VEYtOC4gQ29udmVydCBVVEY4IGFyZ3VtZW50cyB0byB3aWRlIGNoYXJhY3RlcnMgYW5kCiAgKiBp bnZva2Ugd2NzY29sbF9sKCkuCisgKgorICogQW4gaW5wdXQgc3RyaW5nIGxlbmd0aCBvZiAtMSBt ZWFucyB0aGF0IGl0J3MgTlVMLXRlcm1pbmF0ZWQuCiAgKi8KICNpZmRlZiBXSU4zMgogc3RhdGlj IGludApAQCAtMTgxOSw4ICsxODIxLDggQEAgcGdfc3RybmNvbGxfbGliY193aW4zMl91dGY4KGNv bnN0IGNoYXIgKmFyZzEsIHNpemVfdCBsZW4xLCBjb25zdCBjaGFyICphcmcyLAogCWNoYXIJICAg KmJ1ZiA9IHNidWY7CiAJY2hhcgkgICAqYTFwLAogCQkJICAgKmEycDsKLQlpbnQJCQlhMWxlbiA9 IGxlbjEgKiAyICsgMjsKLQlpbnQJCQlhMmxlbiA9IGxlbjIgKiAyICsgMjsKKwlpbnQJCQlhMWxl bjsKKwlpbnQJCQlhMmxlbjsKIAlpbnQJCQlyOwogCWludAkJCXJlc3VsdDsKIApAQCAtMTgzMCw2 ICsxODMyLDE0IEBAIHBnX3N0cm5jb2xsX2xpYmNfd2luMzJfdXRmOChjb25zdCBjaGFyICphcmcx LCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwKIAlBc3NlcnQoZmFsc2UpOwogI2VuZGlm CiAKKwlpZiAobGVuMSA9PSAtMSkKKwkJbGVuMSA9IHN0cmxlbihhcmcxKTsKKwlpZiAobGVuMiA9 PSAtMSkKKwkJbGVuMiA9IHN0cmxlbihhcmcyKTsKKworCWExbGVuID0gbGVuMSAqIDIgKyAyOwor CWEybGVuID0gbGVuMiAqIDIgKyAyOworCiAJaWYgKGExbGVuICsgYTJsZW4gPiBURVhUQlVGTEVO KQogCQlidWYgPSBwYWxsb2MoYTFsZW4gKyBhMmxlbik7CiAKQEAgLTE4NzYsNDAgKzE4ODYsMTAg QEAgcGdfc3RybmNvbGxfbGliY193aW4zMl91dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNpemVfdCBs ZW4xLCBjb25zdCBjaGFyICphcmcyLAogfQogI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCiAKLS8q Ci0gKiBwZ19zdHJjb2xsX2xpYmMKLSAqCi0gKiBDYWxsIHN0cmNvbGxfbCgpIG9yIHdjc2NvbGxf bCgpIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4gbG9jYWxlLAotICogcGxhdGZvcm0sIGFu ZCBkYXRhYmFzZSBlbmNvZGluZy4gSWYgdGhlIGxvY2FsZSBpcyBOVUxMLCB1c2UgdGhlIGRhdGFi YXNlCi0gKiBjb2xsYXRpb24uCi0gKgotICogQXJndW1lbnRzIG11c3QgYmUgZW5jb2RlZCBpbiB0 aGUgZGF0YWJhc2UgZW5jb2RpbmcgYW5kIG51bC10ZXJtaW5hdGVkLgotICovCi1zdGF0aWMgaW50 Ci1wZ19zdHJjb2xsX2xpYmMoY29uc3QgY2hhciAqYXJnMSwgY29uc3QgY2hhciAqYXJnMiwgcGdf bG9jYWxlX3QgbG9jYWxlKQotewotCWludAkJCXJlc3VsdDsKLQotCUFzc2VydChsb2NhbGUtPnBy b3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKTsKLSNpZmRlZiBXSU4zMgotCWlmIChHZXREYXRh YmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKLQl7Ci0JCXNpemVfdAkJbGVuMSA9IHN0cmxlbihh cmcxKTsKLQkJc2l6ZV90CQlsZW4yID0gc3RybGVuKGFyZzIpOwotCi0JCXJlc3VsdCA9IHBnX3N0 cm5jb2xsX2xpYmNfd2luMzJfdXRmOChhcmcxLCBsZW4xLCBhcmcyLCBsZW4yLCBsb2NhbGUpOwot CX0KLQllbHNlCi0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KLQkJcmVzdWx0ID0gc3RyY29sbF9s KGFyZzEsIGFyZzIsIGxvY2FsZS0+aW5mby5sdCk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCiAv KgogICogcGdfc3RybmNvbGxfbGliYwogICoKLSAqIE51bC10ZXJtaW5hdGUgdGhlIGFyZ3VtZW50 cyBhbmQgY2FsbCBwZ19zdHJjb2xsX2xpYmMoKS4KKyAqIEFuIGlucHV0IHN0cmluZyBsZW5ndGgg b2YgLTEgbWVhbnMgdGhhdCBpdCdzIE5VTC10ZXJtaW5hdGVkLgogICovCiBzdGF0aWMgaW50CiBw Z19zdHJuY29sbF9saWJjKGNvbnN0IGNoYXIgKmFyZzEsIHNpemVfdCBsZW4xLCBjb25zdCBjaGFy ICphcmcyLCBzaXplX3QgbGVuMiwKQEAgLTE5MTcsMTAgKzE4OTcsMTAgQEAgcGdfc3RybmNvbGxf bGliYyhjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgc2l6 ZV90IGxlbjIsCiB7CiAJY2hhcgkJc2J1ZltURVhUQlVGTEVOXTsKIAljaGFyCSAgICpidWYgPSBz YnVmOwotCXNpemVfdAkJYnVmc2l6ZTEgPSBsZW4xICsgMTsKLQlzaXplX3QJCWJ1ZnNpemUyID0g bGVuMiArIDE7Ci0JY2hhcgkgICAqYXJnMW47Ci0JY2hhcgkgICAqYXJnMm47CisJc2l6ZV90CQli dWZzaXplMSA9IChsZW4xID09IC0xKSA/IDAgOiBsZW4xICsgMTsKKwlzaXplX3QJCWJ1ZnNpemUy ID0gKGxlbjIgPT0gLTEpID8gMCA6IGxlbjIgKyAxOworCWNvbnN0IGNoYXIgKmFyZzFuOworCWNv bnN0IGNoYXIgKmFyZzJuOwogCWludAkJCXJlc3VsdDsKIAogCUFzc2VydChsb2NhbGUtPnByb3Zp ZGVyID09IENPTExQUk9WSURFUl9MSUJDKTsKQEAgLTE5MzQsMTYgKzE5MTQsMzIgQEAgcGdfc3Ry bmNvbGxfbGliYyhjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJn Miwgc2l6ZV90IGxlbjIsCiAJaWYgKGJ1ZnNpemUxICsgYnVmc2l6ZTIgPiBURVhUQlVGTEVOKQog CQlidWYgPSBwYWxsb2MoYnVmc2l6ZTEgKyBidWZzaXplMik7CiAKLQlhcmcxbiA9IGJ1ZjsKLQlh cmcybiA9IGJ1ZiArIGJ1ZnNpemUxOworCS8qIG51bC10ZXJtaW5hdGUgYXJndW1lbnRzIGlmIG5l Y2Vzc2FyeSAqLworCWlmIChsZW4xID09IC0xKQorCXsKKwkJYXJnMW4gPSBhcmcxOworCX0KKwll bHNlCisJeworCQljaGFyICpidWYxID0gYnVmOworCQltZW1jcHkoYnVmMSwgYXJnMSwgbGVuMSk7 CisJCWJ1ZjFbbGVuMV0gPSAnXDAnOworCQlhcmcxbiA9IGJ1ZjE7CisJfQogCi0JLyogbnVsLXRl cm1pbmF0ZSBhcmd1bWVudHMgKi8KLQltZW1jcHkoYXJnMW4sIGFyZzEsIGxlbjEpOwotCWFyZzFu W2xlbjFdID0gJ1wwJzsKLQltZW1jcHkoYXJnMm4sIGFyZzIsIGxlbjIpOwotCWFyZzJuW2xlbjJd ID0gJ1wwJzsKKwlpZiAobGVuMiA9PSAtMSkKKwl7CisJCWFyZzJuID0gYXJnMjsKKwl9CisJZWxz ZQorCXsKKwkJY2hhciAqYnVmMiA9IGJ1ZiArIGJ1ZnNpemUxOworCQltZW1jcHkoYnVmMiwgYXJn MiwgbGVuMik7CisJCWJ1ZjJbbGVuMl0gPSAnXDAnOworCQlhcmcybiA9IGJ1ZjI7CisJfQogCi0J cmVzdWx0ID0gcGdfc3RyY29sbF9saWJjKGFyZzFuLCBhcmcybiwgbG9jYWxlKTsKKwlyZXN1bHQg PSBzdHJjb2xsX2woYXJnMW4sIGFyZzJuLCBsb2NhbGUtPmluZm8ubHQpOwogCiAJaWYgKGJ1ZiAh PSBzYnVmKQogCQlwZnJlZShidWYpOwpAQCAtMjAxNSw4ICsyMDExLDYgQEAgcGdfc3RybmNvbGxf aWN1X25vX3V0ZjgoY29uc3QgY2hhciAqYXJnMSwgaW50MzJfdCBsZW4xLAogICogQ2FsbCB1Y29s X3N0cmNvbGxVVEY4KCkgb3IgdWNvbF9zdHJjb2xsKCkgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBn aXZlbgogICogZGF0YWJhc2UgZW5jb2RpbmcuIEFuIGFyZ3VtZW50IGxlbmd0aCBvZiAtMSBtZWFu cyB0aGUgc3RyaW5nIGlzCiAgKiBOVUwtdGVybWluYXRlZC4KLSAqCi0gKiBBcmd1bWVudHMgbXVz dCBiZSBlbmNvZGVkIGluIHRoZSBkYXRhYmFzZSBlbmNvZGluZy4KICAqLwogc3RhdGljIGludAog cGdfc3RybmNvbGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIGludDMyX3QgbGVuMSwgY29uc3QgY2hh ciAqYXJnMiwgaW50MzJfdCBsZW4yLApAQCAtMjA1NCwxNSArMjA0OCw3IEBAIHBnX3N0cm5jb2xs X2ljdShjb25zdCBjaGFyICphcmcxLCBpbnQzMl90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIGlu dDMyX3QgbGVuMiwKIC8qCiAgKiBwZ19zdHJjb2xsCiAgKgotICogQ2FsbCB1Y29sX3N0cmNvbGxV VEY4KCksIHVjb2xfc3RyY29sbCgpLCBzdHJjb2xsX2woKSBvciB3Y3Njb2xsX2woKSBhcwotICog YXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBsb2NhbGUsIHBsYXRmb3JtLCBhbmQgZGF0YWJhc2Ug ZW5jb2RpbmcuIElmIHRoZQotICogbG9jYWxlIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgZGF0 YWJhc2UgY29sbGF0aW9uLgotICoKLSAqIEFyZ3VtZW50cyBtdXN0IGJlIGVuY29kZWQgaW4gdGhl IGRhdGFiYXNlIGVuY29kaW5nIGFuZCBudWwtdGVybWluYXRlZC4KLSAqCi0gKiBUaGUgY2FsbGVy IGlzIHJlc3BvbnNpYmxlIGZvciBicmVha2luZyB0aWVzIGlmIHRoZSBjb2xsYXRpb24gaXMKLSAq IGRldGVybWluaXN0aWM7IHRoaXMgbWFpbnRhaW5zIGNvbnNpc3RlbmN5IHdpdGggcGdfc3RyeGZy bSgpLCB3aGljaCBjYW5ub3QKLSAqIGVhc2lseSBhY2NvdW50IGZvciBkZXRlcm1pbmlzdGljIGNv bGxhdGlvbnMuCisgKiBMaWtlIHBnX3N0cm5jb2xsIGZvciBOVUwtdGVybWluYXRlZCBpbnB1dCBz dHJpbmdzLgogICovCiBpbnQKIHBnX3N0cmNvbGwoY29uc3QgY2hhciAqYXJnMSwgY29uc3QgY2hh ciAqYXJnMiwgcGdfbG9jYWxlX3QgbG9jYWxlKQpAQCAtMjA3MCw3ICsyMDU2LDcgQEAgcGdfc3Ry Y29sbChjb25zdCBjaGFyICphcmcxLCBjb25zdCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2Nh bGUpCiAJaW50CQkJcmVzdWx0OwogCiAJaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJ REVSX0xJQkMpCi0JCXJlc3VsdCA9IHBnX3N0cmNvbGxfbGliYyhhcmcxLCBhcmcyLCBsb2NhbGUp OworCQlyZXN1bHQgPSBwZ19zdHJuY29sbF9saWJjKGFyZzEsIC0xLCBhcmcyLCAtMSwgbG9jYWxl KTsKICNpZmRlZiBVU0VfSUNVCiAJZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJP VklERVJfSUNVKQogCQlyZXN1bHQgPSBwZ19zdHJuY29sbF9pY3UoYXJnMSwgLTEsIGFyZzIsIC0x LCBsb2NhbGUpOwpAQCAtMjA4OSwxMSArMjA3NSw4IEBAIHBnX3N0cmNvbGwoY29uc3QgY2hhciAq YXJnMSwgY29uc3QgY2hhciAqYXJnMiwgcGdfbG9jYWxlX3QgbG9jYWxlKQogICogYXBwcm9wcmlh dGUgZm9yIHRoZSBnaXZlbiBsb2NhbGUsIHBsYXRmb3JtLCBhbmQgZGF0YWJhc2UgZW5jb2Rpbmcu IElmIHRoZQogICogbG9jYWxlIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgZGF0YWJhc2UgY29s bGF0aW9uLgogICoKLSAqIEFyZ3VtZW50cyBtdXN0IGJlIGVuY29kZWQgaW4gdGhlIGRhdGFiYXNl IGVuY29kaW5nLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbWF5IG5lZWQgdG8gbnVsLXRlcm1pbmF0 ZSB0aGUgYXJndW1lbnRzIGZvciBsaWJjIGZ1bmN0aW9uczsKLSAqIHNvIGlmIHRoZSBjYWxsZXIg YWxyZWFkeSBoYXMgbnVsLXRlcm1pbmF0ZWQgc3RyaW5ncywgaXQgc2hvdWxkIGNhbGwKLSAqIHBn X3N0cmNvbGwoKSBpbnN0ZWFkLgorICogVGhlIGlucHV0IHN0cmluZ3MgbXVzdCBiZSBlbmNvZGVk IGluIHRoZSBkYXRhYmFzZSBlbmNvZGluZy4gSWYgYW4gaW5wdXQKKyAqIHN0cmluZyBpcyBOVUwt dGVybWluYXRlZCwgaXRzIGxlbmd0aCBtYXkgYmUgc3BlY2lmaWVkIGFzIC0xLgogICoKICAqIFRo ZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGJyZWFraW5nIHRpZXMgaWYgdGhlIGNvbGxhdGlv biBpcwogICogZGV0ZXJtaW5pc3RpYzsgdGhpcyBtYWludGFpbnMgY29uc2lzdGVuY3kgd2l0aCBw Z19zdHJueGZybSgpLCB3aGljaCBjYW5ub3QKQEAgLTIxMTksMTQgKzIxMDIsNiBAQCBwZ19zdHJu Y29sbChjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgc2l6 ZV90IGxlbjIsCiB9CiAKIAotc3RhdGljIHNpemVfdAotcGdfc3RyeGZybV9saWJjKGNoYXIgKmRl c3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLAotCQkJCXBnX2xvY2FsZV90IGxv Y2FsZSkKLXsKLQlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQyk7 Ci0JcmV0dXJuIHN0cnhmcm1fbChkZXN0LCBzcmMsIGRlc3RzaXplLCBsb2NhbGUtPmluZm8ubHQp OwotfQotCiBzdGF0aWMgc2l6ZV90CiBwZ19zdHJueGZybV9saWJjKGNoYXIgKmRlc3QsIGNvbnN0 IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGRlc3RzaXplLAogCQkJCSBwZ19sb2Nh bGVfdCBsb2NhbGUpCkBAIC0yMTM4LDE0ICsyMTEzLDE3IEBAIHBnX3N0cm54ZnJtX2xpYmMoY2hh ciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgZGVzdHNpemUs CiAKIAlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQyk7CiAKKwlp ZiAoc3JjbGVuID09IC0xKQorCQlyZXR1cm4gc3RyeGZybV9sKGRlc3QsIHNyYywgZGVzdHNpemUs IGxvY2FsZS0+aW5mby5sdCk7CisKIAlpZiAoYnVmc2l6ZSA+IFRFWFRCVUZMRU4pCiAJCWJ1ZiA9 IHBhbGxvYyhidWZzaXplKTsKIAotCS8qIG51bC10ZXJtaW5hdGUgYXJndW1lbnRzICovCisJLyog bnVsLXRlcm1pbmF0ZSBhcmd1bWVudCAqLwogCW1lbWNweShidWYsIHNyYywgc3JjbGVuKTsKIAli dWZbc3JjbGVuXSA9ICdcMCc7CiAKLQlyZXN1bHQgPSBwZ19zdHJ4ZnJtX2xpYmMoZGVzdCwgYnVm LCBkZXN0c2l6ZSwgbG9jYWxlKTsKKwlyZXN1bHQgPSBzdHJ4ZnJtX2woZGVzdCwgYnVmLCBkZXN0 c2l6ZSwgbG9jYWxlLT5pbmZvLmx0KTsKIAogCWlmIChidWYgIT0gc2J1ZikKIAkJcGZyZWUoYnVm KTsKQEAgLTIzMjYsMjAgKzIzMDQsNyBAQCBwZ19zdHJ4ZnJtX2VuYWJsZWQocGdfbG9jYWxlX3Qg bG9jYWxlKQogLyoKICAqIHBnX3N0cnhmcm0KICAqCi0gKiBUcmFuc2Zvcm1zICdzcmMnIHRvIGEg bnVsLXRlcm1pbmF0ZWQgc3RyaW5nIHN0b3JlZCBpbiAnZGVzdCcgc3VjaCB0aGF0Ci0gKiBvcmRp bmFyeSBzdHJjbXAoKSBvbiB0cmFuc2Zvcm1lZCBzdHJpbmdzIGlzIGVxdWl2YWxlbnQgdG8gcGdf c3RyY29sbCgpIG9uCi0gKiB1bnRyYW5zZm9ybWVkIHN0cmluZ3MuCi0gKgotICogVGhlIHByb3Zp ZGVkICdzcmMnIG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuIElmICdkZXN0c2l6ZScgaXMgemVybywg J2Rlc3QnCi0gKiBtYXkgYmUgTlVMTC4KLSAqCi0gKiBOb3QgYWxsIHByb3ZpZGVycyBzdXBwb3J0 IHBnX3N0cnhmcm0oKSBzYWZlbHkuIFRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrCi0gKiBwZ19zdHJ4 ZnJtX2VuYWJsZWQoKSBmaXJzdCwgb3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiB3 cm9uZwotICogcmVzdWx0cyBvciBhbiBlcnJvci4KLSAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIg b2YgYnl0ZXMgbmVlZGVkIChvciBtb3JlKSB0byBzdG9yZSB0aGUgdHJhbnNmb3JtZWQKLSAqIHN0 cmluZywgZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWwgYnl0ZS4gSWYgdGhlIHZhbHVlIHJl dHVybmVkIGlzCi0gKiAnZGVzdHNpemUnIG9yIGdyZWF0ZXIsIHRoZSByZXN1bHRpbmcgY29udGVu dHMgb2YgJ2Rlc3QnIGFyZSB1bmRlZmluZWQuCisgKiBMaWtlIHBnX3N0cm54ZnJtIGZvciBhIE5V TC10ZXJtaW5hdGVkIGlucHV0IHN0cmluZy4KICAqLwogc2l6ZV90CiBwZ19zdHJ4ZnJtKGNoYXIg KmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLCBwZ19sb2NhbGVfdCBsb2Nh bGUpCkBAIC0yMzQ3LDcgKzIzMTIsNyBAQCBwZ19zdHJ4ZnJtKGNoYXIgKmRlc3QsIGNvbnN0IGNo YXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiAJc2l6ZV90CQly ZXN1bHQgPSAwOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogCiAJaWYgKGxvY2FsZS0+cHJv dmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCi0JCXJlc3VsdCA9IHBnX3N0cnhmcm1fbGliYyhk ZXN0LCBzcmMsIGRlc3RzaXplLCBsb2NhbGUpOworCQlyZXN1bHQgPSBwZ19zdHJueGZybV9saWJj KGRlc3QsIHNyYywgLTEsIGRlc3RzaXplLCBsb2NhbGUpOwogI2lmZGVmIFVTRV9JQ1UKIAllbHNl IGlmIChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCiAJCXJlc3VsdCA9IHBn X3N0cm54ZnJtX2ljdShkZXN0LCBzcmMsIC0xLCBkZXN0c2l6ZSwgbG9jYWxlKTsKQEAgLTIzNjYs OCArMjMzMSw5IEBAIHBnX3N0cnhmcm0oY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXpl X3QgZGVzdHNpemUsIHBnX2xvY2FsZV90IGxvY2FsZSkKICAqIG9yZGluYXJ5IHN0cmNtcCgpIG9u IHRyYW5zZm9ybWVkIHN0cmluZ3MgaXMgZXF1aXZhbGVudCB0byBwZ19zdHJjb2xsKCkgb24KICAq IHVudHJhbnNmb3JtZWQgc3RyaW5ncy4KICAqCi0gKiAnc3JjJyBkb2VzIG5vdCBuZWVkIHRvIGJl IG51bC10ZXJtaW5hdGVkLiBJZiAnZGVzdHNpemUnIGlzIHplcm8sICdkZXN0JyBtYXkKLSAqIGJl IE5VTEwuCisgKiBUaGUgaW5wdXQgc3RyaW5nIG11c3QgYmUgZW5jb2RlZCBpbiB0aGUgZGF0YWJh c2UgZW5jb2RpbmcuIElmIHRoZSBpbnB1dAorICogc3RyaW5nIGlzIE5VTC10ZXJtaW5hdGVkLCBp dHMgbGVuZ3RoIG1heSBiZSBzcGVjaWZpZWQgYXMgLTEuIElmICdkZXN0c2l6ZScKKyAqIGlzIHpl cm8sICdkZXN0JyBtYXkgYmUgTlVMTC4KICAqCiAgKiBOb3QgYWxsIHByb3ZpZGVycyBzdXBwb3J0 IHBnX3N0cm54ZnJtKCkgc2FmZWx5LiBUaGUgY2FsbGVyIHNob3VsZCBjaGVjawogICogcGdfc3Ry eGZybV9lbmFibGVkKCkgZmlyc3QsIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4g d3JvbmcKQEAgLTIzNzYsMTAgKzIzNDIsNiBAQCBwZ19zdHJ4ZnJtKGNoYXIgKmRlc3QsIGNvbnN0 IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiAgKiBSZXR1 cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIChvciBtb3JlKSB0byBzdG9yZSB0aGUgdHJh bnNmb3JtZWQKICAqIHN0cmluZywgZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWwgYnl0ZS4g SWYgdGhlIHZhbHVlIHJldHVybmVkIGlzCiAgKiAnZGVzdHNpemUnIG9yIGdyZWF0ZXIsIHRoZSBy ZXN1bHRpbmcgY29udGVudHMgb2YgJ2Rlc3QnIGFyZSB1bmRlZmluZWQuCi0gKgotICogVGhpcyBm dW5jdGlvbiBtYXkgbmVlZCB0byBudWwtdGVybWluYXRlIHRoZSBhcmd1bWVudCBmb3IgbGliYyBm dW5jdGlvbnM7Ci0gKiBzbyBpZiB0aGUgY2FsbGVyIGFscmVhZHkgaGFzIGEgbnVsLXRlcm1pbmF0 ZWQgc3RyaW5nLCBpdCBzaG91bGQgY2FsbAotICogcGdfc3RyeGZybSgpIGluc3RlYWQuCiAgKi8K IHNpemVfdAogcGdfc3Rybnhmcm0oY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBj aGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCkBAIC0yNDIxLDQ0ICsyMzgzLDI0IEBAIHBnX3N0cnhm cm1fcHJlZml4X2VuYWJsZWQocGdfbG9jYWxlX3QgbG9jYWxlKQogLyoKICAqIHBnX3N0cnhmcm1f cHJlZml4CiAgKgotICogVHJhbnNmb3JtcyAnc3JjJyB0byBhIGJ5dGUgc2VxdWVuY2Ugc3RvcmVk IGluICdkZXN0JyBzdWNoIHRoYXQgb3JkaW5hcnkKLSAqIG1lbWNtcCgpIG9uIHRoZSBieXRlIHNl cXVlbmNlIGlzIGVxdWl2YWxlbnQgdG8gcGdfc3RyY29sbCgpIG9uCi0gKiB1bnRyYW5zZm9ybWVk IHN0cmluZ3MuIFRoZSByZXN1bHQgaXMgbm90IG51bC10ZXJtaW5hdGVkLgotICoKLSAqIFRoZSBw cm92aWRlZCAnc3JjJyBtdXN0IGJlIG51bC10ZXJtaW5hdGVkLgotICoKLSAqIE5vdCBhbGwgcHJv dmlkZXJzIHN1cHBvcnQgcGdfc3RyeGZybV9wcmVmaXgoKSBzYWZlbHkuIFRoZSBjYWxsZXIgc2hv dWxkCi0gKiBjaGVjayBwZ19zdHJ4ZnJtX3ByZWZpeF9lbmFibGVkKCkgZmlyc3QsIG90aGVyd2lz ZSB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4KLSAqIHdyb25nIHJlc3VsdHMgb3IgYW4gZXJyb3Iu Ci0gKgotICogSWYgZGVzdHNpemUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSByZXN1 bHRpbmcgYnl0ZSBzZXF1ZW5jZSwgc3RvcmVzCi0gKiBvbmx5IHRoZSBmaXJzdCBkZXN0c2l6ZSBi eXRlcyBpbiAnZGVzdCcuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcwotICogYWN0dWFsbHkg Y29waWVkIHRvICdkZXN0Jy4KKyAqIExpa2UgcGdfc3Rybnhmcm1fcHJlZml4IGZvciBhIE5VTC10 ZXJtaW5hdGVkIGlucHV0IHN0cmluZy4KICAqLwogc2l6ZV90CiBwZ19zdHJ4ZnJtX3ByZWZpeChj aGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkZXN0c2l6ZSwKIAkJCQkgIHBnX2xv Y2FsZV90IGxvY2FsZSkKIHsKLQlzaXplX3QJCXJlc3VsdCA9IDA7CQkvKiBrZWVwIGNvbXBpbGVy IHF1aWV0ICovCi0KLSNpZmRlZiBVU0VfSUNVCi0JaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0lDVSkKLQkJcmVzdWx0ID0gcGdfc3Rybnhmcm1fcHJlZml4X2ljdShkZXN0LCBz cmMsIC0xLCBkZXN0c2l6ZSwgbG9jYWxlKTsKLQllbHNlCi0jZW5kaWYKLQkJUEdMT0NBTEVfU1VQ UE9SVF9FUlJPUihsb2NhbGUtPnByb3ZpZGVyKTsKLQotCXJldHVybiByZXN1bHQ7CisJcmV0dXJu IHBnX3N0cm54ZnJtX3ByZWZpeChkZXN0LCBkZXN0c2l6ZSwgc3JjLCAtMSwgbG9jYWxlKTsKIH0K IAogLyoKICAqIHBnX3N0cm54ZnJtX3ByZWZpeAogICoKICAqIFRyYW5zZm9ybXMgJ3NyYycgdG8g YSBieXRlIHNlcXVlbmNlIHN0b3JlZCBpbiAnZGVzdCcgc3VjaCB0aGF0IG9yZGluYXJ5Ci0gKiBt ZW1jbXAoKSBvbiB0aGUgYnl0ZSBzZXF1ZW5jZSBpcyBlcXVpdmFsZW50IHRvIHBnX3N0cmNvbGwo KSBvbgorICogbWVtY21wKCkgb24gdGhlIGJ5dGUgc2VxdWVuY2UgaXMgZXF1aXZhbGVudCB0byBw Z19zdHJuY29sbCgpIG9uCiAgKiB1bnRyYW5zZm9ybWVkIHN0cmluZ3MuIFRoZSByZXN1bHQgaXMg bm90IG51bC10ZXJtaW5hdGVkLgogICoKLSAqIFRoZSBwcm92aWRlZCAnc3JjJyBtdXN0IGJlIG51 bC10ZXJtaW5hdGVkLgorICogVGhlIGlucHV0IHN0cmluZyBtdXN0IGJlIGVuY29kZWQgaW4gdGhl IGRhdGFiYXNlIGVuY29kaW5nLiBJZiB0aGUgaW5wdXQKKyAqIHN0cmluZyBpcyBOVUwtdGVybWlu YXRlZCwgaXRzIGxlbmd0aCBtYXkgYmUgc3BlY2lmaWVkIGFzIC0xLgogICoKICAqIE5vdCBhbGwg cHJvdmlkZXJzIHN1cHBvcnQgcGdfc3Rybnhmcm1fcHJlZml4KCkgc2FmZWx5LiBUaGUgY2FsbGVy IHNob3VsZAogICogY2hlY2sgcGdfc3RyeGZybV9wcmVmaXhfZW5hYmxlZCgpIGZpcnN0LCBvdGhl cndpc2UgdGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuCkBAIC0yNDY3LDEwICsyNDA5LDYgQEAgcGdf c3RyeGZybV9wcmVmaXgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZGVzdHNp emUsCiAgKiBJZiBkZXN0c2l6ZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3Vs dGluZyBieXRlIHNlcXVlbmNlLCBzdG9yZXMKICAqIG9ubHkgdGhlIGZpcnN0IGRlc3RzaXplIGJ5 dGVzIGluICdkZXN0Jy4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzCiAgKiBhY3R1YWxseSBj b3BpZWQgdG8gJ2Rlc3QnLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbWF5IG5lZWQgdG8gbnVsLXRl cm1pbmF0ZSB0aGUgYXJndW1lbnQgZm9yIGxpYmMgZnVuY3Rpb25zOwotICogc28gaWYgdGhlIGNh bGxlciBhbHJlYWR5IGhhcyBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgaXQgc2hvdWxkIGNhbGwK LSAqIHBnX3N0cnhmcm1fcHJlZml4KCkgaW5zdGVhZC4KICAqLwogc2l6ZV90CiBwZ19zdHJueGZy bV9wcmVmaXgoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCkBA IC0yNjYxLDYgKzI1OTksOCBAQCBpbml0X2ljdV9jb252ZXJ0ZXIodm9pZCkKIAogLyoKICAqIEZp bmQgbGVuZ3RoLCBpbiBVQ2hhcnMsIG9mIGdpdmVuIHN0cmluZyBpZiBjb252ZXJ0ZWQgdG8gVUNo YXIgc3RyaW5nLgorICoKKyAqIEEgbGVuZ3RoIG9mIC0xIGluZGljYXRlcyB0aGF0IHRoZSBpbnB1 dCBzdHJpbmcgaXMgTlVMLXRlcm1pbmF0ZWQuCiAgKi8KIHN0YXRpYyBzaXplX3QKIHVjaGFyX2xl bmd0aChVQ29udmVydGVyICpjb252ZXJ0ZXIsIGNvbnN0IGNoYXIgKnN0ciwgaW50MzJfdCBsZW4p CkBAIC0yNjc4LDYgKzI2MTgsOCBAQCB1Y2hhcl9sZW5ndGgoVUNvbnZlcnRlciAqY29udmVydGVy LCBjb25zdCBjaGFyICpzdHIsIGludDMyX3QgbGVuKQogLyoKICAqIENvbnZlcnQgdGhlIGdpdmVu IHNvdXJjZSBzdHJpbmcgaW50byBhIFVDaGFyIHN0cmluZywgc3RvcmVkIGluIGRlc3QsIGFuZAog ICogcmV0dXJuIHRoZSBsZW5ndGggKGluIFVDaGFycykuCisgKgorICogQSBzcmNsZW4gb2YgLTEg aW5kaWNhdGVzIHRoYXQgdGhlIGlucHV0IHN0cmluZyBpcyBOVUwtdGVybWluYXRlZC4KICAqLwog c3RhdGljIGludDMyX3QKIHVjaGFyX2NvbnZlcnQoVUNvbnZlcnRlciAqY29udmVydGVyLCBVQ2hh ciAqZGVzdCwgaW50MzJfdCBkZXN0bGVuLAotLSAKMi4zNC4xCgo= --=-tbqRUFhCBkwqPmgVZT1e--