* [LTP] [PATCH] dup06: Convert to new API
@ 2024-01-09 9:50 Shiyang Ruan
2024-01-09 10:27 ` [LTP] [PATCH] dup07: " Shiyang Ruan
2024-01-10 18:29 ` [LTP] [PATCH] dup06: " Petr Vorel
0 siblings, 2 replies; 6+ messages in thread
From: Shiyang Ruan @ 2024-01-09 9:50 UTC (permalink / raw)
To: ltp
Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com>
---
testcases/kernel/syscalls/dup/dup06.c | 141 ++++++++++----------------
1 file changed, 52 insertions(+), 89 deletions(-)
diff --git a/testcases/kernel/syscalls/dup/dup06.c b/testcases/kernel/syscalls/dup/dup06.c
index e3f8070bf..84fc260a1 100644
--- a/testcases/kernel/syscalls/dup/dup06.c
+++ b/testcases/kernel/syscalls/dup/dup06.c
@@ -1,42 +1,22 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * Copyright (c) International Business Machines Corp., 2002
- * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
- * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
- *
- * 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., 2002
+ * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
+ * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
*/
-/*
- WHAT: Does dup return -1 on the 21st file?
- HOW: Create up to _NFILE (20) files and check for -1 return on the
- next attempt
- Should check NOFILE as well as _NFILE. 19-Jun-84 Dale.
-*/
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/param.h>
-#include "test.h"
+/*\
+ * [Description]
+ *
+ * Test for dup(2) syscall with max open file descriptors.
+ */
-char *TCID = "dup06";
-int TST_TOTAL = 1;
+#include <stdlib.h>
+#include "tst_test.h"
+static int *pfildes;
+static int minfd, maxfd, freefds;
+static char pfilname[40];
static int cnt_free_fds(int maxfd)
{
int freefds = 0;
@@ -48,67 +28,50 @@ static int cnt_free_fds(int maxfd)
return (freefds);
}
-static void setup(void);
-static void cleanup(void);
-
-int main(int ac, char **av)
+static void setup(void)
{
- int *fildes, i;
- int min;
- int freefds;
- int lc;
- const char *pfilname = "dup06";
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- min = getdtablesize();
- freefds = cnt_free_fds(min);
- fildes = malloc((min + 5) * sizeof(int));
-
- for (i = 0; i < min + 5; i++)
- fildes[i] = 0;
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- unlink(pfilname);
-
- if ((fildes[0] = creat(pfilname, 0666)) == -1) {
- tst_resm(TFAIL, "Cannot open first file");
- } else {
- for (i = 1; i < min + 5; i++) {
- if ((fildes[i] = dup(fildes[i - 1])) == -1)
- break;
- }
- if (i < freefds) {
- tst_resm(TFAIL, "Not enough files duped");
- } else if (i > freefds) {
- tst_resm(TFAIL, "Too many files duped");
- } else {
- tst_resm(TPASS, "Test passed.");
- }
- }
+ minfd = getdtablesize(); /* get number of files allowed open */
+ maxfd = minfd + 5;
+ freefds = cnt_free_fds(minfd);
+ pfildes = SAFE_MALLOC(maxfd * sizeof(int));
+ memset(pfildes, -1, maxfd * sizeof(int));
+ sprintf(pfilname, "./dup06.%d\n", getpid());
+}
- unlink(pfilname);
+static void cleanup(void)
+{
+ if (pfildes != NULL)
+ free(pfildes);
+}
- for (i = 0; i < min + 5; i++) {
- if (fildes[i] != 0 && fildes[i] != -1)
- close(fildes[i]);
+static void run(void)
+{
+ int i;
- fildes[i] = 0;
- }
+ pfildes[0] = SAFE_CREAT(pfilname, 0666);
+ for (i = 1; i < maxfd; i++) {
+ if ((pfildes[i] = dup(pfildes[i - 1])) == -1)
+ break;
+ }
+ if (i < freefds) {
+ tst_res(TFAIL, "Not enough files duped");
+ } else if (i > freefds) {
+ tst_res(TFAIL, "Too many files duped");
+ } else {
+ tst_res(TPASS, "Test passed.");
}
- cleanup();
- tst_exit();
-}
+ SAFE_UNLINK(pfilname);
-static void setup(void)
-{
- tst_tmpdir();
+ for (i = 0; i < maxfd; i++) {
+ if (pfildes[i] != 0 && pfildes[i] != -1)
+ SAFE_CLOSE(pfildes[i]);
+ }
}
-static void cleanup(void)
-{
- tst_rmdir();
-}
+static struct tst_test test = {
+ .needs_tmpdir = 1,
+ .test_all = run,
+ .setup = setup,
+ .cleanup = cleanup,
+};
--
2.34.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [LTP] [PATCH] dup07: Convert to new API
2024-01-09 9:50 [LTP] [PATCH] dup06: Convert to new API Shiyang Ruan
@ 2024-01-09 10:27 ` Shiyang Ruan
2024-01-10 18:29 ` [LTP] [PATCH] dup06: " Petr Vorel
1 sibling, 0 replies; 6+ messages in thread
From: Shiyang Ruan @ 2024-01-09 10:27 UTC (permalink / raw)
To: ltp
Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com>
---
testcases/kernel/syscalls/dup/dup07.c | 160 +++++++-------------------
1 file changed, 41 insertions(+), 119 deletions(-)
diff --git a/testcases/kernel/syscalls/dup/dup07.c b/testcases/kernel/syscalls/dup/dup07.c
index a100f5d58..bccee0776 100644
--- a/testcases/kernel/syscalls/dup/dup07.c
+++ b/testcases/kernel/syscalls/dup/dup07.c
@@ -1,22 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- *
- * Copyright (c) International Business Machines Corp., 2002
- * ported from SPIE, section2/iosuite/dup3.c, by Airong Zhang
- * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
- *
- * 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., 2002
+ * ported from SPIE, section2/iosuite/dup3.c, by Airong Zhang
+ * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
*/
/*
@@ -27,116 +13,52 @@
HOW: Creat a file with each access mode; dup each file descriptor;
stat each file descriptor and compare mode of each pair
*/
+/*\
+ * [Description]
+ *
+ * Verify that the file descriptor created by dup(2) syscall has the same
+ * access mode as the old one.
+ */
-#include <stdio.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "test.h"
-
-char *TCID = "dup07";
-int TST_TOTAL = 3;
+#include "tst_test.h"
static const char *testfile = "dup07";
-static void setup(void);
-static void cleanup(void);
+static struct tcase {
+ char *mode_desc;
+ int mode;
+} tcases[] = {
+ {"read only", 0444},
+ {"write only", 0222},
+ {"read/write", 0666},
+};
-int main(int ac, char **av)
+static void run(unsigned int n)
{
- struct stat retbuf;
- struct stat dupbuf;
- int rdoret, wroret, rdwret;
- int duprdo, dupwro, duprdwr;
-
- int lc;
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- if ((rdoret = creat(testfile, 0444)) == -1) {
- tst_resm(TFAIL, "Unable to creat file '%s'", testfile);
+ int oldfd, dupfd;
+ struct stat oldbuf, dupbuf;
+ struct tcase *tc = &tcases[n];
+
+ oldfd = SAFE_CREAT(testfile, tc->mode);
+ dupfd = TST_EXP_FD_SILENT(dup(oldfd), "dup() %s file", tc->mode_desc);
+ if (TST_PASS) {
+ SAFE_FSTAT(oldfd, &oldbuf);
+ SAFE_FSTAT(dupfd, &dupbuf);
+
+ if (oldbuf.st_mode != dupbuf.st_mode) {
+ tst_res(TFAIL, "%s and dup do not match", tc->mode_desc);
} else {
- if ((duprdo = dup(rdoret)) == -1) {
- tst_resm(TFAIL, "Unable to dup '%s'", testfile);
- } else {
- fstat(rdoret, &retbuf);
- fstat(duprdo, &dupbuf);
- if (retbuf.st_mode != dupbuf.st_mode) {
- tst_resm(TFAIL,
- "rdonly and dup do not match");
- } else {
- tst_resm(TPASS,
- "Passed in read mode.");
- }
- close(duprdo);
- }
- close(rdoret);
+ tst_res(TPASS, "Passed in %s mode.", tc->mode_desc);
}
-
- unlink(testfile);
-
- if ((wroret = creat(testfile, 0222)) == -1) {
- tst_resm(TFAIL, "Unable to creat file '%s'", testfile);
- } else {
- if ((dupwro = dup(wroret)) == -1) {
- tst_resm(TFAIL, "Unable to dup '%s'", testfile);
- } else {
- fstat(wroret, &retbuf);
- fstat(dupwro, &dupbuf);
- if (retbuf.st_mode != dupbuf.st_mode) {
- tst_resm(TFAIL,
- "wronly and dup do not match");
- } else {
- tst_resm(TPASS,
- "Passed in write mode.");
- }
- close(dupwro);
- }
- close(wroret);
-
- }
-
- unlink(testfile);
-
- if ((rdwret = creat(testfile, 0666)) == -1) {
- tst_resm(TFAIL, "Unable to creat file '%s'", testfile);
- } else {
- if ((duprdwr = dup(rdwret)) == -1) {
- tst_resm(TFAIL, "Unable to dup '%s'", testfile);
- } else {
- fstat(rdwret, &retbuf);
- fstat(duprdwr, &dupbuf);
- if (retbuf.st_mode != dupbuf.st_mode) {
- tst_resm(TFAIL,
- "rdwr and dup do not match");
- } else {
- tst_resm(TPASS,
- "Passed in read/write mode.");
- }
- close(duprdwr);
- }
- close(rdwret);
- }
-
- unlink(testfile);
+ SAFE_CLOSE(dupfd);
}
+ SAFE_CLOSE(oldfd);
- cleanup();
- tst_exit();
-}
-
-static void setup(void)
-{
- tst_tmpdir();
+ SAFE_UNLINK(testfile);
}
-static void cleanup(void)
-{
- tst_rmdir();
-}
+static struct tst_test test = {
+ .needs_tmpdir = 1,
+ .test = run,
+ .tcnt = ARRAY_SIZE(tcases),
+};
--
2.34.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [LTP] [PATCH] dup06: Convert to new API
2024-01-09 9:50 [LTP] [PATCH] dup06: Convert to new API Shiyang Ruan
2024-01-09 10:27 ` [LTP] [PATCH] dup07: " Shiyang Ruan
@ 2024-01-10 18:29 ` Petr Vorel
2024-01-11 2:10 ` Shiyang Ruan
2024-01-11 2:19 ` [LTP] [PATCH v2 1/2] " Shiyang Ruan
1 sibling, 2 replies; 6+ messages in thread
From: Petr Vorel @ 2024-01-10 18:29 UTC (permalink / raw)
To: Shiyang Ruan; +Cc: ltp
Hi Shiyang,
> Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com>
> ---
> testcases/kernel/syscalls/dup/dup06.c | 141 ++++++++++----------------
> 1 file changed, 52 insertions(+), 89 deletions(-)
> diff --git a/testcases/kernel/syscalls/dup/dup06.c b/testcases/kernel/syscalls/dup/dup06.c
> index e3f8070bf..84fc260a1 100644
> --- a/testcases/kernel/syscalls/dup/dup06.c
> +++ b/testcases/kernel/syscalls/dup/dup06.c
> @@ -1,42 +1,22 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> /*
> - * Copyright (c) International Business Machines Corp., 2002
> - * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
> - * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
...
> + * Copyright (c) International Business Machines Corp., 2002
> + * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
> + * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
Could you please also add your or LTP copyright for this rewrite?
E.g.
* Copyright (c) Linux Test Project, 2003-2015
+ your copyright, or just:
* Copyright (c) Linux Test Project, 2003-2024
$ make check-dup06
CHECK testcases/kernel/syscalls/dup/dup06.c
dup06.c:28: ERROR: return is not a function, parentheses are not required
dup06.c:53: ERROR: do not use assignment in if condition
dup06.c:56: WARNING: braces {} are not necessary for any arm of this statement
Therefore I'm going to merge with following change (+ please let me know if you
want to add your copyright).
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Kind regards,
Petr
diff --git testcases/kernel/syscalls/dup/dup06.c testcases/kernel/syscalls/dup/dup06.c
index 84fc260a1..e7e27b8f9 100644
--- testcases/kernel/syscalls/dup/dup06.c
+++ testcases/kernel/syscalls/dup/dup06.c
@@ -1,8 +1,9 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) International Business Machines Corp., 2002
- * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
+ * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
* Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
+ * Copyright (c) Linux Test Project, 2003-2024
*/
/*\
@@ -17,6 +18,7 @@
static int *pfildes;
static int minfd, maxfd, freefds;
static char pfilname[40];
+
static int cnt_free_fds(int maxfd)
{
int freefds = 0;
@@ -25,7 +27,7 @@ static int cnt_free_fds(int maxfd)
if (fcntl(maxfd, F_GETFD) == -1 && errno == EBADF)
freefds++;
- return (freefds);
+ return freefds;
}
static void setup(void)
@@ -50,16 +52,17 @@ static void run(void)
pfildes[0] = SAFE_CREAT(pfilname, 0666);
for (i = 1; i < maxfd; i++) {
- if ((pfildes[i] = dup(pfildes[i - 1])) == -1)
+ pfildes[i] = dup(pfildes[i - 1]);
+ if (pfildes[i] == -1)
break;
}
- if (i < freefds) {
+
+ if (i < freefds)
tst_res(TFAIL, "Not enough files duped");
- } else if (i > freefds) {
+ else if (i > freefds)
tst_res(TFAIL, "Too many files duped");
- } else {
- tst_res(TPASS, "Test passed.");
- }
+ else
+ tst_res(TPASS, "Test passed");
SAFE_UNLINK(pfilname);
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [LTP] [PATCH] dup06: Convert to new API
2024-01-10 18:29 ` [LTP] [PATCH] dup06: " Petr Vorel
@ 2024-01-11 2:10 ` Shiyang Ruan
2024-01-11 2:19 ` [LTP] [PATCH v2 1/2] " Shiyang Ruan
1 sibling, 0 replies; 6+ messages in thread
From: Shiyang Ruan @ 2024-01-11 2:10 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
在 2024/1/11 2:29, Petr Vorel 写道:
> Hi Shiyang,
>
>> Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com>
>> ---
>> testcases/kernel/syscalls/dup/dup06.c | 141 ++++++++++----------------
>> 1 file changed, 52 insertions(+), 89 deletions(-)
>
>> diff --git a/testcases/kernel/syscalls/dup/dup06.c b/testcases/kernel/syscalls/dup/dup06.c
>> index e3f8070bf..84fc260a1 100644
>> --- a/testcases/kernel/syscalls/dup/dup06.c
>> +++ b/testcases/kernel/syscalls/dup/dup06.c
>> @@ -1,42 +1,22 @@
>> +// SPDX-License-Identifier: GPL-2.0-or-later
>> /*
>> - * Copyright (c) International Business Machines Corp., 2002
>> - * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
>> - * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
> ...
>> + * Copyright (c) International Business Machines Corp., 2002
>> + * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
>> + * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
> Could you please also add your or LTP copyright for this rewrite?
> E.g.
> * Copyright (c) Linux Test Project, 2003-2015
> + your copyright, or just:
> * Copyright (c) Linux Test Project, 2003-2024
>
> $ make check-dup06
> CHECK testcases/kernel/syscalls/dup/dup06.c
> dup06.c:28: ERROR: return is not a function, parentheses are not required
> dup06.c:53: ERROR: do not use assignment in if condition
> dup06.c:56: WARNING: braces {} are not necessary for any arm of this statement
>
> Therefore I'm going to merge with following change (+ please let me know if you
> want to add your copyright).
>
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
Thanks, adding LTP copyright is fine.
Let me send a new version of these two patches because the next one has
the same issue. I've fixed it.
--
Ruan.
>
> Kind regards,
> Petr
>
> diff --git testcases/kernel/syscalls/dup/dup06.c testcases/kernel/syscalls/dup/dup06.c
> index 84fc260a1..e7e27b8f9 100644
> --- testcases/kernel/syscalls/dup/dup06.c
> +++ testcases/kernel/syscalls/dup/dup06.c
> @@ -1,8 +1,9 @@
> // SPDX-License-Identifier: GPL-2.0-or-later
> /*
> * Copyright (c) International Business Machines Corp., 2002
> - * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
> + * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
> * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
> + * Copyright (c) Linux Test Project, 2003-2024
> */
>
> /*\
> @@ -17,6 +18,7 @@
> static int *pfildes;
> static int minfd, maxfd, freefds;
> static char pfilname[40];
> +
> static int cnt_free_fds(int maxfd)
> {
> int freefds = 0;
> @@ -25,7 +27,7 @@ static int cnt_free_fds(int maxfd)
> if (fcntl(maxfd, F_GETFD) == -1 && errno == EBADF)
> freefds++;
>
> - return (freefds);
> + return freefds;
> }
>
> static void setup(void)
> @@ -50,16 +52,17 @@ static void run(void)
>
> pfildes[0] = SAFE_CREAT(pfilname, 0666);
> for (i = 1; i < maxfd; i++) {
> - if ((pfildes[i] = dup(pfildes[i - 1])) == -1)
> + pfildes[i] = dup(pfildes[i - 1]);
> + if (pfildes[i] == -1)
> break;
> }
> - if (i < freefds) {
> +
> + if (i < freefds)
> tst_res(TFAIL, "Not enough files duped");
> - } else if (i > freefds) {
> + else if (i > freefds)
> tst_res(TFAIL, "Too many files duped");
> - } else {
> - tst_res(TPASS, "Test passed.");
> - }
> + else
> + tst_res(TPASS, "Test passed");
>
> SAFE_UNLINK(pfilname);
>
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 6+ messages in thread
* [LTP] [PATCH v2 1/2] dup06: Convert to new API
2024-01-10 18:29 ` [LTP] [PATCH] dup06: " Petr Vorel
2024-01-11 2:10 ` Shiyang Ruan
@ 2024-01-11 2:19 ` Shiyang Ruan
2024-01-11 2:19 ` [LTP] [PATCH v2 2/2] dup07: " Shiyang Ruan
1 sibling, 1 reply; 6+ messages in thread
From: Shiyang Ruan @ 2024-01-11 2:19 UTC (permalink / raw)
To: ltp
Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com>
---
testcases/kernel/syscalls/dup/dup06.c | 145 ++++++++++----------------
1 file changed, 55 insertions(+), 90 deletions(-)
diff --git a/testcases/kernel/syscalls/dup/dup06.c b/testcases/kernel/syscalls/dup/dup06.c
index e3f8070bf..e7dfbbac8 100644
--- a/testcases/kernel/syscalls/dup/dup06.c
+++ b/testcases/kernel/syscalls/dup/dup06.c
@@ -1,41 +1,23 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * Copyright (c) International Business Machines Corp., 2002
- * ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
- * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
- *
- * 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., 2002
+ * Ported from SPIE, section2/iosuite/dup1.c, by Airong Zhang
+ * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
+ * Copyright (c) Linux Test Project, 2003-2024
*/
-/*
- WHAT: Does dup return -1 on the 21st file?
- HOW: Create up to _NFILE (20) files and check for -1 return on the
- next attempt
- Should check NOFILE as well as _NFILE. 19-Jun-84 Dale.
-*/
+/*\
+ * [Description]
+ *
+ * Test for dup(2) syscall with max open file descriptors.
+ */
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/param.h>
-#include "test.h"
+#include <stdlib.h>
+#include "tst_test.h"
-char *TCID = "dup06";
-int TST_TOTAL = 1;
+static int *pfildes;
+static int minfd, maxfd, freefds;
+static char pfilname[40];
static int cnt_free_fds(int maxfd)
{
@@ -45,70 +27,53 @@ static int cnt_free_fds(int maxfd)
if (fcntl(maxfd, F_GETFD) == -1 && errno == EBADF)
freefds++;
- return (freefds);
+ return freefds;
}
-static void setup(void);
-static void cleanup(void);
-
-int main(int ac, char **av)
+static void setup(void)
{
- int *fildes, i;
- int min;
- int freefds;
- int lc;
- const char *pfilname = "dup06";
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- min = getdtablesize();
- freefds = cnt_free_fds(min);
- fildes = malloc((min + 5) * sizeof(int));
-
- for (i = 0; i < min + 5; i++)
- fildes[i] = 0;
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- unlink(pfilname);
-
- if ((fildes[0] = creat(pfilname, 0666)) == -1) {
- tst_resm(TFAIL, "Cannot open first file");
- } else {
- for (i = 1; i < min + 5; i++) {
- if ((fildes[i] = dup(fildes[i - 1])) == -1)
- break;
- }
- if (i < freefds) {
- tst_resm(TFAIL, "Not enough files duped");
- } else if (i > freefds) {
- tst_resm(TFAIL, "Too many files duped");
- } else {
- tst_resm(TPASS, "Test passed.");
- }
- }
-
- unlink(pfilname);
-
- for (i = 0; i < min + 5; i++) {
- if (fildes[i] != 0 && fildes[i] != -1)
- close(fildes[i]);
-
- fildes[i] = 0;
- }
- }
-
- cleanup();
- tst_exit();
+ minfd = getdtablesize(); /* get number of files allowed open */
+ maxfd = minfd + 5;
+ freefds = cnt_free_fds(minfd);
+ pfildes = SAFE_MALLOC(maxfd * sizeof(int));
+ memset(pfildes, -1, maxfd * sizeof(int));
+ sprintf(pfilname, "./dup06.%d\n", getpid());
}
-static void setup(void)
+static void cleanup(void)
{
- tst_tmpdir();
+ if (pfildes != NULL)
+ free(pfildes);
}
-static void cleanup(void)
+static void run(void)
{
- tst_rmdir();
+ int i;
+
+ pfildes[0] = SAFE_CREAT(pfilname, 0666);
+ for (i = 1; i < maxfd; i++) {
+ pfildes[i] = dup(pfildes[i - 1]);
+ if (pfildes[i] == -1)
+ break;
+ }
+ if (i < freefds)
+ tst_res(TFAIL, "Not enough files duped");
+ else if (i > freefds)
+ tst_res(TFAIL, "Too many files duped");
+ else
+ tst_res(TPASS, "Test passed.");
+
+ SAFE_UNLINK(pfilname);
+
+ for (i = 0; i < maxfd; i++) {
+ if (pfildes[i] != 0 && pfildes[i] != -1)
+ SAFE_CLOSE(pfildes[i]);
+ }
}
+
+static struct tst_test test = {
+ .needs_tmpdir = 1,
+ .test_all = run,
+ .setup = setup,
+ .cleanup = cleanup,
+};
--
2.34.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [LTP] [PATCH v2 2/2] dup07: Convert to new API
2024-01-11 2:19 ` [LTP] [PATCH v2 1/2] " Shiyang Ruan
@ 2024-01-11 2:19 ` Shiyang Ruan
0 siblings, 0 replies; 6+ messages in thread
From: Shiyang Ruan @ 2024-01-11 2:19 UTC (permalink / raw)
To: ltp
Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com>
---
testcases/kernel/syscalls/dup/dup07.c | 173 +++++++-------------------
1 file changed, 44 insertions(+), 129 deletions(-)
diff --git a/testcases/kernel/syscalls/dup/dup07.c b/testcases/kernel/syscalls/dup/dup07.c
index a100f5d58..fd7792133 100644
--- a/testcases/kernel/syscalls/dup/dup07.c
+++ b/testcases/kernel/syscalls/dup/dup07.c
@@ -1,142 +1,57 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- *
- * Copyright (c) International Business Machines Corp., 2002
- * ported from SPIE, section2/iosuite/dup3.c, by Airong Zhang
- * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
- *
- * 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., 2002
+ * Ported from SPIE, section2/iosuite/dup3.c, by Airong Zhang
+ * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
+ * Copyright (c) Linux Test Project, 2003-2024
*/
-/*
- WHAT: Is the access mode the same for both file descriptors?
- 0: read only?
- 1: write only?
- 2: read/write?
- HOW: Creat a file with each access mode; dup each file descriptor;
- stat each file descriptor and compare mode of each pair
-*/
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "test.h"
+/*\
+ * [Description]
+ *
+ * Verify that the file descriptor created by dup(2) syscall has the same
+ * access mode as the old one.
+ */
-char *TCID = "dup07";
-int TST_TOTAL = 3;
+#include "tst_test.h"
static const char *testfile = "dup07";
-static void setup(void);
-static void cleanup(void);
+static struct tcase {
+ char *mode_desc;
+ int mode;
+} tcases[] = {
+ {"read only", 0444},
+ {"write only", 0222},
+ {"read/write", 0666},
+};
-int main(int ac, char **av)
+static void run(unsigned int n)
{
- struct stat retbuf;
- struct stat dupbuf;
- int rdoret, wroret, rdwret;
- int duprdo, dupwro, duprdwr;
-
- int lc;
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- if ((rdoret = creat(testfile, 0444)) == -1) {
- tst_resm(TFAIL, "Unable to creat file '%s'", testfile);
- } else {
- if ((duprdo = dup(rdoret)) == -1) {
- tst_resm(TFAIL, "Unable to dup '%s'", testfile);
- } else {
- fstat(rdoret, &retbuf);
- fstat(duprdo, &dupbuf);
- if (retbuf.st_mode != dupbuf.st_mode) {
- tst_resm(TFAIL,
- "rdonly and dup do not match");
- } else {
- tst_resm(TPASS,
- "Passed in read mode.");
- }
- close(duprdo);
- }
- close(rdoret);
- }
-
- unlink(testfile);
-
- if ((wroret = creat(testfile, 0222)) == -1) {
- tst_resm(TFAIL, "Unable to creat file '%s'", testfile);
- } else {
- if ((dupwro = dup(wroret)) == -1) {
- tst_resm(TFAIL, "Unable to dup '%s'", testfile);
- } else {
- fstat(wroret, &retbuf);
- fstat(dupwro, &dupbuf);
- if (retbuf.st_mode != dupbuf.st_mode) {
- tst_resm(TFAIL,
- "wronly and dup do not match");
- } else {
- tst_resm(TPASS,
- "Passed in write mode.");
- }
- close(dupwro);
- }
- close(wroret);
-
- }
-
- unlink(testfile);
-
- if ((rdwret = creat(testfile, 0666)) == -1) {
- tst_resm(TFAIL, "Unable to creat file '%s'", testfile);
- } else {
- if ((duprdwr = dup(rdwret)) == -1) {
- tst_resm(TFAIL, "Unable to dup '%s'", testfile);
- } else {
- fstat(rdwret, &retbuf);
- fstat(duprdwr, &dupbuf);
- if (retbuf.st_mode != dupbuf.st_mode) {
- tst_resm(TFAIL,
- "rdwr and dup do not match");
- } else {
- tst_resm(TPASS,
- "Passed in read/write mode.");
- }
- close(duprdwr);
- }
- close(rdwret);
- }
-
- unlink(testfile);
+ int oldfd, dupfd;
+ struct stat oldbuf, dupbuf;
+ struct tcase *tc = &tcases[n];
+
+ oldfd = SAFE_CREAT(testfile, tc->mode);
+ dupfd = TST_EXP_FD_SILENT(dup(oldfd), "dup() %s file", tc->mode_desc);
+ if (TST_PASS) {
+ SAFE_FSTAT(oldfd, &oldbuf);
+ SAFE_FSTAT(dupfd, &dupbuf);
+
+ if (oldbuf.st_mode != dupbuf.st_mode)
+ tst_res(TFAIL, "%s and dup do not match", tc->mode_desc);
+ else
+ tst_res(TPASS, "Passed in %s mode.", tc->mode_desc);
+
+ SAFE_CLOSE(dupfd);
}
+ SAFE_CLOSE(oldfd);
- cleanup();
- tst_exit();
+ SAFE_UNLINK(testfile);
}
-static void setup(void)
-{
- tst_tmpdir();
-}
-
-static void cleanup(void)
-{
- tst_rmdir();
-}
+static struct tst_test test = {
+ .needs_tmpdir = 1,
+ .test = run,
+ .tcnt = ARRAY_SIZE(tcases),
+};
--
2.34.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-01-11 2:20 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-09 9:50 [LTP] [PATCH] dup06: Convert to new API Shiyang Ruan
2024-01-09 10:27 ` [LTP] [PATCH] dup07: " Shiyang Ruan
2024-01-10 18:29 ` [LTP] [PATCH] dup06: " Petr Vorel
2024-01-11 2:10 ` Shiyang Ruan
2024-01-11 2:19 ` [LTP] [PATCH v2 1/2] " Shiyang Ruan
2024-01-11 2:19 ` [LTP] [PATCH v2 2/2] dup07: " Shiyang Ruan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.