From mboxrd@z Thu Jan 1 00:00:00 1970 From: xuyang2018.jy@fujitsu.com Date: Thu, 16 Sep 2021 07:49:53 +0000 Subject: [LTP] [PATCH v2 2/4] syscalls/dup2/dup202: Convert to new API and merge dup204 into dup202 In-Reply-To: <6142EEB8.30409@fujitsu.com> References: <20210915155152.8515-1-qi.fuli@fujitsu.com> <20210915155152.8515-3-qi.fuli@fujitsu.com> <6142EEB8.30409@fujitsu.com> Message-ID: <6142F735.4080208@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 Also, when I read dup2 man-page, I also find old an new fd also share the offset as below: " After a successful return, the old and new file descriptors may be used interchangeably. Since the two file descriptors refer to the same open file description, they share file offset and file status flags; for example, if the file offset is modified by using lseek(2) on one of the file descriptors, the offset is also changed for the other file descriptor." We can add this check into here or adding a new case. Best Regards Yang Xu > 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 40181C433EF for ; Thu, 16 Sep 2021 07:50:15 +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 2169661185 for ; Thu, 16 Sep 2021 07:50:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 2169661185 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 BE6AE3C88EB for ; Thu, 16 Sep 2021 09:50:11 +0200 (CEST) Received: from in-5.smtp.seeweb.it (in-5.smtp.seeweb.it [IPv6:2001:4b78:1:20::5]) (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 F018A3C1D75 for ; Thu, 16 Sep 2021 09:50:00 +0200 (CEST) Received: from esa4.fujitsucc.c3s2.iphmx.com (esa4.fujitsucc.c3s2.iphmx.com [68.232.151.214]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by in-5.smtp.seeweb.it (Postfix) with ESMTPS id 70187601202 for ; Thu, 16 Sep 2021 09:49:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1631778599; x=1663314599; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=lwgbcJXS+WT8Yb+5REZnys2+6uoQt1N5bJ3PIO7td0c=; b=YiPE9BcAYmCOeRqABMe2MKhrxu81iVj5HWvtNAXVwq7NnTr9/oK6s5cm NQnCCaL1XA8MAYuSPdFvvtWg1FHTNpeNMBs9x1Os1BHL9VPkOSXMoHXFN KVEFkczLpU0m4aHH4QqvdSmepmA/E/P+E1XuuBF7vvCdD38LWVso8yKkX Wm4ZRPwPHMuH3zCnhCBBZa+zIEbeIax+AcuIMorusbiGb12vkS/jHJU11 uj4ZJV9DirYnA8ctoioxRegWxcDg9mawLwYkOjj30TvKLGxGHCByim4ZB HoCLja3I/u88Tez5a7b1jFXk01Wb5ccCiEYu+WZbVttLIrKgUublFP789 A==; X-IronPort-AV: E=McAfee;i="6200,9189,10108"; a="47239358" X-IronPort-AV: E=Sophos;i="5.85,297,1624287600"; d="scan'208";a="47239358" Received: from mail-ty1jpn01lp2055.outbound.protection.outlook.com (HELO JPN01-TY1-obe.outbound.protection.outlook.com) ([104.47.93.55]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Sep 2021 16:49:57 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YlRmZfCCSYztFtVIWeZ1GzCQ2U6QcW937HzwgKVd3AM5oJgQnfcSnguYpfOkJ5l+gsAyBs6dlGlGPCS32+NSvn57JNG1EiWAs63EkHxKXYC7HnLWVSo3KXBn8/CWwRTe636fLzNKGKM6VkHmoJ7Yi3eU7zn8JwBHTmP9TrZcbxRThNRoTFWK1mgp74PMI8eIyg9ou3zCTnf7qultYxy9rwvs5XgcBtO/Jqz6Ncin0cm34UqMWM8ZFoE/bHFiFbLZZTyTeKB3pBCcc7RaoJmc1u3l9jZL+pYMpVpdXQkfM71IpOdmi8ZORXbhbrq+pMBo6NYDq9I3q8a/H1UxnnVcMQ== 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=lwgbcJXS+WT8Yb+5REZnys2+6uoQt1N5bJ3PIO7td0c=; b=JDBVWqdZS7SJ1/P+FmyHFAj5pL3W0f3BRQheL5dTo0msBhMLbjjr/jrXJ9XnePY/KD07CpxZ3doqvKlN3cWTjrDxZ6bjsh9yrW5qqYaQYt+CG+xFqfM41yMM6Nr8lkF1Ge5mgXOwIIJi2RKblxpfpdXfdAGT1z80F1fRCEaoijoLkMQyaY3l+kqOZoQ8/HQdyRFp+ZUZGMxSEV4p8ey4gNg06f39v03gFpWuV4iRO7xHwV09LU5QRShO4q4bwAjF6TmAKyue9QkRlKp2RG16YBnR8p7KUnsicws49ucU9timKhub5mGAQRwpHVOHYAfByTYp/b6u9tlESc9b68efUQ== 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=lwgbcJXS+WT8Yb+5REZnys2+6uoQt1N5bJ3PIO7td0c=; b=Uxe+Wd2XAkKEM0ZnStJnrDwCxM4khaYYP6RzZpgaJyvuvmqSVewxC8bDhicSuJ5mlryfZJ1D0F0SeGHfSFHUzyfNgfOGorVs6gYYFhCLfDg6EXmYw+g42/whTK+zKLUkou3NdNzMbs5DYHW5wlem3HIEAQbJV7+FwMEXy86Ess4= Received: from TYCPR01MB6544.jpnprd01.prod.outlook.com (2603:1096:400:98::6) by TY1PR01MB1770.jpnprd01.prod.outlook.com (2603:1096:403:6::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.18; Thu, 16 Sep 2021 07:49:53 +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:49:53 +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: AQHXqkm5F2ctbGR8BUStHq7PSmTeQKumQEQAgAAKHoA= Date: Thu, 16 Sep 2021 07:49:53 +0000 Message-ID: <6142F735.4080208@fujitsu.com> References: <20210915155152.8515-1-qi.fuli@fujitsu.com> <20210915155152.8515-3-qi.fuli@fujitsu.com> <6142EEB8.30409@fujitsu.com> In-Reply-To: <6142EEB8.30409@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: 507d3410-e845-48bd-216b-08d978e691c6 x-ms-traffictypediagnostic: TY1PR01MB1770: 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: yd1DtISEnjTuhUJfhoO8pqXPDGkrFws3elF9o8HacfVgox+4bCERyUNq1B1mTl3MVSaB8cXpl7XlrvGVHbS12gio9gXrsBEdlcc5JcqcVvZXnl2xjh+ImpVhs1bZgeIpzgN4nb7g4ud63zphwQca8OaZsv6ijYSCVUCTilMhJ7QXxNmhDuKIOpGy3GDcPAFS2cOIMIAD/Ij8KEffeNwKa4yQjCZd3th96j6/wt2QoDlyUnkVoPSCGhsuzEltp9EFUQ3ZUUhTPUtBdlapJdULGdxPTsGsZdOOEshqD83khVe/Nx7SxhCAF13+tq2CpJG6ti3E0L3eFfMN/v8RvXCo2xcp4QFUxxZVC4VecBFVCY7UOUSqQERjZoOD55wXuoryKM9yZO6vTyxCr7EKDOUochHdXc6ocD5U8iYtZVkB2vXERxdszYixv1yxgR8XzN4SG/W9qWq68kBQ0I6RtWYc9oAt3Dtr9I1rSe0PuEIPdUCuV1+MO5Kf2st6WsuFFS290A1pRaHdBr97AfVlhqn4mrbQb1rNzCBNEd6GOJBbxl1wyqHQYnK6cmCl+EH8rUj2dallPOzhwlMoSExBsPFLxzfB4iSUdbfdw0L/8u3V36sE9my7ufyFCII9DvuUBC1ZPxJQF3RQ6Hfnfbl252nRa6QM/pgl71m6OXUu9nw9dW8pZIYd1jYvrgEP+y5Due87vO9KkPj5JQMOeyhAIg3yoavJgqJQ84StzRP47cU/+SQ= 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)(2906002)(83380400001)(86362001)(6486002)(66946007)(76116006)(508600001)(87266011)(71200400001)(30864003)(186003)(91956017)(38070700005)(33656002)(6506007)(66556008)(66476007)(36756003)(85182001)(26005)(66446008)(107886003)(6512007)(54906003)(122000001)(2616005)(316002)(4326008)(5660300002)(6916009)(8936002)(8676002)(64756008)(38100700002)(2004002); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?gb2312?B?V0lvSjdRODlMSXNScXhnMTYrUnNUc2ExaGZBWnRvNysxakQ4UDJldzUzK0JY?= =?gb2312?B?aGFMVytkamJWendhSlVJN1dTVjkzeGZ6bFZHS2dYRm9YNmJpWGpod1hwNUhD?= =?gb2312?B?bFBPaExMTmJpcFpSZHdlSmY3QU9TamFtZ0l2eFRaKzVaS2Y4LytKbDNxVDFS?= =?gb2312?B?VWdwa3prNkxKUE1FV01leXBuYUdLSmZFN2s4OUhZQkpwYWNLVHk2S29VMk9h?= =?gb2312?B?VDVnM2JkamtnQmxiVjdBWm16ZGNFRXJiWkVNUHVFS3F4aFpuWS9hamlrNzg1?= =?gb2312?B?TTFaMXVaWVZGNUxJZ1pPTXBmR1NQbmh4S1AwL1FmeEZCYVVvM2ZsbG9xeHpa?= =?gb2312?B?U2JSYXl0NFIzdVc2VjVoZ0F0Z3dmckhBSk9XNTZXSm9JcEhQbDU0WFllZFd5?= =?gb2312?B?TWoreXFQb05BWUZibEJBNkh4akE4RWlTaER4SldIcm5JQlo3OHUySUxnZ2NI?= =?gb2312?B?VDVsRUJsZVNsVFdFVlRaTkRXVHBDcDZOZEx6NkJVVlBDdEZiS0cxK2FiK1Rs?= =?gb2312?B?dU1NSmczTGlKaE1TalZCUWd4MzBMclhxTVFnLzNPNlNSNzdNTmNoWjBXaGNE?= =?gb2312?B?TlZROG9IZnoreVhBcy9xcWQ3OWx0UHoxdkpUYkZFUHExbi9XczRRVjAvM0dz?= =?gb2312?B?TnFZSmxiZHFaaDk2eDN3V2F5Tm5DekFDTjQzbTRmeTVJbnpOZDRBb1pYeS9T?= =?gb2312?B?ZHJtbHVibGVjdjVtcENSRzBRKzFReEZ0ckZoVXNNV1NZZjd4OHZHQVZNS0RK?= =?gb2312?B?K3pLcjRiNlFqQkNEeExpRG82bkdUUTRiM0w0UjRDN3U2cTFmOWdlZmtZWGUr?= =?gb2312?B?TzFKMXphdUp5c25Qa2R2cTZIV3FvM0ZpMVI4Sm5yT2Yvd2hSZVBLcHdaOFd0?= =?gb2312?B?VDluU1c3dnBPNFo2RklwUnY4dVhBdjhEWm42QS9JYkc4QTVGdUNJTDE3K1ZV?= =?gb2312?B?eFdKVmZ3SnVDRVBLNFk3VGRHS0VVZURLT1hTTmM1VzlET2lQNmNXMTUxYW1x?= =?gb2312?B?dmdVbFJUWW5taWZhTkRHKzVTaEpncnhydmhad01ZZmxGTVZLYm0rTHBHcDFE?= =?gb2312?B?ZmNKblAwT3pYL2JKR0EvSllydzNBZElLeGdVWld6Z0dKK3RVeE0rN0gxZ0VY?= =?gb2312?B?dXhqK09xYjdZUWxpMHdWaTRyeDFDRUZvdVpIK3JZOVZTODdScFpFVU5zcnRJ?= =?gb2312?B?Z3c1Nnc0Nm9rdXZZQ0pvM2lNYmdueFpVZWxSSXlqckFsTkVudDVKNHRRTFZJ?= =?gb2312?B?ZFNwdVIraTRXclRGdXJCeXRMcnltNFBCSjQxdkxlRmNmdjhHTWlQV3d4dXd6?= =?gb2312?B?cEl0cW5zR1Z1UXdsM3A2VkU2RldiQmQrZisrV3pXVHE5czBxUU1hM1FwYk1S?= =?gb2312?B?V291RytIc1BOYlByb29VdU1oeVozajdKRUJOT0h4UFJ0eU12NVBDRGI2TFE0?= =?gb2312?B?ak4wUTB0dzlUMUhGRVdYVVFtcnljVFVoNkVzSjFJaHI2S3E1a00wbVVJdVAr?= =?gb2312?B?VDBEM014ZGZzQ1NKc2pENjQzZSt1SnlET3ZTWXZ4YnNmYVFsa2FSQ0oyWE94?= =?gb2312?B?Vi9PYUlWNGJ1bnBSeU4wS04ySVkzM2ZuYUFYWitGUFpob3NjWkdUQUxJRnha?= =?gb2312?B?ZHNIUWdDR05VbW96Uk10My9rVjNUK2l4ZUo5WkR5R1ZZVmZRSlFBNU10enls?= =?gb2312?B?cDEwaGlpVGY1UU5NNW8rYWRXNzRjUkw5Tm9IeDVtbGJESmtraWlpRVlZSDZG?= =?gb2312?B?eGc0cFdUcy9yQmhZeVdRa0plT2hjQjUvaEUrbkFSTWdvaGd3WWpyMkFZODgw?= =?gb2312?B?T05VdURLTUJtWFY5cVhaUT09?= Content-ID: <2E06913A9B31BD44B454076DB9415D22@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: 507d3410-e845-48bd-216b-08d978e691c6 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2021 07:49:53.2376 (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: X5IcG6V10YOxwmTrqr7/IypTzVIwzZmpZsjH0DIFOsacYOEvEg3fQEcXUz09Y3N7+w4HXq/72KH63JheMCa9KVZ9004ltYU8sSLoja4RqfQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY1PR01MB1770 X-Virus-Scanned: clamav-milter 0.102.4 at in-5.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: <20210916074953.BnR52l2QOGUl-QrGC4Bz-F1c50LDcTumItxUVEqoj1o@z> SGkgUWkNCg0KQWxzbywgd2hlbiBJIHJlYWQgZHVwMiBtYW4tcGFnZSwgSSBhbHNvIGZpbmQgb2xk IGFuIG5ldyBmZCBhbHNvIHNoYXJlDQp0aGUgb2Zmc2V0IGFzIGJlbG93Og0KICAgIiBBZnRlciBh IHN1Y2Nlc3NmdWwgcmV0dXJuLCB0aGUgb2xkIGFuZCBuZXcgZmlsZSBkZXNjcmlwdG9ycyBtYXkg YmUgDQp1c2VkIGludGVyY2hhbmdlYWJseS4gIFNpbmNlIHRoZSB0d28gZmlsZSBkZXNjcmlwdG9y cyByZWZlciB0byB0aGUgc2FtZSANCm9wZW4gZmlsZSBkZXNjcmlwdGlvbiwgdGhleSAgc2hhcmUg IGZpbGUgIG9mZnNldCAgYW5kICBmaWxlICBzdGF0dXMNCiAgICAgICAgZmxhZ3M7IGZvciBleGFt cGxlLCBpZiB0aGUgZmlsZSBvZmZzZXQgaXMgbW9kaWZpZWQgYnkgdXNpbmcgDQpsc2VlaygyKSBv biBvbmUgb2YgdGhlIGZpbGUgZGVzY3JpcHRvcnMsIHRoZSBvZmZzZXQgaXMgYWxzbyBjaGFuZ2Vk IGZvciANCnRoZSBvdGhlciBmaWxlIGRlc2NyaXB0b3IuIg0KDQpXZSBjYW4gYWRkIHRoaXMgY2hl Y2sgaW50byBoZXJlIG9yIGFkZGluZyBhIG5ldyBjYXNlLg0KDQpCZXN0IFJlZ2FyZHMNCllhbmcg WHUNCj4gSGkgUWkNCj4+IEZyb206IFFJIEZ1bGk8cWkuZnVsaUBmdWppdHN1LmNvbT4NCj4+DQo+ PiBTaWduZWQtb2ZmLWJ5OiBRSSBGdWxpPHFpLmZ1bGlAZnVqaXRzdS5jb20+DQo+PiAtLS0NCj4+ IHRlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZHVwMi9kdXAyMDIuYyB8IDE5MCArKysrKysrLS0t LS0tLS0tLS0tLS0tLS0NCj4+IHRlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZHVwMi9kdXAyMDQu YyB8IDEyOCAtLS0tLS0tLS0tLS0tLS0tDQo+PiAyIGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlv bnMoKyksIDI2NiBkZWxldGlvbnMoLSkNCj4+IGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0Y2FzZXMv a2VybmVsL3N5c2NhbGxzL2R1cDIvZHVwMjA0LmMNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvdGVzdGNh c2VzL2tlcm5lbC9zeXNjYWxscy9kdXAyL2R1cDIwMi5jDQo+PiBiL3Rlc3RjYXNlcy9rZXJuZWwv c3lzY2FsbHMvZHVwMi9kdXAyMDIuYw0KPj4gaW5kZXggYzg3NzY5ZmE5Li5mZDhhZWI4NGUgMTAw NjQ0DQo+PiAtLS0gYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL2R1cDIvZHVwMjAyLmMNCj4+ ICsrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvZHVwMi9kdXAyMDIuYw0KPj4gQEAgLTEs MTY3ICsxLDgxIEBADQo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3It bGF0ZXINCj4+ICsNCj4+IC8qDQo+PiAtICoNCj4+IC0gKiBDb3B5cmlnaHQgKGMpIEludGVybmF0 aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4sIDIwMDENCj4+IC0gKg0KPj4gLSAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5DQo+PiAtICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCj4+IC0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KPj4gLSAqIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQo+PiAtICoNCj4+IC0gKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4+ IC0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZg0KPj4gLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gU2VlDQo+PiAtICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuDQo+PiAtICoNCj4+IC0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KPj4gLSAqIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQo+ PiAtICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQQ0KPj4gMDIxMTAtMTMwMSBVU0ENCj4+ICsgKiBDb3B5cmlnaHQgKGMpIEludGVy bmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4sIDIwMDENCj4+ICovDQo+Pg0KPj4gLS8q DQo+PiAtICogTkFNRQ0KPj4gLSAqIGR1cDIwMi5jDQo+PiAtICoNCj4+IC0gKiBERVNDUklQVElP Tg0KPj4gLSAqIElzIHRoZSBhY2Nlc3MgbW9kZSB0aGUgc2FtZSBmb3IgYm90aCBmaWxlIGRlc2Ny aXB0b3JzPw0KPj4gLSAqIDA6IHJlYWQgb25seSA/ICIwNDQ0Ig0KPj4gLSAqIDE6IHdyaXRlIG9u bHkgPyAiMDIyMiINCj4+IC0gKiAyOiByZWFkL3dyaXRlID8gIjA2NjYiDQo+PiAtICoNCj4+IC0g KiBBTEdPUklUSE0NCj4+IC0gKiBDcmVhdCBhIGZpbGUgd2l0aCBlYWNoIGFjY2VzcyBtb2RlOyBk dXAgZWFjaCBmaWxlIGRlc2NyaXB0b3I7DQo+PiAtICogc3RhdCBlYWNoIGZpbGUgZGVzY3JpcHRv ciBhbmQgY29tcGFyZSBtb2RlcyBvZiBlYWNoIHBhaXINCj4+IC0gKg0KPj4gLSAqIFVTQUdFOjxm b3IgY29tbWFuZC1saW5lPg0KPj4gLSAqIGR1cDIwMiBbLWMgbl0gWy1mXSBbLWkgbl0gWy1JIHhd IFstUCB4XSBbLXRdDQo+PiAtICogd2hlcmUsIC1jIG4gOiBSdW4gbiBjb3BpZXMgY29uY3VycmVu dGx5Lg0KPj4gLSAqIC1mIDogVHVybiBvZmYgZnVuY3Rpb25hbGl0eSBUZXN0aW5nLg0KPj4gLSAq IC1pIG4gOiBFeGVjdXRlIHRlc3QgbiB0aW1lcy4NCj4+IC0gKiAtSSB4IDogRXhlY3V0ZSB0ZXN0 IGZvciB4IHNlY29uZHMuDQo+PiAtICogLVAgeCA6IFBhdXNlIGZvciB4IHNlY29uZHMgYmV0d2Vl biBpdGVyYXRpb25zLg0KPj4gLSAqIC10IDogVHVybiBvbiBzeXNjYWxsIHRpbWluZy4NCj4+IC0g Kg0KPj4gLSAqIEhJU1RPUlkNCj4+IC0gKiAwNy8yMDAxIFBvcnRlZCBieSBXYXluZSBCb3llcg0K Pj4gKy8qXA0KPj4gKyAqIFtEZXNjcmlwdGlvbl0NCj4+ICoNCj4+IC0gKiBSRVNUUklDVElPTlMN Cj4+IC0gKiBOb25lDQo+IFRlc3Qgd2hldGhlciB0aGUgYWNjZXNzIG1vZGUgYW5kIGlub2RlIG51 bWJlciBhcmUgc2FtZSBmb3IgYm90aCBmaWxlDQo+IGRlc2NyaXB0b3JzLg0KPj4gKyAqIElzIHRo ZSBhY2Nlc3MgbW9kZSB0aGUgc2FtZSBmb3IgYm90aCBmaWxlIGRlc2NyaXB0b3JzPw0KPj4gKyAq IDA6IHJlYWQgb25seSA/ICIwNDQ0Ig0KPj4gKyAqIDE6IHdyaXRlIG9ubHkgPyAiMDIyMiINCj4+ ICsgKiAyOiByZWFkL3dyaXRlID8gIjA2NjYiDQo+PiAqLw0KPj4NCj4+IC0jaW5jbHVkZTxzeXMv dHlwZXMuaD4NCj4+IC0jaW5jbHVkZTxzeXMvc3RhdC5oPg0KPj4gI2luY2x1ZGU8ZXJybm8uaD4N Cj4+IC0jaW5jbHVkZTxmY250bC5oPg0KPj4gI2luY2x1ZGU8c3RkaW8uaD4NCj4+IC0jaW5jbHVk ZSAidGVzdC5oIg0KPj4gLSNpbmNsdWRlICJzYWZlX21hY3Jvcy5oIg0KPj4gKyNpbmNsdWRlICJ0 c3RfdGVzdC5oIg0KPj4gKyNpbmNsdWRlICJ0c3Rfc2FmZV9tYWNyb3MuaCINCj4+DQo+PiAtY2hh ciAqVENJRCA9ICJkdXAyMDIiOw0KPj4gLWludCBUU1RfVE9UQUwgPSAzOw0KPj4gLQ0KPj4gLXZv aWQgc2V0dXAodm9pZCk7DQo+PiAtdm9pZCBjbGVhbnVwKHZvaWQpOw0KPj4gLQ0KPj4gLWNoYXIg dGVzdGZpbGVbNDBdOw0KPj4gLWludCBmYWlsOw0KPj4gLWludCBuZXdmZDsNCj4+ICtzdGF0aWMg Y2hhciB0ZXN0ZmlsZVs0MF07DQo+Pg0KPj4gLyogc2V0IHRoZXNlIHRvIGEga25vd24gaW5kZXgg aW50byBvdXIgbG9jYWwgZmlsZSBkZXNjcmlwdG9yIHRhYmxlICovDQo+PiAtaW50IGR1cHJkbyA9 IDEwLCBkdXB3cm8gPSAyMCwgZHVwcmR3ciA9IDMwOw0KPj4gK3N0YXRpYyBpbnQgZHVwcmRvID0g MTAsIGR1cHdybyA9IDIwLCBkdXByZHdyID0gMzA7DQo+Pg0KPj4gLXN0cnVjdCB0ZXN0X2Nhc2Vf dCB7DQo+PiArc3RhdGljIHN0cnVjdCB0Y2FzZSB7DQo+PiBpbnQgKm5mZDsNCj4+IG1vZGVfdCBt b2RlOw0KPj4gLX0gVENbXSA9IHsNCj4+IC0gLyogVGhlIGZpcnN0IHRlc3QgY3JlYXQoZXMpIGEg ZmlsZSB3aXRoIG1vZGUgMDQ0NCAqLw0KPj4gLSB7DQo+PiAtICZkdXByZG8sIChTX0lSVVNSIHwg U19JUkdSUCB8IFNfSVJPVEgpfSwNCj4+IC0gLyogVGhlIHNlY29uZCB0ZXN0IGNyZWF0KGVzKSBh IGZpbGUgd2l0aCBtb2RlIDAyMjIgKi8NCj4+IC0gew0KPj4gLSAmZHVwd3JvLCAoU19JV1VTUiB8 IFNfSVdHUlAgfCBTX0lXT1RIKX0sDQo+PiAtIC8qIFRoZSB0aGlyZCB0ZXN0IGNyZWF0KGVzKSBh IGZpbGUgd2l0aCBtb2RlIDA2NjYgKi8NCj4+IC0gew0KPj4gLSAmZHVwcmR3ciwNCj4+IC0gKFNf SVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCB8IFNfSVdVU1IgfCBTX0lXR1JQIHwgU19JV09USCl9 DQo+PiArfSB0Y2FzZXNbXT0gew0KPj4gKyB7JmR1cHJkbywgKFNfSVJVU1IgfCBTX0lSR1JQIHwg U19JUk9USCl9LA0KPj4gKyB7JmR1cHdybywgKFNfSVdVU1IgfCBTX0lXR1JQIHwgU19JV09USCl9 LA0KPj4gKyB7JmR1cHJkd3IsIChTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEggfCBTX0lXVVNS IHwgU19JV0dSUCB8DQo+PiBTX0lXT1RIKX0sDQo+PiB9Ow0KPj4NCj4+IC1pbnQgbWFpbihpbnQg YWMsIGNoYXIgKiphdikNCj4+ICtzdGF0aWMgdm9pZCBzZXR1cCh2b2lkKQ0KPj4gew0KPj4gLSBp bnQgbGM7DQo+PiAtIGludCBpLCBvZmQ7DQo+PiAtIHN0cnVjdCBzdGF0IG9sZGJ1ZiwgbmV3YnVm Ow0KPj4gLQ0KPj4gLSB0c3RfcGFyc2Vfb3B0cyhhYywgYXYsIE5VTEwsIE5VTEwpOw0KPj4gLQ0K Pj4gLSBzZXR1cCgpOw0KPj4gLQ0KPj4gLSBmb3IgKGxjID0gMDsgVEVTVF9MT09QSU5HKGxjKTsg bGMrKykgew0KPj4gLQ0KPj4gLSB0c3RfY291bnQgPSAwOw0KPj4gLQ0KPj4gLSAvKiBsb29wIHRo cm91Z2ggdGhlIHRlc3QgY2FzZXMgKi8NCj4+IC0gZm9yIChpID0gMDsgaTwgVFNUX1RPVEFMOyBp KyspIHsNCj4+IC0NCj4+IC0gaWYgKChvZmQgPSBjcmVhdCh0ZXN0ZmlsZSwgVENbaV0ubW9kZSkp ID09IC0xKQ0KPj4gLSB0c3RfYnJrbShUQlJPSyB8IFRFUlJOTywgY2xlYW51cCwNCj4+IC0gImNy ZWF0IGZhaWxlZCIpOw0KPj4gLQ0KPj4gLSBURVNUKGR1cDIob2ZkLCAqVENbaV0ubmZkKSk7DQo+ PiAtDQo+PiAtIGlmIChURVNUX1JFVFVSTiA9PSAtMSkgew0KPj4gLSB0c3RfcmVzbShURkFJTCB8 IFRURVJSTk8sDQo+PiAtICJjYWxsIGZhaWxlZCB1bmV4cGVjdGVkbHkiKTsNCj4+IC0gY29udGlu dWU7DQo+PiAtIH0NCj4+ICsgdW1hc2soMCk7DQo+PiArIHNwcmludGYodGVzdGZpbGUsICJkdXAy MDIuJWQiLCBnZXRwaWQoKSk7DQo+PiArfQ0KPj4NCj4+IC0gLyogc3RhdCB0aGUgb3JpZ2luYWwg ZmlsZSAqLw0KPj4gLSBTQUZFX0ZTVEFUKGNsZWFudXAsIG9mZCwmb2xkYnVmKTsNCj4+ICtzdGF0 aWMgdm9pZCBydW4odW5zaWduZWQgaW50IGkpDQo+PiArew0KPj4gKyBpbnQgb2ZkOw0KPj4gKyBz dHJ1Y3Qgc3RhdCBvbGRidWYsIG5ld2J1ZjsNCj4+ICsgc3RydWN0IHRjYXNlICp0YyA9IHRjYXNl cyArIGk7DQo+Pg0KPj4gLSAvKiBzdGF0IHRoZSBkdXBlZCBmaWxlICovDQo+PiAtIFNBRkVfRlNU QVQoY2xlYW51cCwgKlRDW2ldLm5mZCwmbmV3YnVmKTsNCj4+ICsgb2ZkID0gU0FGRV9PUEVOKHRl c3RmaWxlLCBPX0NSRUFULCB0Yy0+bW9kZSk7DQo+Pg0KPj4gLSBpZiAob2xkYnVmLnN0X21vZGUg IT0gbmV3YnVmLnN0X21vZGUpDQo+PiAtIHRzdF9yZXNtKFRGQUlMLCAib3JpZ2luYWwgYW5kIGR1 cCAiDQo+PiAtICJtb2RlcyBkbyBub3QgbWF0Y2giKTsNCj4+IC0gZWxzZQ0KPj4gLSB0c3RfcmVz bShUUEFTUywgImZzdGF0IHNob3dzIG5ldyBhbmQgIg0KPj4gLSAib2xkIG1vZGVzIGFyZSB0aGUg c2FtZSIpOw0KPj4gKyBURVNUKGR1cDIob2ZkLCAqdGMtPm5mZCkpOw0KPj4NCj4+IC0gLyogcmVt b3ZlIHRoZSBmaWxlIHNvIHRoYXQgd2UgY2FuIHVzZSBpdCBhZ2FpbiAqLw0KPj4gLSBpZiAoY2xv c2UoKlRDW2ldLm5mZCkgPT0gLTEpDQo+PiAtIHBlcnJvcigiY2xvc2UgZmFpbGVkIik7DQo+PiAt IGlmIChjbG9zZShvZmQpID09IC0xKQ0KPj4gLSBwZXJyb3IoImNsb3NlIGZhaWxlZCIpOw0KPj4g LSBpZiAodW5saW5rKHRlc3RmaWxlKSA9PSAtMSkNCj4+IC0gcGVycm9yKCJ1bmxpbmsgZmFpbGVk Iik7DQo+PiAtIH0NCj4+ICsgaWYgKFRTVF9SRVQgPT0gLTEpIHsNCj4+ICsgdHN0X3JlcyhURkFJ TCB8IFRURVJSTk8sICJjYWxsIGZhaWxlZCB1bmV4cGVjdGVkbHkiKTsNCj4+ICsgcmV0dXJuOw0K Pj4gfQ0KPiBUaGlzIGNhc2UgZmFpbHMgb24gbXkgbWFjaGluZSB3aGVuIHVzaW5nIC1pIHBhcmFt ZXRlcnMNCj4gW3Jvb3RAbG9jYWxob3N0IGR1cDJdIyAuL2R1cDIwMiAtaSAyDQo+IHRzdF90ZXN0 LmM6MTM1MzogVElORk86IFRpbWVvdXQgcGVyIHJ1biBpcyAwaCAwNW0gMDBzDQo+IGR1cDIwMi5j OjY1OiBUUEFTUzogb3JpZ2luYWwgYW5kIGR1cGVkIG1vZGVzIGFyZSB0aGUgc2FtZQ0KPiBkdXAy MDIuYzo3MDogVFBBU1M6IG9yaWdpbmFsIGFuZCBkdXBlZCBpbm9kZXMgYXJlIHRoZSBzYW1lDQo+ IGR1cDIwMi5jOjY1OiBUUEFTUzogb3JpZ2luYWwgYW5kIGR1cGVkIG1vZGVzIGFyZSB0aGUgc2Ft ZQ0KPiBkdXAyMDIuYzo3MDogVFBBU1M6IG9yaWdpbmFsIGFuZCBkdXBlZCBpbm9kZXMgYXJlIHRo ZSBzYW1lDQo+IGR1cDIwMi5jOjY1OiBUUEFTUzogb3JpZ2luYWwgYW5kIGR1cGVkIG1vZGVzIGFy ZSB0aGUgc2FtZQ0KPiBkdXAyMDIuYzo3MDogVFBBU1M6IG9yaWdpbmFsIGFuZCBkdXBlZCBpbm9k ZXMgYXJlIHRoZSBzYW1lDQo+IGR1cDIwMi5jOjUyOiBURkFJTDogY2FsbCBmYWlsZWQgdW5leHBl Y3RlZGx5OiBFQkFERiAoOSkNCj4gZHVwMjAyLmM6NTI6IFRGQUlMOiBjYWxsIGZhaWxlZCB1bmV4 cGVjdGVkbHk6IEVCQURGICg5KQ0KPiBkdXAyMDIuYzo1MjogVEZBSUw6IGNhbGwgZmFpbGVkIHVu ZXhwZWN0ZWRseTogRUJBREYgKDkpDQo+DQo+IEl0IHNlZW1zIG5ld2ZkIGhhcyB0dXJuZWQgaW50 byAtMSBhbmQgc2VlIGR1cDIgbWFuLXBhZ2UgaXQgc2FpZA0KPiAiIElmIG5ld2ZkIHdhcyBvcGVu LCBhbnkgZXJyb3JzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHJlcG9ydGVkIGF0DQo+IGNsb3NlKDIp IHRpbWUgYXJlIGxvc3QuIElmIHRoaXMgaXMgb2YgY29uY2VybiwgdGhlbqGqdW5sZXNzIHRoZSBw cm9ncmFtDQo+IGlzIHNpbmdsZS10aHJlYWRlZCBhbmQgZG9lcyBub3QgYWxsb2NhdGUgZmlsZSBk ZXNjcmlwdG9ycyBpbiBzaWduYWwNCj4gaGFuZGxlcnOhqnRoZSBjb3JyZWN0IGFwcHJvYWNoIGlz IG5vdCB0byBjbG9zZSBuZXdmZCBiZWZvcmUgY2FsbGluZw0KPiBkdXAyKCksIGJlY2F1c2Ugb2Yg dGhlIHJhY2UgY29uZGl0aW9uIGRlc2NyaWJlZCBhYm92ZS4iDQo+DQo+IE1heWJlIHdlIHNob3Vs ZCByZW1vdmUgdGhlIGNsb3NlIGZvciBuZXdmZCwgYnV0IG9sZCBhcGkgY2FzZSBhbHNvIGNsb3Nl Lg0KPiBJIGFtIG5vdCB2ZXJ5IGNsZWFyIGZvciB0aGlzLg0KPg0KPg0KPiBCZXN0IFJlZ2FyZHMN Cj4gWWFuZyBYdQ0KPj4NCj4+IC0gY2xlYW51cCgpOw0KPj4gLSB0c3RfZXhpdCgpOw0KPj4gLX0N Cj4+IC0NCj4+IC0vKg0KPj4gLSAqIHNldHVwKCkgLSBwZXJmb3JtcyBhbGwgT05FIFRJTUUgc2V0 dXAgZm9yIHRoaXMgdGVzdC4NCj4+IC0gKi8NCj4+IC12b2lkIHNldHVwKHZvaWQpDQo+PiAtew0K Pj4gLQ0KPj4gLSB0c3Rfc2lnKE5PRk9SSywgREVGX0hBTkRMRVIsIGNsZWFudXApOw0KPj4gKyAv KiBzdGF0IHRoZSBvcmlnaW5hbCBmaWxlICovDQo+PiArIFNBRkVfRlNUQVQob2ZkLCZvbGRidWYp Ow0KPj4NCj4+IC0gVEVTVF9QQVVTRTsNCj4+ICsgLyogc3RhdCB0aGUgZHVwZWQgZmlsZSAqLw0K Pj4gKyBTQUZFX0ZTVEFUKCp0Yy0+bmZkLCZuZXdidWYpOw0KPj4NCj4+IC0gdHN0X3RtcGRpcigp Ow0KPj4gKyBpZiAob2xkYnVmLnN0X21vZGUgIT0gbmV3YnVmLnN0X21vZGUpDQo+PiArIHRzdF9y ZXMoVEZBSUwsICJvcmlnaW5hbCBhbmQgZHVwZWQgbW9kZXMgZG8gbm90IG1hdGNoIik7DQo+PiAr IGVsc2UNCj4+ICsgdHN0X3JlcyhUUEFTUywgIm9yaWdpbmFsIGFuZCBkdXBlZCBtb2RlcyBhcmUg dGhlIHNhbWUiKTsNCj4+DQo+PiAtICh2b2lkKXVtYXNrKDApOw0KPj4gKyBpZiAob2xkYnVmLnN0 X2lubyAhPSBuZXdidWYuc3RfaW5vKQ0KPj4gKyB0c3RfcmVzKFRGQUlMLCAib3JpZ2luYWwgYW5k IGR1cGVkIGlub2RlcyBkbyBub3QgbWF0Y2giKTsNCj4+ICsgZWxzZQ0KPj4gKyB0c3RfcmVzKFRQ QVNTLCAib3JpZ2luYWwgYW5kIGR1cGVkIGlub2RlcyBhcmUgdGhlIHNhbWUiKTsNCj4+DQo+PiAt IHNwcmludGYodGVzdGZpbGUsICJkdXAyMDIuJWQiLCBnZXRwaWQoKSk7DQo+PiArIFNBRkVfQ0xP U0UoKnRjLT5uZmQpOw0KPj4gKyBTQUZFX0NMT1NFKG9mZCk7DQo+PiB9DQo+Pg0KPj4gLS8qDQo+ PiAtICogY2xlYW51cCgpIC0gcGVyZm9ybXMgYWxsIE9ORSBUSU1FIGNsZWFudXAgZm9yIHRoaXMg dGVzdCBhdA0KPj4gLSAqIGNvbXBsZXRpb24gb3IgcHJlbWF0dXJlIGV4aXQuDQo+PiAtICovDQo+ PiAtdm9pZCBjbGVhbnVwKHZvaWQpDQo+PiAtew0KPj4gLSB0c3Rfcm1kaXIoKTsNCj4+IC19DQo+ PiArc3RhdGljIHN0cnVjdCB0c3RfdGVzdCB0ZXN0ID0gew0KPj4gKyAubmVlZHNfdG1wZGlyID0g MSwNCj4+ICsgLnRjbnQgPSBBUlJBWV9TSVpFKHRjYXNlcyksDQo+PiArIC50ZXN0ID0gcnVuLA0K Pj4gKyAuc2V0dXAgPSBzZXR1cCwNCj4+ICt9Ow0KPj4gZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9r ZXJuZWwvc3lzY2FsbHMvZHVwMi9kdXAyMDQuYw0KPj4gYi90ZXN0Y2FzZXMva2VybmVsL3N5c2Nh bGxzL2R1cDIvZHVwMjA0LmMNCj4+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXgg YTM1N2JjMTdlLi4wMDAwMDAwMDANCj4+IC0tLSBhL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMv ZHVwMi9kdXAyMDQuYw0KPj4gKysrIC9kZXYvbnVsbA0KPj4gQEAgLTEsMTI4ICswLDAgQEANCj4+ IC0vKg0KPj4gLSAqDQo+PiAtICogQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNz IE1hY2hpbmVzIENvcnAuLCAyMDAxDQo+PiAtICoNCj4+IC0gKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KPj4gLSAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5DQo+PiAtICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCj4+IC0gKiAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLg0KPj4gLSAqDQo+PiAtICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+PiAtICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4+ IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu IFNlZQ0KPj4gLSAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLg0KPj4gLSAqDQo+PiAtICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCj4+IC0gKiBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KPj4gLSAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUENCj4+ IDAyMTEwLTEzMDEgVVNBDQo+PiAtICovDQo+PiAtDQo+PiAtLyoNCj4+IC0gKiBOQU1FDQo+PiAt ICogZHVwMjA0LmMNCj4+IC0gKg0KPj4gLSAqIERFU0NSSVBUSU9ODQo+PiAtICogVGVzdGNhc2Ug dG8gY2hlY2sgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgZHVwMigyKS4NCj4+IC0gKg0KPj4g LSAqIEFMR09SSVRITQ0KPj4gLSAqIGF0dGVtcHQgdG8gY2FsbCBkdXAyKCkgb24gcmVhZC93cml0 ZSBlbmRzIG9mIGEgcGlwZQ0KPj4gLSAqDQo+PiAtICogVVNBR0U6PGZvciBjb21tYW5kLWxpbmU+ DQo+PiAtICogZHVwMjA0IFstYyBuXSBbLWZdIFstaSBuXSBbLUkgeF0gWy1QIHhdIFstdF0NCj4+ IC0gKiB3aGVyZSwgLWMgbiA6IFJ1biBuIGNvcGllcyBjb25jdXJyZW50bHkuDQo+PiAtICogLWYg OiBUdXJuIG9mZiBmdW5jdGlvbmFsaXR5IFRlc3RpbmcuDQo+PiAtICogLWkgbiA6IEV4ZWN1dGUg dGVzdCBuIHRpbWVzLg0KPj4gLSAqIC1JIHggOiBFeGVjdXRlIHRlc3QgZm9yIHggc2Vjb25kcy4N Cj4+IC0gKiAtUCB4IDogUGF1c2UgZm9yIHggc2Vjb25kcyBiZXR3ZWVuIGl0ZXJhdGlvbnMuDQo+ PiAtICogLXQgOiBUdXJuIG9uIHN5c2NhbGwgdGltaW5nLg0KPj4gLSAqDQo+PiAtICogUkVTVFJJ Q1RJT04NCj4+IC0gKiBOT05FDQo+PiAtICovDQo+PiAtDQo+PiAtI2lmbmRlZiBfR05VX1NPVVJD RQ0KPj4gLSNkZWZpbmUgX0dOVV9TT1VSQ0UNCj4+IC0jZW5kaWYNCj4+IC0jaW5jbHVkZTxzeXMv dHlwZXMuaD4NCj4+IC0jaW5jbHVkZTxmY250bC5oPg0KPj4gLSNpbmNsdWRlPHN5cy9zdGF0Lmg+ DQo+PiAtI2luY2x1ZGU8ZXJybm8uaD4NCj4+IC0jaW5jbHVkZTxzaWduYWwuaD4NCj4+IC0jaW5j bHVkZTxzdHJpbmcuaD4NCj4+IC0jaW5jbHVkZSAidGVzdC5oIg0KPj4gLSNpbmNsdWRlICJzYWZl X21hY3Jvcy5oIg0KPj4gLQ0KPj4gLXZvaWQgc2V0dXAoKTsNCj4+IC12b2lkIGNsZWFudXAoKTsN Cj4+IC0NCj4+IC1jaGFyICpUQ0lEID0gImR1cDIwNCI7DQo+PiAtaW50IFRTVF9UT1RBTCA9IDI7 DQo+PiAtDQo+PiAtaW50IGZkWzJdOw0KPj4gLWludCBuZmRbMl07DQo+PiAtDQo+PiAtaW50IG1h aW4oaW50IGFjLCBjaGFyICoqYXYpDQo+PiAtew0KPj4gLSBpbnQgbGM7DQo+PiAtIGludCBpOw0K Pj4gLSBzdHJ1Y3Qgc3RhdCBvbGRidWYsIG5ld2J1ZjsNCj4+IC0NCj4+IC0gdHN0X3BhcnNlX29w dHMoYWMsIGF2LCBOVUxMLCBOVUxMKTsNCj4+IC0NCj4+IC0gc2V0dXAoKTsNCj4+IC0NCj4+IC0g Zm9yIChsYyA9IDA7IFRFU1RfTE9PUElORyhsYyk7IGxjKyspIHsNCj4+IC0NCj4+IC0gdHN0X2Nv dW50ID0gMDsNCj4+IC0NCj4+IC0gLyogbG9vcCB0aHJvdWdoIHRoZSB0ZXN0IGNhc2VzICovDQo+ PiAtIGZvciAoaSA9IDA7IGk8IFRTVF9UT1RBTDsgaSsrKSB7DQo+PiAtIFRFU1QoZHVwMihmZFtp XSwgbmZkW2ldKSk7DQo+PiAtDQo+PiAtIGlmIChURVNUX1JFVFVSTiA9PSAtMSkgew0KPj4gLSB0 c3RfcmVzbShURkFJTCwgImNhbGwgZmFpbGVkIHVuZXhwZWN0ZWRseSIpOw0KPj4gLSBjb250aW51 ZTsNCj4+IC0gfQ0KPj4gLQ0KPj4gLSBTQUZFX0ZTVEFUKGNsZWFudXAsIGZkW2ldLCZvbGRidWYp Ow0KPj4gLSBTQUZFX0ZTVEFUKGNsZWFudXAsIG5mZFtpXSwmbmV3YnVmKTsNCj4+IC0NCj4+IC0g aWYgKG9sZGJ1Zi5zdF9pbm8gIT0gbmV3YnVmLnN0X2lubykNCj4+IC0gdHN0X3Jlc20oVEZBSUws ICJvcmlnaW5hbCBhbmQgZHVwZWQgIg0KPj4gLSAiaW5vZGVzIGRvIG5vdCBtYXRjaCIpOw0KPj4g LSBlbHNlDQo+PiAtIHRzdF9yZXNtKFRQQVNTLCAib3JpZ2luYWwgYW5kIGR1cGVkICINCj4+IC0g Imlub2RlcyBhcmUgdGhlIHNhbWUiKTsNCj4+IC0NCj4+IC0gU0FGRV9DTE9TRShjbGVhbnVwLCBU RVNUX1JFVFVSTik7DQo+PiAtIH0NCj4+IC0gfQ0KPj4gLQ0KPj4gLSBjbGVhbnVwKCk7DQo+PiAt IHRzdF9leGl0KCk7DQo+PiAtfQ0KPj4gLQ0KPj4gLXZvaWQgc2V0dXAodm9pZCkNCj4+IC17DQo+ PiAtIGZkWzBdID0gLTE7DQo+PiAtDQo+PiAtIHRzdF9zaWcoRk9SSywgREVGX0hBTkRMRVIsIGNs ZWFudXApOw0KPj4gLQ0KPj4gLSBURVNUX1BBVVNFOw0KPj4gLQ0KPj4gLSB0c3RfdG1wZGlyKCk7 DQo+PiAtDQo+PiAtIFNBRkVfUElQRShjbGVhbnVwLCBmZCk7DQo+PiAtfQ0KPj4gLQ0KPj4gLXZv aWQgY2xlYW51cCh2b2lkKQ0KPj4gLXsNCj4+IC0gaW50IGk7DQo+PiAtDQo+PiAtIGZvciAoaSA9 IDA7IGk8IChpbnQpQVJSQVlfU0laRShmZCk7IGkrKykgew0KPj4gLSBjbG9zZShmZFtpXSk7DQo+ PiAtIGNsb3NlKG5mZFtpXSk7DQo+PiAtIH0NCj4+IC0NCj4+IC0gdHN0X3JtZGlyKCk7DQo+PiAt fQ0KCi0tIApNYWlsaW5nIGxpc3QgaW5mbzogaHR0cHM6Ly9saXN0cy5saW51eC5pdC9saXN0aW5m by9sdHAK