From mboxrd@z Thu Jan 1 00:00:00 1970 From: xuyang2018.jy@fujitsu.com Date: Thu, 16 Sep 2021 07:13:51 +0000 Subject: [LTP] [PATCH v2 2/4] syscalls/dup2/dup202: Convert to new API and merge dup204 into dup202 In-Reply-To: <20210915155152.8515-3-qi.fuli@fujitsu.com> References: <20210915155152.8515-1-qi.fuli@fujitsu.com> <20210915155152.8515-3-qi.fuli@fujitsu.com> Message-ID: <6142EEB8.30409@fujitsu.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ltp@lists.linux.it Hi Qi > From: QI Fuli > > Signed-off-by: QI Fuli > --- > testcases/kernel/syscalls/dup2/dup202.c | 190 +++++++----------------- > testcases/kernel/syscalls/dup2/dup204.c | 128 ---------------- > 2 files changed, 52 insertions(+), 266 deletions(-) > delete mode 100644 testcases/kernel/syscalls/dup2/dup204.c > > diff --git a/testcases/kernel/syscalls/dup2/dup202.c b/testcases/kernel/syscalls/dup2/dup202.c > index c87769fa9..fd8aeb84e 100644 > --- a/testcases/kernel/syscalls/dup2/dup202.c > +++ b/testcases/kernel/syscalls/dup2/dup202.c > @@ -1,167 +1,81 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > + > /* > - * > - * Copyright (c) International Business Machines Corp., 2001 > - * > - * This program is free software; you can redistribute it and/or modify > - * it under the terms of the GNU General Public License as published by > - * the Free Software Foundation; either version 2 of the License, or > - * (at your option) any later version. > - * > - * This program is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See > - * the GNU General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > + * Copyright (c) International Business Machines Corp., 2001 > */ > > -/* > - * NAME > - * dup202.c > - * > - * DESCRIPTION > - * Is the access mode the same for both file descriptors? > - * 0: read only ? "0444" > - * 1: write only ? "0222" > - * 2: read/write ? "0666" > - * > - * ALGORITHM > - * Creat a file with each access mode; dup each file descriptor; > - * stat each file descriptor and compare modes of each pair > - * > - * USAGE: > - * dup202 [-c n] [-f] [-i n] [-I x] [-P x] [-t] > - * where, -c n : Run n copies concurrently. > - * -f : Turn off functionality Testing. > - * -i n : Execute test n times. > - * -I x : Execute test for x seconds. > - * -P x : Pause for x seconds between iterations. > - * -t : Turn on syscall timing. > - * > - * HISTORY > - * 07/2001 Ported by Wayne Boyer > +/*\ > + * [Description] > * > - * RESTRICTIONS > - * None Test whether the access mode and inode number are same for both file descriptors. > + * Is the access mode the same for both file descriptors? > + * 0: read only ? "0444" > + * 1: write only ? "0222" > + * 2: read/write ? "0666" > */ > > -#include > -#include > #include > -#include > #include > -#include "test.h" > -#include "safe_macros.h" > +#include "tst_test.h" > +#include "tst_safe_macros.h" > > -char *TCID = "dup202"; > -int TST_TOTAL = 3; > - > -void setup(void); > -void cleanup(void); > - > -char testfile[40]; > -int fail; > -int newfd; > +static char testfile[40]; > > /* set these to a known index into our local file descriptor table */ > -int duprdo = 10, dupwro = 20, duprdwr = 30; > +static int duprdo = 10, dupwro = 20, duprdwr = 30; > > -struct test_case_t { > +static struct tcase { > int *nfd; > mode_t mode; > -} TC[] = { > - /* The first test creat(es) a file with mode 0444 */ > - { > - &duprdo, (S_IRUSR | S_IRGRP | S_IROTH)}, > - /* The second test creat(es) a file with mode 0222 */ > - { > - &dupwro, (S_IWUSR | S_IWGRP | S_IWOTH)}, > - /* The third test creat(es) a file with mode 0666 */ > - { > - &duprdwr, > - (S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR | S_IWGRP | S_IWOTH)} > +} tcases[]= { > + {&duprdo, (S_IRUSR | S_IRGRP | S_IROTH)}, > + {&dupwro, (S_IWUSR | S_IWGRP | S_IWOTH)}, > + {&duprdwr, (S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR | S_IWGRP | S_IWOTH)}, > }; > > -int main(int ac, char **av) > +static void setup(void) > { > - int lc; > - int i, ofd; > - struct stat oldbuf, newbuf; > - > - tst_parse_opts(ac, av, NULL, NULL); > - > - setup(); > - > - for (lc = 0; TEST_LOOPING(lc); lc++) { > - > - tst_count = 0; > - > - /* loop through the test cases */ > - for (i = 0; i< TST_TOTAL; i++) { > - > - if ((ofd = creat(testfile, TC[i].mode)) == -1) > - tst_brkm(TBROK | TERRNO, cleanup, > - "creat failed"); > - > - TEST(dup2(ofd, *TC[i].nfd)); > - > - if (TEST_RETURN == -1) { > - tst_resm(TFAIL | TTERRNO, > - "call failed unexpectedly"); > - continue; > - } > + umask(0); > + sprintf(testfile, "dup202.%d", getpid()); > +} > > - /* stat the original file */ > - SAFE_FSTAT(cleanup, ofd,&oldbuf); > +static void run(unsigned int i) > +{ > + int ofd; > + struct stat oldbuf, newbuf; > + struct tcase *tc = tcases + i; > > - /* stat the duped file */ > - SAFE_FSTAT(cleanup, *TC[i].nfd,&newbuf); > + ofd = SAFE_OPEN(testfile, O_CREAT, tc->mode); > > - if (oldbuf.st_mode != newbuf.st_mode) > - tst_resm(TFAIL, "original and dup " > - "modes do not match"); > - else > - tst_resm(TPASS, "fstat shows new and " > - "old modes are the same"); > + TEST(dup2(ofd, *tc->nfd)); > > - /* remove the file so that we can use it again */ > - if (close(*TC[i].nfd) == -1) > - perror("close failed"); > - if (close(ofd) == -1) > - perror("close failed"); > - if (unlink(testfile) == -1) > - perror("unlink failed"); > - } > + if (TST_RET == -1) { > + tst_res(TFAIL | TTERRNO, "call failed unexpectedly"); > + return; > } This case fails on my machine when using -i parameters [root@localhost dup2]# ./dup202 -i 2 tst_test.c:1353: TINFO: Timeout per run is 0h 05m 00s dup202.c:65: TPASS: original and duped modes are the same dup202.c:70: TPASS: original and duped inodes are the same dup202.c:65: TPASS: original and duped modes are the same dup202.c:70: TPASS: original and duped inodes are the same dup202.c:65: TPASS: original and duped modes are the same dup202.c:70: TPASS: original and duped inodes are the same dup202.c:52: TFAIL: call failed unexpectedly: EBADF (9) dup202.c:52: TFAIL: call failed unexpectedly: EBADF (9) dup202.c:52: TFAIL: call failed unexpectedly: EBADF (9) It seems newfd has turned into -1 and see dup2 man-page it said " If newfd was open, any errors that would have been reported at close(2) time are lost. If this is of concern, then?unless the program is single-threaded and does not allocate file descriptors in signal handlers?the correct approach is not to close newfd before calling dup2(), because of the race condition described above." Maybe we should remove the close for newfd, but old api case also close. I am not very clear for this. Best Regards Yang Xu > > - cleanup(); > - tst_exit(); > -} > - > -/* > - * setup() - performs all ONE TIME setup for this test. > - */ > -void setup(void) > -{ > - > - tst_sig(NOFORK, DEF_HANDLER, cleanup); > + /* stat the original file */ > + SAFE_FSTAT(ofd,&oldbuf); > > - TEST_PAUSE; > + /* stat the duped file */ > + SAFE_FSTAT(*tc->nfd,&newbuf); > > - tst_tmpdir(); > + if (oldbuf.st_mode != newbuf.st_mode) > + tst_res(TFAIL, "original and duped modes do not match"); > + else > + tst_res(TPASS, "original and duped modes are the same"); > > - (void)umask(0); > + if (oldbuf.st_ino != newbuf.st_ino) > + tst_res(TFAIL, "original and duped inodes do not match"); > + else > + tst_res(TPASS, "original and duped inodes are the same"); > > - sprintf(testfile, "dup202.%d", getpid()); > + SAFE_CLOSE(*tc->nfd); > + SAFE_CLOSE(ofd); > } > > -/* > - * cleanup() - performs all ONE TIME cleanup for this test at > - * completion or premature exit. > - */ > -void cleanup(void) > -{ > - tst_rmdir(); > -} > +static struct tst_test test = { > + .needs_tmpdir = 1, > + .tcnt = ARRAY_SIZE(tcases), > + .test = run, > + .setup = setup, > +}; > diff --git a/testcases/kernel/syscalls/dup2/dup204.c b/testcases/kernel/syscalls/dup2/dup204.c > deleted file mode 100644 > index a357bc17e..000000000 > --- a/testcases/kernel/syscalls/dup2/dup204.c > +++ /dev/null > @@ -1,128 +0,0 @@ > -/* > - * > - * Copyright (c) International Business Machines Corp., 2001 > - * > - * This program is free software; you can redistribute it and/or modify > - * it under the terms of the GNU General Public License as published by > - * the Free Software Foundation; either version 2 of the License, or > - * (at your option) any later version. > - * > - * This program is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See > - * the GNU General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > - */ > - > -/* > - * NAME > - * dup204.c > - * > - * DESCRIPTION > - * Testcase to check the basic functionality of dup2(2). > - * > - * ALGORITHM > - * attempt to call dup2() on read/write ends of a pipe > - * > - * USAGE: > - * dup204 [-c n] [-f] [-i n] [-I x] [-P x] [-t] > - * where, -c n : Run n copies concurrently. > - * -f : Turn off functionality Testing. > - * -i n : Execute test n times. > - * -I x : Execute test for x seconds. > - * -P x : Pause for x seconds between iterations. > - * -t : Turn on syscall timing. > - * > - * RESTRICTION > - * NONE > - */ > - > -#ifndef _GNU_SOURCE > -#define _GNU_SOURCE > -#endif > -#include > -#include > -#include > -#include > -#include > -#include > -#include "test.h" > -#include "safe_macros.h" > - > -void setup(); > -void cleanup(); > - > -char *TCID = "dup204"; > -int TST_TOTAL = 2; > - > -int fd[2]; > -int nfd[2]; > - > -int main(int ac, char **av) > -{ > - int lc; > - int i; > - struct stat oldbuf, newbuf; > - > - tst_parse_opts(ac, av, NULL, NULL); > - > - setup(); > - > - for (lc = 0; TEST_LOOPING(lc); lc++) { > - > - tst_count = 0; > - > - /* loop through the test cases */ > - for (i = 0; i< TST_TOTAL; i++) { > - TEST(dup2(fd[i], nfd[i])); > - > - if (TEST_RETURN == -1) { > - tst_resm(TFAIL, "call failed unexpectedly"); > - continue; > - } > - > - SAFE_FSTAT(cleanup, fd[i],&oldbuf); > - SAFE_FSTAT(cleanup, nfd[i],&newbuf); > - > - if (oldbuf.st_ino != newbuf.st_ino) > - tst_resm(TFAIL, "original and duped " > - "inodes do not match"); > - else > - tst_resm(TPASS, "original and duped " > - "inodes are the same"); > - > - SAFE_CLOSE(cleanup, TEST_RETURN); > - } > - } > - > - cleanup(); > - tst_exit(); > -} > - > -void setup(void) > -{ > - fd[0] = -1; > - > - tst_sig(FORK, DEF_HANDLER, cleanup); > - > - TEST_PAUSE; > - > - tst_tmpdir(); > - > - SAFE_PIPE(cleanup, fd); > -} > - > -void cleanup(void) > -{ > - int i; > - > - for (i = 0; i< (int)ARRAY_SIZE(fd); i++) { > - close(fd[i]); > - close(nfd[i]); > - } > - > - tst_rmdir(); > -} 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 4C024C433EF for ; Thu, 16 Sep 2021 07:14:12 +0000 (UTC) Received: from picard.linux.it (picard.linux.it [213.254.12.146]) (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 44A6E60F51 for ; Thu, 16 Sep 2021 07:14:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 44A6E60F51 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=fujitsu.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.linux.it Received: from picard.linux.it (localhost [IPv6:::1]) by picard.linux.it (Postfix) with ESMTP id 8C9CD3C8978 for ; Thu, 16 Sep 2021 09:14:09 +0200 (CEST) Received: from in-4.smtp.seeweb.it (in-4.smtp.seeweb.it [IPv6:2001:4b78:1:20::4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by picard.linux.it (Postfix) with ESMTPS id EE5E93C2B34 for ; Thu, 16 Sep 2021 09:13:58 +0200 (CEST) Received: from esa5.fujitsucc.c3s2.iphmx.com (esa5.fujitsucc.c3s2.iphmx.com [68.232.159.76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by in-4.smtp.seeweb.it (Postfix) with ESMTPS id 959E4100138F for ; Thu, 16 Sep 2021 09:13:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1631776438; x=1663312438; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=1mrDtcs6uecNnsyKHW4B9w8xt+jBAjR3NIxcA3zVqLk=; b=xnqnwioWmW2f4FBymOCRWjHRULLIWGFNNkMiotJafvuNZ9/zeF4lIQsa 3L7z9yR1IUxCkaFKBkARL+jmC/lCQT6Uien/Oc6LNwrwoQsGg9d6MeIrx VZBoWFSZpA7AzriPqBta38ONckvaiiLcKlXRpEjFfAis/hm1E93CUHLxb P4fQuvuMeNadEss0Wh06KcNdHnsXxsGupGB7UOAINEXQBwms/sTXWzT9P Lz2OoL93CwbrIAJzwiQZq9EDyIvi8/tbgKi6hGIcsyMP59XoDqNoba7aU 5Ohm3X7rJdmZk4xUyRyfCpXJaOhNgCR2qI/GApELSam0woDIWfO+XFJqd Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10108"; a="39359852" X-IronPort-AV: E=Sophos;i="5.85,297,1624287600"; d="scan'208";a="39359852" Received: from mail-ty1jpn01lp2052.outbound.protection.outlook.com (HELO JPN01-TY1-obe.outbound.protection.outlook.com) ([104.47.93.52]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Sep 2021 16:13:55 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f2t2j9QMg3MTFiC3taQ9eNGl2W2FXosjTnPWGb5CMsb7dWXhqXFtUN1B7mCQ0VeNpGcGlTjf9Otuo4hJIBA+qGAt/BcBO/ZrxWfqihmqCXcGvOqObxh9kGzJwySzaNrehkXL6h3IKdeEgaa7W9H+87yrJ9i/LQvN0Z+jJUs97H3DRw7dnSj/ebtOMl5FEShPj1zLsXKnGOe6kAqBxLjM6zicTUQHiORDAa6NrTYI3WVxH/tSngBTmNniJal0DsOIxXj1dDqsjvTtldXodbR1dSGIdvm+HX49cljgnO+lv4miZsjlgLsz2FXiGsw7VYplG9IuhFTN//CIE+/tvJW7RA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=1mrDtcs6uecNnsyKHW4B9w8xt+jBAjR3NIxcA3zVqLk=; b=lKrWc+EHNAyC3MonoW31JIa5NM9eQDiwHmxbXVLVTxyaf1R6uwMXmRvmmloajUm3+xhgg1EZwWhr99gM+Z/QpuMBmGvwAJKrGS4SjE2G5/U6UTW1CV+hFi3DAsxS8RpsE6gT8O0LSSeE01UNkByYyBJQ5XMeud+3Wtsnhl3WtzJWq2txy64H3doyfWVHpx/Wmeie8TONF2Rm3LA0j6Qgr9RyxLQHoDDyH6t70sqgrotSJVz22sz7FcJEZRTIceMejZBCWelfyqMwjd1QlPx9PxPg+ziIBKVUvfb8k4oQKIglluCdAktGovRe5Pth+G1pScByUltAD8RgxJ9qBYs12Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fujitsu.onmicrosoft.com; s=selector2-fujitsu-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1mrDtcs6uecNnsyKHW4B9w8xt+jBAjR3NIxcA3zVqLk=; b=RUHpRz4+LLqgcDlopxOeaRfHDCxrBLOviI7/yl/zHgj/lCPk6ZHDFH/2yZazqX9Hb5PEPaL493r29f9JHtk2vG29BSKMj2cdpavjRtH/RREnZCocwVHa3dhMd+oe1Mh3F3EJU7pKGzVii9X8SoJT2RNRJ5t/lNqepaEw4XQl9Z8= Received: from TYCPR01MB6544.jpnprd01.prod.outlook.com (2603:1096:400:98::6) by TYCPR01MB6849.jpnprd01.prod.outlook.com (2603:1096:400:b4::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14; Thu, 16 Sep 2021 07:13:52 +0000 Received: from TYCPR01MB6544.jpnprd01.prod.outlook.com ([fe80::783d:cf1b:a4b9:5791]) by TYCPR01MB6544.jpnprd01.prod.outlook.com ([fe80::783d:cf1b:a4b9:5791%7]) with mapi id 15.20.4500.019; Thu, 16 Sep 2021 07:13:52 +0000 From: "xuyang2018.jy@fujitsu.com" To: QI Fuli Thread-Topic: [LTP] [PATCH v2 2/4] syscalls/dup2/dup202: Convert to new API and merge dup204 into dup202 Thread-Index: AQHXqkm5F2ctbGR8BUStHq7PSmTeQKumQEQA Date: Thu, 16 Sep 2021 07:13:51 +0000 Message-ID: <6142EEB8.30409@fujitsu.com> References: <20210915155152.8515-1-qi.fuli@fujitsu.com> <20210915155152.8515-3-qi.fuli@fujitsu.com> In-Reply-To: <20210915155152.8515-3-qi.fuli@fujitsu.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 2ba6f103-688c-401d-8f7a-08d978e1899b x-ms-traffictypediagnostic: TYCPR01MB6849: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: n8XEojT4kQuSekLE9BW+jP4+0T3b01bBW4qyhEntts1UnjYP78oF8+US2hYWZpsWHmWC/yyPiKKKQaj1FKuhzB2e4z2Je6ZbRlFRcgFvzE7JJ/Y3BYPHsTNrZcH5JpIZeWkKoaJkhtrC8BwBvgHPu8/MHebSWV0iu1uB0tSvfguwP6esHFDA0cf+b8fZ0qHwlU2qHIg83fBMLGMtQQCabInqpkO8DeIHgj2QZsOisG70UwbcP1+FKlZ72sZZpM8x3lL5IcQClQSusSo+DUWuLvOWzXAMygMGumyNXP4K373GMOFipzyIRDvSeP854ZfflJQfqyjiRTjTAfQ2xR6CMTz//By/FECg0CYJH6VLpmoGsFhz1turIgyl0n84DxpnQQkUoIJihaamRBxh6GQd0FwbRKmCdR7aWNZzJQDtrm2B6zIaxHXYM3966WVRm7nmka8sdduZHKfob7loVk+TvXOrbLbvGxKTVT0ik8j/3wiWkk2ykhHqqE2VWf0mYb8uom3Hfo1Yur/E0NYrvz4ADi/bA0ggAOSYMbpdPHd4Z4FNrEeBX7Rw8O1XzXSfaxNRJOnmW220hbpCMrF3oCX1AXOV5UIut00ewQHicjqDYog/jv7c4OG2yaoXhqAcisl6Z3vH5C/AJmtAc7IpwC3q4emjDOgfuYZz04lplD92xUPy+v29OprsFB2br1dXGOzYS2w//sw7NZKLDcPQrd/nUxVpsBpK9J0K+qraQnTbFGk= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYCPR01MB6544.jpnprd01.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(64756008)(38070700005)(85182001)(4326008)(66476007)(26005)(66446008)(66556008)(6916009)(36756003)(33656002)(6512007)(76116006)(107886003)(91956017)(66946007)(6486002)(6506007)(186003)(30864003)(71200400001)(5660300002)(54906003)(122000001)(8676002)(8936002)(316002)(83380400001)(2906002)(86362001)(38100700002)(2616005)(508600001)(2004002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?gb2312?B?bGtTTTJWUkVPM3g2QkFxU3RzSVcxUmltR1RFb3IwcHlaZEFzWkpBSzk4b2Yx?= =?gb2312?B?UDRJNUl2ZHlNY0FrdFFyaSs0WTRzNFdLUkw1Qld2UGNCS1hhSjE2ek5ZR3I1?= =?gb2312?B?SUM1amJxUVJqQlZWN09pN2hJRlBuQ3lkUE1CNk80ZE5tSFpVcnMxRUt6M1lz?= =?gb2312?B?U3hPb05XTC90VmtSaTdESlpnNHdQREFWNnd2TTloK2g4M1VlY0tJYUlEWTlJ?= =?gb2312?B?MGtudDFYWittQU92TGozWEw3VXdtd1ZXQkV6SVIwRXJGNGtWMk5nQmFHbDNm?= =?gb2312?B?cmRTY1FRUFUxYlpyTVdmT0lsazJ6Tjhvc1k2WG9VMUF6YTlVSDhlamttZ2JW?= =?gb2312?B?UWhJWVpRSzN6RS8yQXNGWGRRa3lwcmsxQTlsbHBScnAyYklqY3NMNlZhSWN2?= =?gb2312?B?OUUzYjJBckRHWlN2QlphcjFGME1iR1VvT052aStoVkNPQWU0UkNmdGlNZXhN?= =?gb2312?B?MWtta2ZyMmlsQStJNzhwN21WWGdZbEZPcXJkVm1uSTE3TmdzNE9wdW5CRXlD?= =?gb2312?B?TURrcER3V0MvM21Gb2xtOStxQ0g2VTNZeU4wV2h0VkdpNmxWelhuY0hmeTNZ?= =?gb2312?B?YVkxbFZVa056ejRBMjUrczJNalhveFFPa3lhcTNLYUNjSmtsaXVOcWFkcXhr?= =?gb2312?B?QmpYSEp6SDloOGdSSmtSMnJCbkFaK1VocGlzbFZBcXBlU0JidjZ1Z1F4ZnMz?= =?gb2312?B?MS92NkwxVE5jaUQ5N01PTm9MSDRNUzNsT1ZiM0dBOE9TUDlRa2hGN0lPRGh0?= =?gb2312?B?eWxmS1VMajdpREFEZTMvako4Z0l6aEQxOEtkWFIvMFdmMktHazI2OTJEZjdB?= =?gb2312?B?dnJac2VHbVcvWUVoSU14U3RCQU9BdDlsNzJzTHVRQjlRUjMrdDNsNGIzdXV2?= =?gb2312?B?eWZVZVB5OW1zeVNXQXhUcnNlTnpublBRcHg0c1g2V1pZYzhlUDBnVDBLeFZM?= =?gb2312?B?eXMzTGs4c1pLeWsvajg5WmhxSlF5RTVJRlBvNHBJTW5oc296MmRaZENJQXhX?= =?gb2312?B?WFdnQ0o0ckNhOGxyOFNlQ09zeVkzbFdsTytVdU1xQnhPT0psNWoxT2ppbUhh?= =?gb2312?B?Q0RXNFUxcnhwSzU1V0VYeE1TYkpla2RVbGp1QXowQzV1UlZpSnhuNjB2SGtZ?= =?gb2312?B?VDRrRGZQbnFtdEtBM0o4TktXdEsvbFY2MC8xbFJxTUxMVkpSZFBYREhROVBB?= =?gb2312?B?UUo1RlJIVU5MUnE2bWFhVUpMTlppZVNoelQzRUgyb0JkQk1CbUt0QVN6NTc4?= =?gb2312?B?RTlFYlVzYlFUVFBRUW9sTTkzZTRFOHRuY2NBei9WYWZ2V2U5M1NFaEtRZ3c3?= =?gb2312?B?WDRFNjcvSWkrRU0zaVNpQTJWeTRLMWdRc1NjalNMTGdRSnlzOWRkZlBVZ2xF?= =?gb2312?B?NjYzZi9keG54YnlCMnhmN2c3VXpJbTM3VlJwN1hiOXdYZnY1WUtLQURkUmls?= =?gb2312?B?RWRMRmowaGVlTzVxOVpoVnZma3A0SFM0VzMxeGNPZlRMcmpPVmRaVmNtYnND?= =?gb2312?B?ZkU3V3l6ZmRlWGg5a3kxV0UvTGc4ZUY4bUdJTHZ2VU5FUHpNSENWVjBQRDBK?= =?gb2312?B?cHlxLzNqUjhGMDJCNFp3R1doV3VqYXhLdWNKZHphZ2NpajhDMUVIeVJ5WFVZ?= =?gb2312?B?cGFXTzRqTWVsRUF1QXJ4RkYwRnU5bFBXMlhxM2N0S2Z1a080TS9wL2lYb21l?= =?gb2312?B?VDRZUjAzWlRPQVlMMlgwYkc3b0N1YUxrVHZQU05RcHhtSUJPbFlRRmNGdVRp?= =?gb2312?B?M0szVzhJTHZ6a0IwWHZJY3J4WkRyNVJMSU1EM0VvSEV3SkJkeTJsYXRBdmNC?= =?gb2312?B?RXZ6aHdOMTR2OEFMWkN0dz09?= Content-ID: <3CB63601F9D5B34BA0CE701ADB1D0672@jpnprd01.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYCPR01MB6544.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ba6f103-688c-401d-8f7a-08d978e1899b X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2021 07:13:51.9914 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: XSg0r8ytiD/VvfNY6YuXrmr7CoMLTdcFj7zSZkxDCh3G+5pA+JDy6dppo/J2cUHoadFEA0+jIxeUZAQ+0LVEyGVjJYPAxDP5LLWLMSmGkeE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB6849 X-Virus-Scanned: clamav-milter 0.102.4 at in-4.smtp.seeweb.it X-Virus-Status: Clean Subject: Re: [LTP] [PATCH v2 2/4] syscalls/dup2/dup202: Convert to new API and merge dup204 into dup202 X-BeenThere: ltp@lists.linux.it X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Test Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "qi.fuli@fujitsu.com" , "ltp@lists.linux.it" Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Errors-To: ltp-bounces+ltp=archiver.kernel.org@lists.linux.it Sender: "ltp" Message-ID: <20210916071351.f9SawEIS09ewsONkHBJlwZvHmDeXYsYUI39uDQnOAJg@z> SGkgUWkNCj4gRnJvbTogUUkgRnVsaTxxaS5mdWxpQGZ1aml0c3UuY29tPg0KPg0KPiBTaWduZWQt b2ZmLWJ5OiBRSSBGdWxpPHFpLmZ1bGlAZnVqaXRzdS5jb20+DQo+IC0tLQ0KPiAgIHRlc3RjYXNl cy9rZXJuZWwvc3lzY2FsbHMvZHVwMi9kdXAyMDIuYyB8IDE5MCArKysrKysrLS0tLS0tLS0tLS0t LS0tLS0NCj4gICB0ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2R1cDIvZHVwMjA0LmMgfCAxMjgg LS0tLS0tLS0tLS0tLS0tLQ0KPiAgIDIgZmlsZXMgY2hhbmdlZCwgNTIgaW5zZXJ0aW9ucygrKSwg MjY2IGRlbGV0aW9ucygtKQ0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0Y2FzZXMva2VybmVs L3N5c2NhbGxzL2R1cDIvZHVwMjA0LmMNCj4NCj4gZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJu ZWwvc3lzY2FsbHMvZHVwMi9kdXAyMDIuYyBiL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZHVw Mi9kdXAyMDIuYw0KPiBpbmRleCBjODc3NjlmYTkuLmZkOGFlYjg0ZSAxMDA2NDQNCj4gLS0tIGEv dGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9kdXAyL2R1cDIwMi5jDQo+ICsrKyBiL3Rlc3RjYXNl cy9rZXJuZWwvc3lzY2FsbHMvZHVwMi9kdXAyMDIuYw0KPiBAQCAtMSwxNjcgKzEsODEgQEANCj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyDQo+ICsNCj4gICAv Kg0KPiAtICoNCj4gLSAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1h Y2hpbmVzICBDb3JwLiwgMjAwMQ0KPiAtICoNCj4gLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQo+IC0gKiAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5DQo+IC0gKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQo+IC0gKiAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uDQo+IC0gKg0KPiAtICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gLSAqICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m DQo+IC0gKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZQ0KPiAtICogICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4NCj4gLSAqDQo+IC0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQo+IC0gKiAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KPiAtICog ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBDQo+ICsgKiBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwg QnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAxDQo+ICAgICovDQo+DQo+IC0vKg0KPiAtICog TkFNRQ0KPiAtICoJZHVwMjAyLmMNCj4gLSAqDQo+IC0gKiBERVNDUklQVElPTg0KPiAtICoJSXMg dGhlIGFjY2VzcyBtb2RlIHRoZSBzYW1lIGZvciBib3RoIGZpbGUgZGVzY3JpcHRvcnM/DQo+IC0g KgkJMDogcmVhZCBvbmx5ID8JIjA0NDQiDQo+IC0gKgkJMTogd3JpdGUgb25seSA/ICIwMjIyIg0K PiAtICoJCTI6IHJlYWQvd3JpdGUgPyAiMDY2NiINCj4gLSAqDQo+IC0gKiBBTEdPUklUSE0NCj4g LSAqCUNyZWF0IGEgZmlsZSB3aXRoIGVhY2ggYWNjZXNzIG1vZGU7IGR1cCBlYWNoIGZpbGUgZGVz Y3JpcHRvcjsNCj4gLSAqCXN0YXQgZWFjaCBmaWxlIGRlc2NyaXB0b3IgYW5kIGNvbXBhcmUgbW9k ZXMgb2YgZWFjaCBwYWlyDQo+IC0gKg0KPiAtICogVVNBR0U6PGZvciBjb21tYW5kLWxpbmU+DQo+ IC0gKiAgZHVwMjAyIFstYyBuXSBbLWZdIFstaSBuXSBbLUkgeF0gWy1QIHhdIFstdF0NCj4gLSAq ICAgICB3aGVyZSwgIC1jIG4gOiBSdW4gbiBjb3BpZXMgY29uY3VycmVudGx5Lg0KPiAtICogICAg ICAgICAgICAgLWYgICA6IFR1cm4gb2ZmIGZ1bmN0aW9uYWxpdHkgVGVzdGluZy4NCj4gLSAqICAg ICAgICAgICAgIC1pIG4gOiBFeGVjdXRlIHRlc3QgbiB0aW1lcy4NCj4gLSAqICAgICAgICAgICAg IC1JIHggOiBFeGVjdXRlIHRlc3QgZm9yIHggc2Vjb25kcy4NCj4gLSAqICAgICAgICAgICAgIC1Q IHggOiBQYXVzZSBmb3IgeCBzZWNvbmRzIGJldHdlZW4gaXRlcmF0aW9ucy4NCj4gLSAqICAgICAg ICAgICAgIC10ICAgOiBUdXJuIG9uIHN5c2NhbGwgdGltaW5nLg0KPiAtICoNCj4gLSAqIEhJU1RP UlkNCj4gLSAqCTA3LzIwMDEgUG9ydGVkIGJ5IFdheW5lIEJveWVyDQo+ICsvKlwNCj4gKyAqIFtE ZXNjcmlwdGlvbl0NCj4gICAgKg0KPiAtICogUkVTVFJJQ1RJT05TDQo+IC0gKglOb25lDQpUZXN0 IHdoZXRoZXIgdGhlIGFjY2VzcyBtb2RlIGFuZCBpbm9kZSBudW1iZXIgYXJlIHNhbWUgZm9yIGJv dGggZmlsZSANCmRlc2NyaXB0b3JzLg0KPiArICogSXMgdGhlIGFjY2VzcyBtb2RlIHRoZSBzYW1l IGZvciBib3RoIGZpbGUgZGVzY3JpcHRvcnM/DQo+ICsgKgkwOiByZWFkIG9ubHkgPwkiMDQ0NCIN Cj4gKyAqCTE6IHdyaXRlIG9ubHkgPyAiMDIyMiINCj4gKyAqCTI6IHJlYWQvd3JpdGUgPyAiMDY2 NiINCj4gICAgKi8NCj4NCj4gLSNpbmNsdWRlPHN5cy90eXBlcy5oPg0KPiAtI2luY2x1ZGU8c3lz L3N0YXQuaD4NCj4gICAjaW5jbHVkZTxlcnJuby5oPg0KPiAtI2luY2x1ZGU8ZmNudGwuaD4NCj4g ICAjaW5jbHVkZTxzdGRpby5oPg0KPiAtI2luY2x1ZGUgInRlc3QuaCINCj4gLSNpbmNsdWRlICJz YWZlX21hY3Jvcy5oIg0KPiArI2luY2x1ZGUgInRzdF90ZXN0LmgiDQo+ICsjaW5jbHVkZSAidHN0 X3NhZmVfbWFjcm9zLmgiDQo+DQo+IC1jaGFyICpUQ0lEID0gImR1cDIwMiI7DQo+IC1pbnQgVFNU X1RPVEFMID0gMzsNCj4gLQ0KPiAtdm9pZCBzZXR1cCh2b2lkKTsNCj4gLXZvaWQgY2xlYW51cCh2 b2lkKTsNCj4gLQ0KPiAtY2hhciB0ZXN0ZmlsZVs0MF07DQo+IC1pbnQgZmFpbDsNCj4gLWludCBu ZXdmZDsNCj4gK3N0YXRpYyBjaGFyIHRlc3RmaWxlWzQwXTsNCj4NCj4gICAvKiBzZXQgdGhlc2Ug dG8gYSBrbm93biBpbmRleCBpbnRvIG91ciBsb2NhbCBmaWxlIGRlc2NyaXB0b3IgdGFibGUgKi8N Cj4gLWludCBkdXByZG8gPSAxMCwgZHVwd3JvID0gMjAsIGR1cHJkd3IgPSAzMDsNCj4gK3N0YXRp YyBpbnQgZHVwcmRvID0gMTAsIGR1cHdybyA9IDIwLCBkdXByZHdyID0gMzA7DQo+DQo+IC1zdHJ1 Y3QgdGVzdF9jYXNlX3Qgew0KPiArc3RhdGljIHN0cnVjdCB0Y2FzZSB7DQo+ICAgCWludCAqbmZk Ow0KPiAgIAltb2RlX3QgbW9kZTsNCj4gLX0gVENbXSA9IHsNCj4gLQkvKiBUaGUgZmlyc3QgdGVz dCBjcmVhdChlcykgYSBmaWxlIHdpdGggbW9kZSAwNDQ0ICovDQo+IC0Jew0KPiAtCSZkdXByZG8s IChTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgpfSwNCj4gLQkgICAgLyogVGhlIHNlY29uZCB0 ZXN0IGNyZWF0KGVzKSBhIGZpbGUgd2l0aCBtb2RlIDAyMjIgKi8NCj4gLQl7DQo+IC0JJmR1cHdy bywgKFNfSVdVU1IgfCBTX0lXR1JQIHwgU19JV09USCl9LA0KPiAtCSAgICAvKiBUaGUgdGhpcmQg dGVzdCBjcmVhdChlcykgYSBmaWxlIHdpdGggbW9kZSAwNjY2ICovDQo+IC0Jew0KPiAtCSZkdXBy ZHdyLA0KPiAtCQkgICAgKFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCB8IFNfSVdVU1IgfCBT X0lXR1JQIHwgU19JV09USCl9DQo+ICt9IHRjYXNlc1tdPSB7DQo+ICsJeyZkdXByZG8sIChTX0lS VVNSIHwgU19JUkdSUCB8IFNfSVJPVEgpfSwNCj4gKwl7JmR1cHdybywgKFNfSVdVU1IgfCBTX0lX R1JQIHwgU19JV09USCl9LA0KPiArCXsmZHVwcmR3ciwgKFNfSVJVU1IgfCBTX0lSR1JQIHwgU19J Uk9USCB8IFNfSVdVU1IgfCBTX0lXR1JQIHwgU19JV09USCl9LA0KPiAgIH07DQo+DQo+IC1pbnQg bWFpbihpbnQgYWMsIGNoYXIgKiphdikNCj4gK3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpDQo+ICAg ew0KPiAtCWludCBsYzsNCj4gLQlpbnQgaSwgb2ZkOw0KPiAtCXN0cnVjdCBzdGF0IG9sZGJ1Ziwg bmV3YnVmOw0KPiAtDQo+IC0JdHN0X3BhcnNlX29wdHMoYWMsIGF2LCBOVUxMLCBOVUxMKTsNCj4g LQ0KPiAtCXNldHVwKCk7DQo+IC0NCj4gLQlmb3IgKGxjID0gMDsgVEVTVF9MT09QSU5HKGxjKTsg bGMrKykgew0KPiAtDQo+IC0JCXRzdF9jb3VudCA9IDA7DQo+IC0NCj4gLQkJLyogbG9vcCB0aHJv dWdoIHRoZSB0ZXN0IGNhc2VzICovDQo+IC0JCWZvciAoaSA9IDA7IGk8ICBUU1RfVE9UQUw7IGkr Kykgew0KPiAtDQo+IC0JCQlpZiAoKG9mZCA9IGNyZWF0KHRlc3RmaWxlLCBUQ1tpXS5tb2RlKSkg PT0gLTEpDQo+IC0JCQkJdHN0X2Jya20oVEJST0sgfCBURVJSTk8sIGNsZWFudXAsDQo+IC0JCQkJ CSAiY3JlYXQgZmFpbGVkIik7DQo+IC0NCj4gLQkJCVRFU1QoZHVwMihvZmQsICpUQ1tpXS5uZmQp KTsNCj4gLQ0KPiAtCQkJaWYgKFRFU1RfUkVUVVJOID09IC0xKSB7DQo+IC0JCQkJdHN0X3Jlc20o VEZBSUwgfCBUVEVSUk5PLA0KPiAtCQkJCQkgImNhbGwgZmFpbGVkIHVuZXhwZWN0ZWRseSIpOw0K PiAtCQkJCWNvbnRpbnVlOw0KPiAtCQkJfQ0KPiArCXVtYXNrKDApOw0KPiArCXNwcmludGYodGVz dGZpbGUsICJkdXAyMDIuJWQiLCBnZXRwaWQoKSk7DQo+ICt9DQo+DQo+IC0JCQkvKiBzdGF0IHRo ZSBvcmlnaW5hbCBmaWxlICovDQo+IC0JCQlTQUZFX0ZTVEFUKGNsZWFudXAsIG9mZCwmb2xkYnVm KTsNCj4gK3N0YXRpYyB2b2lkIHJ1bih1bnNpZ25lZCBpbnQgaSkNCj4gK3sNCj4gKwlpbnQgb2Zk Ow0KPiArCXN0cnVjdCBzdGF0IG9sZGJ1ZiwgbmV3YnVmOw0KPiArCXN0cnVjdCB0Y2FzZSAqdGMg PSB0Y2FzZXMgKyBpOw0KPg0KPiAtCQkJLyogc3RhdCB0aGUgZHVwZWQgZmlsZSAqLw0KPiAtCQkJ U0FGRV9GU1RBVChjbGVhbnVwLCAqVENbaV0ubmZkLCZuZXdidWYpOw0KPiArCW9mZCA9IFNBRkVf T1BFTih0ZXN0ZmlsZSwgT19DUkVBVCwgdGMtPm1vZGUpOw0KPg0KPiAtCQkJaWYgKG9sZGJ1Zi5z dF9tb2RlICE9IG5ld2J1Zi5zdF9tb2RlKQ0KPiAtCQkJCXRzdF9yZXNtKFRGQUlMLCAib3JpZ2lu YWwgYW5kIGR1cCAiDQo+IC0JCQkJCSAibW9kZXMgZG8gbm90IG1hdGNoIik7DQo+IC0JCQllbHNl DQo+IC0JCQkJdHN0X3Jlc20oVFBBU1MsICJmc3RhdCBzaG93cyBuZXcgYW5kICINCj4gLQkJCQkJ ICJvbGQgbW9kZXMgYXJlIHRoZSBzYW1lIik7DQo+ICsJVEVTVChkdXAyKG9mZCwgKnRjLT5uZmQp KTsNCj4NCj4gLQkJCS8qIHJlbW92ZSB0aGUgZmlsZSBzbyB0aGF0IHdlIGNhbiB1c2UgaXQgYWdh aW4gKi8NCj4gLQkJCWlmIChjbG9zZSgqVENbaV0ubmZkKSA9PSAtMSkNCj4gLQkJCQlwZXJyb3Io ImNsb3NlIGZhaWxlZCIpOw0KPiAtCQkJaWYgKGNsb3NlKG9mZCkgPT0gLTEpDQo+IC0JCQkJcGVy cm9yKCJjbG9zZSBmYWlsZWQiKTsNCj4gLQkJCWlmICh1bmxpbmsodGVzdGZpbGUpID09IC0xKQ0K PiAtCQkJCXBlcnJvcigidW5saW5rIGZhaWxlZCIpOw0KPiAtCQl9DQo+ICsJaWYgKFRTVF9SRVQg PT0gLTEpIHsNCj4gKwkJdHN0X3JlcyhURkFJTCB8IFRURVJSTk8sICJjYWxsIGZhaWxlZCB1bmV4 cGVjdGVkbHkiKTsNCj4gKwkJcmV0dXJuOw0KPiAgIAl9DQpUaGlzIGNhc2UgZmFpbHMgb24gbXkg bWFjaGluZSB3aGVuIHVzaW5nIC1pIHBhcmFtZXRlcnMNCltyb290QGxvY2FsaG9zdCBkdXAyXSMg Li9kdXAyMDIgLWkgMg0KdHN0X3Rlc3QuYzoxMzUzOiBUSU5GTzogVGltZW91dCBwZXIgcnVuIGlz IDBoIDA1bSAwMHMNCmR1cDIwMi5jOjY1OiBUUEFTUzogb3JpZ2luYWwgYW5kIGR1cGVkIG1vZGVz IGFyZSB0aGUgc2FtZQ0KZHVwMjAyLmM6NzA6IFRQQVNTOiBvcmlnaW5hbCBhbmQgZHVwZWQgaW5v ZGVzIGFyZSB0aGUgc2FtZQ0KZHVwMjAyLmM6NjU6IFRQQVNTOiBvcmlnaW5hbCBhbmQgZHVwZWQg bW9kZXMgYXJlIHRoZSBzYW1lDQpkdXAyMDIuYzo3MDogVFBBU1M6IG9yaWdpbmFsIGFuZCBkdXBl ZCBpbm9kZXMgYXJlIHRoZSBzYW1lDQpkdXAyMDIuYzo2NTogVFBBU1M6IG9yaWdpbmFsIGFuZCBk dXBlZCBtb2RlcyBhcmUgdGhlIHNhbWUNCmR1cDIwMi5jOjcwOiBUUEFTUzogb3JpZ2luYWwgYW5k IGR1cGVkIGlub2RlcyBhcmUgdGhlIHNhbWUNCmR1cDIwMi5jOjUyOiBURkFJTDogY2FsbCBmYWls ZWQgdW5leHBlY3RlZGx5OiBFQkFERiAoOSkNCmR1cDIwMi5jOjUyOiBURkFJTDogY2FsbCBmYWls ZWQgdW5leHBlY3RlZGx5OiBFQkFERiAoOSkNCmR1cDIwMi5jOjUyOiBURkFJTDogY2FsbCBmYWls ZWQgdW5leHBlY3RlZGx5OiBFQkFERiAoOSkNCg0KSXQgc2VlbXMgbmV3ZmQgaGFzIHR1cm5lZCBp bnRvIC0xIGFuZCBzZWUgZHVwMiBtYW4tcGFnZSBpdCBzYWlkDQoiICBJZiBuZXdmZCB3YXMgb3Bl biwgYW55IGVycm9ycyB0aGF0IHdvdWxkIGhhdmUgYmVlbiByZXBvcnRlZCBhdCANCmNsb3NlKDIp IHRpbWUgYXJlIGxvc3QuICBJZiB0aGlzIGlzIG9mIGNvbmNlcm4sIHRoZW6hqnVubGVzcyB0aGUg cHJvZ3JhbSANCmlzIHNpbmdsZS10aHJlYWRlZCBhbmQgZG9lcyBub3QgYWxsb2NhdGUgIGZpbGUg IGRlc2NyaXB0b3JzICBpbiAgc2lnbmFsDQogICAgICAgIGhhbmRsZXJzoap0aGUgY29ycmVjdCBh cHByb2FjaCBpcyBub3QgdG8gY2xvc2UgbmV3ZmQgYmVmb3JlIA0KY2FsbGluZyBkdXAyKCksIGJl Y2F1c2Ugb2YgdGhlIHJhY2UgY29uZGl0aW9uIGRlc2NyaWJlZCBhYm92ZS4iDQoNCk1heWJlIHdl IHNob3VsZCByZW1vdmUgdGhlIGNsb3NlIGZvciBuZXdmZCwgYnV0IG9sZCBhcGkgY2FzZSAgYWxz byANCmNsb3NlLiBJIGFtIG5vdCB2ZXJ5IGNsZWFyIGZvciB0aGlzLg0KDQoNCkJlc3QgUmVnYXJk cw0KWWFuZyBYdQ0KPg0KPiAtCWNsZWFudXAoKTsNCj4gLQl0c3RfZXhpdCgpOw0KPiAtfQ0KPiAt DQo+IC0vKg0KPiAtICogc2V0dXAoKSAtIHBlcmZvcm1zIGFsbCBPTkUgVElNRSBzZXR1cCBmb3Ig dGhpcyB0ZXN0Lg0KPiAtICovDQo+IC12b2lkIHNldHVwKHZvaWQpDQo+IC17DQo+IC0NCj4gLQl0 c3Rfc2lnKE5PRk9SSywgREVGX0hBTkRMRVIsIGNsZWFudXApOw0KPiArCS8qIHN0YXQgdGhlIG9y aWdpbmFsIGZpbGUgKi8NCj4gKwlTQUZFX0ZTVEFUKG9mZCwmb2xkYnVmKTsNCj4NCj4gLQlURVNU X1BBVVNFOw0KPiArCS8qIHN0YXQgdGhlIGR1cGVkIGZpbGUgKi8NCj4gKwlTQUZFX0ZTVEFUKCp0 Yy0+bmZkLCZuZXdidWYpOw0KPg0KPiAtCXRzdF90bXBkaXIoKTsNCj4gKwlpZiAob2xkYnVmLnN0 X21vZGUgIT0gbmV3YnVmLnN0X21vZGUpDQo+ICsJCXRzdF9yZXMoVEZBSUwsICJvcmlnaW5hbCBh bmQgZHVwZWQgbW9kZXMgZG8gbm90IG1hdGNoIik7DQo+ICsJZWxzZQ0KPiArCQl0c3RfcmVzKFRQ QVNTLCAib3JpZ2luYWwgYW5kIGR1cGVkIG1vZGVzIGFyZSB0aGUgc2FtZSIpOw0KPg0KPiAtCSh2 b2lkKXVtYXNrKDApOw0KPiArCWlmIChvbGRidWYuc3RfaW5vICE9IG5ld2J1Zi5zdF9pbm8pDQo+ ICsJCXRzdF9yZXMoVEZBSUwsICJvcmlnaW5hbCBhbmQgZHVwZWQgaW5vZGVzIGRvIG5vdCBtYXRj aCIpOw0KPiArCWVsc2UNCj4gKwkJdHN0X3JlcyhUUEFTUywgIm9yaWdpbmFsIGFuZCBkdXBlZCBp bm9kZXMgYXJlIHRoZSBzYW1lIik7DQo+DQo+IC0Jc3ByaW50Zih0ZXN0ZmlsZSwgImR1cDIwMi4l ZCIsIGdldHBpZCgpKTsNCj4gKwlTQUZFX0NMT1NFKCp0Yy0+bmZkKTsNCj4gKwlTQUZFX0NMT1NF KG9mZCk7DQo+ICAgfQ0KPg0KPiAtLyoNCj4gLSAqIGNsZWFudXAoKSAtIHBlcmZvcm1zIGFsbCBP TkUgVElNRSBjbGVhbnVwIGZvciB0aGlzIHRlc3QgYXQNCj4gLSAqCSAgICAgICBjb21wbGV0aW9u IG9yIHByZW1hdHVyZSBleGl0Lg0KPiAtICovDQo+IC12b2lkIGNsZWFudXAodm9pZCkNCj4gLXsN Cj4gLQl0c3Rfcm1kaXIoKTsNCj4gLX0NCj4gK3N0YXRpYyBzdHJ1Y3QgdHN0X3Rlc3QgdGVzdCA9 IHsNCj4gKwkubmVlZHNfdG1wZGlyID0gMSwNCj4gKwkudGNudCA9IEFSUkFZX1NJWkUodGNhc2Vz KSwNCj4gKwkudGVzdCA9IHJ1biwNCj4gKwkuc2V0dXAgPSBzZXR1cCwNCj4gK307DQo+IGRpZmYg LS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2R1cDIvZHVwMjA0LmMgYi90ZXN0Y2Fz ZXMva2VybmVsL3N5c2NhbGxzL2R1cDIvZHVwMjA0LmMNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IGEzNTdiYzE3ZS4uMDAwMDAwMDAwDQo+IC0tLSBhL3Rlc3RjYXNlcy9rZXJu ZWwvc3lzY2FsbHMvZHVwMi9kdXAyMDQuYw0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDEyOCAr MCwwIEBADQo+IC0vKg0KPiAtICoNCj4gLSAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFs IEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMQ0KPiAtICoNCj4gLSAqICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5DQo+IC0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQo+IC0gKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQo+IC0gKiAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQo+IC0gKg0KPiAtICogICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4g LSAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mDQo+IC0gKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQ0KPiAtICogICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCj4gLSAqDQo+IC0gKiAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQo+IC0gKiAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQ0KPiAtICogICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQo+IC0gKi8NCj4gLQ0KPiAtLyoNCj4g LSAqIE5BTUUNCj4gLSAqCWR1cDIwNC5jDQo+IC0gKg0KPiAtICogREVTQ1JJUFRJT04NCj4gLSAq CVRlc3RjYXNlIHRvIGNoZWNrIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIGR1cDIoMikuDQo+ IC0gKg0KPiAtICogQUxHT1JJVEhNDQo+IC0gKglhdHRlbXB0IHRvIGNhbGwgZHVwMigpIG9uIHJl YWQvd3JpdGUgZW5kcyBvZiBhIHBpcGUNCj4gLSAqDQo+IC0gKiBVU0FHRTo8Zm9yIGNvbW1hbmQt bGluZT4NCj4gLSAqICBkdXAyMDQgWy1jIG5dIFstZl0gWy1pIG5dIFstSSB4XSBbLVAgeF0gWy10 XQ0KPiAtICogICAgIHdoZXJlLCAgLWMgbiA6IFJ1biBuIGNvcGllcyBjb25jdXJyZW50bHkuDQo+ IC0gKiAgICAgICAgICAgICAtZiAgIDogVHVybiBvZmYgZnVuY3Rpb25hbGl0eSBUZXN0aW5nLg0K PiAtICogICAgICAgICAgICAgLWkgbiA6IEV4ZWN1dGUgdGVzdCBuIHRpbWVzLg0KPiAtICogICAg ICAgICAgICAgLUkgeCA6IEV4ZWN1dGUgdGVzdCBmb3IgeCBzZWNvbmRzLg0KPiAtICogICAgICAg ICAgICAgLVAgeCA6IFBhdXNlIGZvciB4IHNlY29uZHMgYmV0d2VlbiBpdGVyYXRpb25zLg0KPiAt ICogICAgICAgICAgICAgLXQgICA6IFR1cm4gb24gc3lzY2FsbCB0aW1pbmcuDQo+IC0gKg0KPiAt ICogUkVTVFJJQ1RJT04NCj4gLSAqCU5PTkUNCj4gLSAqLw0KPiAtDQo+IC0jaWZuZGVmIF9HTlVf U09VUkNFDQo+IC0jZGVmaW5lIF9HTlVfU09VUkNFDQo+IC0jZW5kaWYNCj4gLSNpbmNsdWRlPHN5 cy90eXBlcy5oPg0KPiAtI2luY2x1ZGU8ZmNudGwuaD4NCj4gLSNpbmNsdWRlPHN5cy9zdGF0Lmg+ DQo+IC0jaW5jbHVkZTxlcnJuby5oPg0KPiAtI2luY2x1ZGU8c2lnbmFsLmg+DQo+IC0jaW5jbHVk ZTxzdHJpbmcuaD4NCj4gLSNpbmNsdWRlICJ0ZXN0LmgiDQo+IC0jaW5jbHVkZSAic2FmZV9tYWNy b3MuaCINCj4gLQ0KPiAtdm9pZCBzZXR1cCgpOw0KPiAtdm9pZCBjbGVhbnVwKCk7DQo+IC0NCj4g LWNoYXIgKlRDSUQgPSAiZHVwMjA0IjsNCj4gLWludCBUU1RfVE9UQUwgPSAyOw0KPiAtDQo+IC1p bnQgZmRbMl07DQo+IC1pbnQgbmZkWzJdOw0KPiAtDQo+IC1pbnQgbWFpbihpbnQgYWMsIGNoYXIg KiphdikNCj4gLXsNCj4gLQlpbnQgbGM7DQo+IC0JaW50IGk7DQo+IC0Jc3RydWN0IHN0YXQgb2xk YnVmLCBuZXdidWY7DQo+IC0NCj4gLQl0c3RfcGFyc2Vfb3B0cyhhYywgYXYsIE5VTEwsIE5VTEwp Ow0KPiAtDQo+IC0Jc2V0dXAoKTsNCj4gLQ0KPiAtCWZvciAobGMgPSAwOyBURVNUX0xPT1BJTkco bGMpOyBsYysrKSB7DQo+IC0NCj4gLQkJdHN0X2NvdW50ID0gMDsNCj4gLQ0KPiAtCQkvKiBsb29w IHRocm91Z2ggdGhlIHRlc3QgY2FzZXMgKi8NCj4gLQkJZm9yIChpID0gMDsgaTwgIFRTVF9UT1RB TDsgaSsrKSB7DQo+IC0JCQlURVNUKGR1cDIoZmRbaV0sIG5mZFtpXSkpOw0KPiAtDQo+IC0JCQlp ZiAoVEVTVF9SRVRVUk4gPT0gLTEpIHsNCj4gLQkJCQl0c3RfcmVzbShURkFJTCwgImNhbGwgZmFp bGVkIHVuZXhwZWN0ZWRseSIpOw0KPiAtCQkJCWNvbnRpbnVlOw0KPiAtCQkJfQ0KPiAtDQo+IC0J CQlTQUZFX0ZTVEFUKGNsZWFudXAsIGZkW2ldLCZvbGRidWYpOw0KPiAtCQkJU0FGRV9GU1RBVChj bGVhbnVwLCBuZmRbaV0sJm5ld2J1Zik7DQo+IC0NCj4gLQkJCWlmIChvbGRidWYuc3RfaW5vICE9 IG5ld2J1Zi5zdF9pbm8pDQo+IC0JCQkJdHN0X3Jlc20oVEZBSUwsICJvcmlnaW5hbCBhbmQgZHVw ZWQgIg0KPiAtCQkJCQkgImlub2RlcyBkbyBub3QgbWF0Y2giKTsNCj4gLQkJCWVsc2UNCj4gLQkJ CQl0c3RfcmVzbShUUEFTUywgIm9yaWdpbmFsIGFuZCBkdXBlZCAiDQo+IC0JCQkJCSAiaW5vZGVz IGFyZSB0aGUgc2FtZSIpOw0KPiAtDQo+IC0JCQlTQUZFX0NMT1NFKGNsZWFudXAsIFRFU1RfUkVU VVJOKTsNCj4gLQkJfQ0KPiAtCX0NCj4gLQ0KPiAtCWNsZWFudXAoKTsNCj4gLQl0c3RfZXhpdCgp Ow0KPiAtfQ0KPiAtDQo+IC12b2lkIHNldHVwKHZvaWQpDQo+IC17DQo+IC0JZmRbMF0gPSAtMTsN Cj4gLQ0KPiAtCXRzdF9zaWcoRk9SSywgREVGX0hBTkRMRVIsIGNsZWFudXApOw0KPiAtDQo+IC0J VEVTVF9QQVVTRTsNCj4gLQ0KPiAtCXRzdF90bXBkaXIoKTsNCj4gLQ0KPiAtCVNBRkVfUElQRShj bGVhbnVwLCBmZCk7DQo+IC19DQo+IC0NCj4gLXZvaWQgY2xlYW51cCh2b2lkKQ0KPiAtew0KPiAt CWludCBpOw0KPiAtDQo+IC0JZm9yIChpID0gMDsgaTwgIChpbnQpQVJSQVlfU0laRShmZCk7IGkr Kykgew0KPiAtCQljbG9zZShmZFtpXSk7DQo+IC0JCWNsb3NlKG5mZFtpXSk7DQo+IC0JfQ0KPiAt DQo+IC0JdHN0X3JtZGlyKCk7DQo+IC19DQoKLS0gCk1haWxpbmcgbGlzdCBpbmZvOiBodHRwczov L2xpc3RzLmxpbnV4Lml0L2xpc3RpbmZvL2x0cAo=