[LTP] [PATCH 5/5] syscalls/dup2/dup205: Convert dup205 to the new API
QI Fuli
fukuri.sai@gmail.com
Thu Sep 2 13:58:49 CEST 2021
From: QI Fuli <qi.fuli@fujitsu.com>
Signed-off-by: QI Fuli <qi.fuli@fujitsu.com>
---
testcases/kernel/syscalls/dup2/dup205.c | 165 +++++++++---------------
1 file changed, 62 insertions(+), 103 deletions(-)
diff --git a/testcases/kernel/syscalls/dup2/dup205.c b/testcases/kernel/syscalls/dup2/dup205.c
index 0b324531f..30526fda6 100644
--- a/testcases/kernel/syscalls/dup2/dup205.c
+++ b/testcases/kernel/syscalls/dup2/dup205.c
@@ -1,45 +1,16 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
/*
+ * Copyright (c) International Business Machines Corp., 2002
*
- * Copyright (c) International Business Machines Corp., 2002
- *
- * 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
*/
/* Ported from SPIE, section2/iosuite/dup6.c, by Airong Zhang */
-/*======================================================================
- =================== TESTPLAN SEGMENT ===================
->KEYS: < dup2()
->WHAT: < Does dup return -1 on the 21st file?
->HOW: < Create up to _NFILE files and check for -1 return on the
- < next attempt
- < Should check NOFILE as well as _NFILE. 19-Jun-84 Dale.
->BUGS: <
-======================================================================*/
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <fcntl.h>
+#include <stdlib.h>
#include <stdio.h>
-#include <unistd.h>
-#include "test.h"
+#include "tst_test.h"
-char *TCID = "dup205";
-int TST_TOTAL = 1;
int *fildes;
int min;
int local_flag;
@@ -47,88 +18,76 @@ int local_flag;
#define PASSED 1
#define FAILED 0
-static void setup(void);
-static void cleanup(void);
+static void setup(void)
+{
+ min = getdtablesize(); /* get number of files allowed open */
+ fildes = malloc((min + 10) * sizeof(int));
+ if (fildes == NULL)
+ tst_brk(TBROK | TERRNO, "malloc error");
+}
+
+static void cleanup(void)
+{
+ if (fildes != NULL)
+ free(fildes);
+}
-int main(int ac, char *av[])
+static void run(void)
{
int ifile;
char pfilname[40];
int serrno;
- int lc;
-
ifile = -1;
- tst_parse_opts(ac, av, NULL, NULL);
-
local_flag = PASSED;
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- sprintf(pfilname, "./dup205.%d\n", getpid());
- unlink(pfilname);
- serrno = 0;
- if ((fildes[0] = creat(pfilname, 0666)) == -1)
- tst_brkm(TBROK | TERRNO, cleanup, "creat failed");
- else {
- fildes[fildes[0]] = fildes[0];
- for (ifile = fildes[0] + 1; ifile < min + 10; ifile++) {
- if ((fildes[ifile] = dup2(fildes[ifile - 1],
- ifile)) == -1) {
- serrno = errno;
- break;
- } else {
- if (fildes[ifile] != ifile) {
- tst_brkm(TFAIL, cleanup,
- "got wrong descriptor "
- "number back (%d != %d)",
- fildes[ifile], ifile);
- }
- }
- } /* end for */
- if (ifile < min) {
- tst_resm(TFAIL, "Not enough files duped");
- local_flag = FAILED;
- } else if (ifile > min) {
- tst_resm(TFAIL, "Too many files duped");
- local_flag = FAILED;
- }
- if (serrno != EBADF && serrno != EMFILE &&
- serrno != EINVAL) {
- tst_resm(TFAIL, "bad errno on dup2 failure");
- local_flag = FAILED;
+ sprintf(pfilname, "./dup205.%d\n", getpid());
+ unlink(pfilname);
+ serrno = 0;
+
+ fildes[0] = creat(pfilname, 0666);
+ if (fildes[0] == -1)
+ tst_brk(TBROK | TERRNO, "creat failed");
+ else {
+ fildes[fildes[0]] = fildes[0];
+ for (ifile = fildes[0] + 1; ifile < min + 10; ifile++) {
+ fildes[ifile] = dup2(fildes[ifile - 1], ifile);
+ if (fildes[ifile] == -1) {
+ serrno = errno;
+ break;
}
+ if (fildes[ifile] != ifile)
+ tst_brk(TFAIL, "got wrong descriptor "
+ "number back (%d != %d)",
+ fildes[ifile], ifile);
+ } /* end for */
+ if (ifile < min) {
+ tst_res(TFAIL, "Not enough files duped");
+ local_flag = FAILED;
+ } else if (ifile > min) {
+ tst_res(TFAIL, "Too many files duped");
+ local_flag = FAILED;
}
- unlink(pfilname);
- for (ifile = fildes[0]; ifile < min + 10; ifile++)
- close(fildes[ifile]);
- if (local_flag == PASSED) {
- tst_resm(TPASS, "Test passed.");
- } else {
- tst_resm(TFAIL, "Test failed.");
+ if (serrno != EBADF && serrno != EMFILE &&
+ serrno != EINVAL) {
+ tst_res(TFAIL, "bad errno on dup2 failure");
+ local_flag = FAILED;
}
-
}
- cleanup();
- tst_exit();
-}
-
-static void setup(void)
-{
- tst_tmpdir();
-
- min = getdtablesize(); /* get number of files allowed open */
- fildes = malloc((min + 10) * sizeof(int));
- if (fildes == NULL)
- tst_brkm(TBROK | TERRNO, cleanup, "malloc error");
+ unlink(pfilname);
+ for (ifile = fildes[0]; ifile < min + 10; ifile++)
+ close(fildes[ifile]);
+ if (local_flag == PASSED) {
+ tst_res(TPASS, "Test passed.");
+ } else {
+ tst_res(TFAIL, "Test failed.");
+ }
}
-static void cleanup(void)
-{
- if (fildes != NULL)
- free(fildes);
- tst_rmdir();
-}
+static struct tst_test test = {
+ .needs_tmpdir = 1,
+ .test_all = run,
+ .setup = setup,
+ .cleanup = cleanup,
+};
--
2.31.1
More information about the ltp
mailing list