From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0DA44C433E9 for ; Fri, 5 Feb 2021 17:11:44 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 75EED64EF0 for ; Fri, 5 Feb 2021 17:11:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 75EED64EF0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:59360 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l84dy-0002Rw-9b for qemu-devel@archiver.kernel.org; Fri, 05 Feb 2021 12:11:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42780) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l84H0-0002ie-Dy for qemu-devel@nongnu.org; Fri, 05 Feb 2021 11:48:06 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:56668) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l84Gw-0006yP-7W for qemu-devel@nongnu.org; Fri, 05 Feb 2021 11:47:58 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612543669; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2lrRbdrWGI2XS27dloKIEn7pP33fpAuvfxOU0lrsdRg=; b=MsnNw9MNVlvFshBgRQaqHrifaM382hd/ISZmoO0hg77pjMwPdJ+YbbAbNuKVuo+/tXSTZ0 iymIPAQcrSOO7IIqKYE17L0exaXDsJKGMszQF5heXH8hsDZmBJ695pdp3kKvjXik9wBuIA VOYDhNzBBv4OsTZF/eJrmNphN40spyQ= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-325-cKmK_PrQORCxr9VpQCsAQg-1; Fri, 05 Feb 2021 11:47:45 -0500 X-MC-Unique: cKmK_PrQORCxr9VpQCsAQg-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7D6EC804022; Fri, 5 Feb 2021 16:47:43 +0000 (UTC) Received: from localhost (ovpn-112-54.ams2.redhat.com [10.36.112.54]) by smtp.corp.redhat.com (Postfix) with ESMTP id 386B25D9DB; Fri, 5 Feb 2021 16:47:30 +0000 (UTC) From: Stefan Hajnoczi To: Peter Maydell , qemu-devel@nongnu.org Subject: [PULL v3 14/27] io: add qio_channel_readv_full_all_eof & qio_channel_readv_full_all helpers Date: Fri, 5 Feb 2021 16:44:46 +0000 Message-Id: <20210205164459.432714-15-stefanha@redhat.com> In-Reply-To: <20210205164459.432714-1-stefanha@redhat.com> References: <20210205164459.432714-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=stefanha@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=216.205.24.124; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.352, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , John G Johnson , Thomas Huth , Jagannathan Raman , Stefan Hajnoczi , qemu-block@nongnu.org, "Michael S. Tsirkin" , "Denis V. Lunev" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Elena Ufimtseva , Wainer dos Santos Moschetta , Igor Mammedov , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Eduardo Habkost Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" RnJvbTogRWxlbmEgVWZpbXRzZXZhIDxlbGVuYS51ZmltdHNldmFAb3JhY2xlLmNvbT4KCkFkZHMg cWlvX2NoYW5uZWxfcmVhZHZfZnVsbF9hbGxfZW9mKCkgYW5kIHFpb19jaGFubmVsX3JlYWR2X2Z1 bGxfYWxsKCkKdG8gcmVhZCBib3RoIGRhdGEgYW5kIEZEcy4gUmVmYWN0b3JzIGV4aXN0aW5nIGNv ZGUgdG8gdXNlIHRoZXNlIGhlbHBlcnMuCgpTaWduZWQtb2ZmLWJ5OiBFbGVuYSBVZmltdHNldmEg PGVsZW5hLnVmaW10c2V2YUBvcmFjbGUuY29tPgpTaWduZWQtb2ZmLWJ5OiBKb2huIEcgSm9obnNv biA8am9obi5nLmpvaG5zb25Ab3JhY2xlLmNvbT4KU2lnbmVkLW9mZi1ieTogSmFnYW5uYXRoYW4g UmFtYW4gPGphZy5yYW1hbkBvcmFjbGUuY29tPgpBY2tlZC1ieTogRGFuaWVsIFAuIEJlcnJhbmfD qSA8YmVycmFuZ2VAcmVkaGF0LmNvbT4KTWVzc2FnZS1pZDogYjA1OWM0Y2MwZmI3NDFlNzk0ZDY0 NGMxNDRjYzIxMzcyY2FkODc3ZC4xNjExOTM4MzE5LmdpdC5qYWcucmFtYW5Ab3JhY2xlLmNvbQpT aWduZWQtb2ZmLWJ5OiBTdGVmYW4gSGFqbm9jemkgPHN0ZWZhbmhhQHJlZGhhdC5jb20+Ci0tLQog aW5jbHVkZS9pby9jaGFubmVsLmggfCAgNTMgKysrKysrKysrKysrKysrKysrKysrKysKIGlvL2No YW5uZWwuYyAgICAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTM0IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW8vY2hhbm5lbC5oIGIvaW5jbHVkZS9pby9jaGFu bmVsLmgKaW5kZXggMTllNzZmYzMyZi4uODg5ODg5NzlmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9p by9jaGFubmVsLmgKKysrIGIvaW5jbHVkZS9pby9jaGFubmVsLmgKQEAgLTc3Nyw2ICs3NzcsNTkg QEAgdm9pZCBxaW9fY2hhbm5lbF9zZXRfYWlvX2ZkX2hhbmRsZXIoUUlPQ2hhbm5lbCAqaW9jLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9IYW5kbGVyICppb193cml0ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSk7CiAKKy8q KgorICogcWlvX2NoYW5uZWxfcmVhZHZfZnVsbF9hbGxfZW9mOgorICogQGlvYzogdGhlIGNoYW5u ZWwgb2JqZWN0CisgKiBAaW92OiB0aGUgYXJyYXkgb2YgbWVtb3J5IHJlZ2lvbnMgdG8gcmVhZCBk YXRhIHRvCisgKiBAbmlvdjogdGhlIGxlbmd0aCBvZiB0aGUgQGlvdiBhcnJheQorICogQGZkczog YW4gYXJyYXkgb2YgZmlsZSBoYW5kbGVzIHRvIHJlYWQKKyAqIEBuZmRzOiBudW1iZXIgb2YgZmls ZSBoYW5kbGVzIGluIEBmZHMKKyAqIEBlcnJwOiBwb2ludGVyIHRvIGEgTlVMTC1pbml0aWFsaXpl ZCBlcnJvciBvYmplY3QKKyAqCisgKgorICogUGVyZm9ybXMgc2FtZSBmdW5jdGlvbiBhcyBxaW9f Y2hhbm5lbF9yZWFkdl9hbGxfZW9mLgorICogQWRkaXRpb25hbGx5LCBhdHRlbXB0cyB0byByZWFk IGZpbGUgZGVzY3JpcHRvcnMgc2hhcmVkCisgKiBvdmVyIHRoZSBjaGFubmVsLiBUaGUgZnVuY3Rp b24gd2lsbCB3YWl0IGZvciBhbGwKKyAqIHJlcXVlc3RlZCBkYXRhIHRvIGJlIHJlYWQsIHlpZWxk aW5nIGZyb20gdGhlIGN1cnJlbnQKKyAqIGNvcm91dGluZSBpZiByZXF1aXJlZC4gZGF0YSByZWZl cnMgdG8gYm90aCBmaWxlCisgKiBkZXNjcmlwdG9ycyBhbmQgdGhlIGlvdnMuCisgKgorICogUmV0 dXJuczogMSBpZiBhbGwgYnl0ZXMgd2VyZSByZWFkLCAwIGlmIGVuZC1vZi1maWxlCisgKiAgICAg ICAgICBvY2N1cnMgd2l0aG91dCBkYXRhLCBvciAtMSBvbiBlcnJvcgorICovCisKK2ludCBxaW9f Y2hhbm5lbF9yZWFkdl9mdWxsX2FsbF9lb2YoUUlPQ2hhbm5lbCAqaW9jLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pb3YsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCAqKmZkcywgc2l6ZV90ICpuZmRzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFcnJvciAqKmVycnApOworCisvKioKKyAqIHFpb19jaGFu bmVsX3JlYWR2X2Z1bGxfYWxsOgorICogQGlvYzogdGhlIGNoYW5uZWwgb2JqZWN0CisgKiBAaW92 OiB0aGUgYXJyYXkgb2YgbWVtb3J5IHJlZ2lvbnMgdG8gcmVhZCBkYXRhIHRvCisgKiBAbmlvdjog dGhlIGxlbmd0aCBvZiB0aGUgQGlvdiBhcnJheQorICogQGZkczogYW4gYXJyYXkgb2YgZmlsZSBo YW5kbGVzIHRvIHJlYWQKKyAqIEBuZmRzOiBudW1iZXIgb2YgZmlsZSBoYW5kbGVzIGluIEBmZHMK KyAqIEBlcnJwOiBwb2ludGVyIHRvIGEgTlVMTC1pbml0aWFsaXplZCBlcnJvciBvYmplY3QKKyAq CisgKgorICogUGVyZm9ybXMgc2FtZSBmdW5jdGlvbiBhcyBxaW9fY2hhbm5lbF9yZWFkdl9hbGxf ZW9mLgorICogQWRkaXRpb25hbGx5LCBhdHRlbXB0cyB0byByZWFkIGZpbGUgZGVzY3JpcHRvcnMg c2hhcmVkCisgKiBvdmVyIHRoZSBjaGFubmVsLiBUaGUgZnVuY3Rpb24gd2lsbCB3YWl0IGZvciBh bGwKKyAqIHJlcXVlc3RlZCBkYXRhIHRvIGJlIHJlYWQsIHlpZWxkaW5nIGZyb20gdGhlIGN1cnJl bnQKKyAqIGNvcm91dGluZSBpZiByZXF1aXJlZC4gZGF0YSByZWZlcnMgdG8gYm90aCBmaWxlCisg KiBkZXNjcmlwdG9ycyBhbmQgdGhlIGlvdnMuCisgKgorICogUmV0dXJuczogMCBpZiBhbGwgYnl0 ZXMgd2VyZSByZWFkLCBvciAtMSBvbiBlcnJvcgorICovCisKK2ludCBxaW9fY2hhbm5lbF9yZWFk dl9mdWxsX2FsbChRSU9DaGFubmVsICppb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IG5pb3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICoqZmRz LCBzaXplX3QgKm5mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKipl cnJwKTsKKwogLyoqCiAgKiBxaW9fY2hhbm5lbF93cml0ZXZfZnVsbF9hbGw6CiAgKiBAaW9jOiB0 aGUgY2hhbm5lbCBvYmplY3QKZGlmZiAtLWdpdCBhL2lvL2NoYW5uZWwuYyBiL2lvL2NoYW5uZWwu YwppbmRleCAwZDRiOGI1MTYwLi40NTU1MDIxYjYyIDEwMDY0NAotLS0gYS9pby9jaGFubmVsLmMK KysrIGIvaW8vY2hhbm5lbC5jCkBAIC05MSwyMCArOTEsNDggQEAgaW50IHFpb19jaGFubmVsX3Jl YWR2X2FsbF9lb2YoUUlPQ2hhbm5lbCAqaW9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgbmlvdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yICoqZXJy cCkKK3sKKyAgICByZXR1cm4gcWlvX2NoYW5uZWxfcmVhZHZfZnVsbF9hbGxfZW9mKGlvYywgaW92 LCBuaW92LCBOVUxMLCBOVUxMLCBlcnJwKTsKK30KKworaW50IHFpb19jaGFubmVsX3JlYWR2X2Fs bChRSU9DaGFubmVsICppb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCBpb3ZlYyAqaW92LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmlvdiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKiplcnJwKQoreworICAgIHJldHVybiBxaW9f Y2hhbm5lbF9yZWFkdl9mdWxsX2FsbChpb2MsIGlvdiwgbmlvdiwgTlVMTCwgTlVMTCwgZXJycCk7 Cit9CisKK2ludCBxaW9fY2hhbm5lbF9yZWFkdl9mdWxsX2FsbF9lb2YoUUlPQ2hhbm5lbCAqaW9j LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMg KmlvdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pb3YsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqKmZkcywgc2l6ZV90ICpuZmRz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciAqKmVycnApCiB7CiAg ICAgaW50IHJldCA9IC0xOwogICAgIHN0cnVjdCBpb3ZlYyAqbG9jYWxfaW92ID0gZ19uZXcoc3Ry dWN0IGlvdmVjLCBuaW92KTsKICAgICBzdHJ1Y3QgaW92ZWMgKmxvY2FsX2lvdl9oZWFkID0gbG9j YWxfaW92OwogICAgIHVuc2lnbmVkIGludCBubG9jYWxfaW92ID0gbmlvdjsKKyAgICBpbnQgKips b2NhbF9mZHMgPSBmZHM7CisgICAgc2l6ZV90ICpsb2NhbF9uZmRzID0gbmZkczsKICAgICBib29s IHBhcnRpYWwgPSBmYWxzZTsKIAorICAgIGlmIChuZmRzKSB7CisgICAgICAgICpuZmRzID0gMDsK KyAgICB9CisKKyAgICBpZiAoZmRzKSB7CisgICAgICAgICpmZHMgPSBOVUxMOworICAgIH0KKwog ICAgIG5sb2NhbF9pb3YgPSBpb3ZfY29weShsb2NhbF9pb3YsIG5sb2NhbF9pb3YsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlvdiwgbmlvdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg MCwgaW92X3NpemUoaW92LCBuaW92KSk7CiAKLSAgICB3aGlsZSAobmxvY2FsX2lvdiA+IDApIHsK KyAgICB3aGlsZSAoKG5sb2NhbF9pb3YgPiAwKSB8fCBsb2NhbF9mZHMpIHsKICAgICAgICAgc3Np emVfdCBsZW47Ci0gICAgICAgIGxlbiA9IHFpb19jaGFubmVsX3JlYWR2KGlvYywgbG9jYWxfaW92 LCBubG9jYWxfaW92LCBlcnJwKTsKKyAgICAgICAgbGVuID0gcWlvX2NoYW5uZWxfcmVhZHZfZnVs bChpb2MsIGxvY2FsX2lvdiwgbmxvY2FsX2lvdiwgbG9jYWxfZmRzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX25mZHMsIGVycnApOwogICAgICAgICBpZiAobGVu ID09IFFJT19DSEFOTkVMX0VSUl9CTE9DSykgewogICAgICAgICAgICAgaWYgKHFlbXVfaW5fY29y b3V0aW5lKCkpIHsKICAgICAgICAgICAgICAgICBxaW9fY2hhbm5lbF95aWVsZChpb2MsIEdfSU9f SU4pOwpAQCAtMTEyLDIwICsxNDAsNTAgQEAgaW50IHFpb19jaGFubmVsX3JlYWR2X2FsbF9lb2Yo UUlPQ2hhbm5lbCAqaW9jLAogICAgICAgICAgICAgICAgIHFpb19jaGFubmVsX3dhaXQoaW9jLCBH X0lPX0lOKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9 IGVsc2UgaWYgKGxlbiA8IDApIHsKLSAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAg fSBlbHNlIGlmIChsZW4gPT0gMCkgewotICAgICAgICAgICAgaWYgKHBhcnRpYWwpIHsKLSAgICAg ICAgICAgICAgICBlcnJvcl9zZXRnKGVycnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAi VW5leHBlY3RlZCBlbmQtb2YtZmlsZSBiZWZvcmUgYWxsIGJ5dGVzIHdlcmUgcmVhZCIpOwotICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZW4gPT0gMCkgewor ICAgICAgICAgICAgaWYgKGxvY2FsX25mZHMgJiYgKmxvY2FsX25mZHMpIHsKKyAgICAgICAgICAg ICAgICAvKgorICAgICAgICAgICAgICAgICAqIEdvdCBzb21lIEZEcywgYnV0IG5vIGRhdGEgeWV0 LiBUaGlzIGlzbid0IGFuIEVPRgorICAgICAgICAgICAgICAgICAqIHNjZW5hcmlvICh5ZXQpLCBz byBjYXJyeSBvbiB0byB0cnkgdG8gcmVhZCBkYXRhCisgICAgICAgICAgICAgICAgICogb24gbmV4 dCBsb29wIGl0ZXJhdGlvbgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGdv dG8gbmV4dF9pdGVyOworICAgICAgICAgICAgfSBlbHNlIGlmICghcGFydGlhbCkgeworICAgICAg ICAgICAgICAgIC8qIE5vIGZkcyBhbmQgbm8gZGF0YSAtIEVPRiBiZWZvcmUgYW55IGRhdGEgcmVh ZCAqLwogICAgICAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICAgICAgZ290byBjbGVh bnVwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsZW4gPSAtMTsKKyAg ICAgICAgICAgICAgICBlcnJvcl9zZXRnKGVycnAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAiVW5leHBlY3RlZCBlbmQtb2YtZmlsZSBiZWZvcmUgYWxsIGRhdGEgd2VyZSByZWFkIik7Cisg ICAgICAgICAgICAgICAgLyogRmFsbHRocm91Z2ggaW50byBsZW4gPCAwIGhhbmRsaW5nICovCisg ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobGVuIDwgMCkgeworICAgICAg ICAgICAgLyogQ2xvc2UgYW55IEZEcyB3ZSBwcmV2aW91c2x5IHJlY2VpdmVkICovCisgICAgICAg ICAgICBpZiAobmZkcyAmJiBmZHMpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgaTsKKyAgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKCpuZmRzKTsgaSsrKSB7CisgICAgICAgICAgICAg ICAgICAgIGNsb3NlKCgqZmRzKVtpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGdfZnJlZSgqZmRzKTsKKyAgICAgICAgICAgICAgICAqZmRzID0gTlVMTDsKKyAgICAgICAg ICAgICAgICAqbmZkcyA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBnb3RvIGNsZWFu dXA7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAobmxvY2FsX2lvdikgeworICAgICAgICAgICAg aW92X2Rpc2NhcmRfZnJvbnQoJmxvY2FsX2lvdiwgJm5sb2NhbF9pb3YsIGxlbik7CisgICAgICAg IH0KKworbmV4dF9pdGVyOgogICAgICAgICBwYXJ0aWFsID0gdHJ1ZTsKLSAgICAgICAgaW92X2Rp c2NhcmRfZnJvbnQoJmxvY2FsX2lvdiwgJm5sb2NhbF9pb3YsIGxlbik7CisgICAgICAgIGxvY2Fs X2ZkcyA9IE5VTEw7CisgICAgICAgIGxvY2FsX25mZHMgPSBOVUxMOwogICAgIH0KIAogICAgIHJl dCA9IDE7CkBAIC0xMzUsMjAgKzE5MywyMyBAQCBpbnQgcWlvX2NoYW5uZWxfcmVhZHZfYWxsX2Vv ZihRSU9DaGFubmVsICppb2MsCiAgICAgcmV0dXJuIHJldDsKIH0KIAotaW50IHFpb19jaGFubmVs X3JlYWR2X2FsbChRSU9DaGFubmVsICppb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg bmlvdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKiplcnJwKQoraW50IHFpb19j aGFubmVsX3JlYWR2X2Z1bGxfYWxsKFFJT0NoYW5uZWwgKmlvYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgbmlvdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgKipmZHMsIHNpemVfdCAqbmZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFcnJvciAqKmVycnApCiB7Ci0gICAgaW50IHJldCA9IHFpb19jaGFubmVsX3JlYWR2X2FsbF9l b2YoaW9jLCBpb3YsIG5pb3YsIGVycnApOworICAgIGludCByZXQgPSBxaW9fY2hhbm5lbF9yZWFk dl9mdWxsX2FsbF9lb2YoaW9jLCBpb3YsIG5pb3YsIGZkcywgbmZkcywgZXJycCk7CiAKICAgICBp ZiAocmV0ID09IDApIHsKLSAgICAgICAgcmV0ID0gLTE7Ci0gICAgICAgIGVycm9yX3NldGcoZXJy cCwKLSAgICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlbmQtb2YtZmlsZSBiZWZvcmUgYWxs IGJ5dGVzIHdlcmUgcmVhZCIpOwotICAgIH0gZWxzZSBpZiAocmV0ID09IDEpIHsKLSAgICAgICAg cmV0ID0gMDsKKyAgICAgICAgZXJyb3JfcHJlcGVuZChlcnJwLAorICAgICAgICAgICAgICAgICAg ICAgICJVbmV4cGVjdGVkIGVuZC1vZi1maWxlIGJlZm9yZSBhbGwgZGF0YSB3ZXJlIHJlYWQuIik7 CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgaWYgKHJldCA9PSAxKSB7CisgICAgICAg IHJldHVybiAwOworICAgIH0KKwogICAgIHJldHVybiByZXQ7CiB9CiAKLS0gCjIuMjkuMgoK