[LTP] [PATCH 5/6] fs: rewrite stream04 test using new API
Andrea Cervesato
andrea.cervesato@suse.de
Fri Jan 23 17:18:55 CET 2026
From: Andrea Cervesato <andrea.cervesato@suse.com>
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
testcases/kernel/fs/stream/stream04.c | 147 +++++++++-------------------------
1 file changed, 40 insertions(+), 107 deletions(-)
diff --git a/testcases/kernel/fs/stream/stream04.c b/testcases/kernel/fs/stream/stream04.c
index 3dc679151a6a81aab8c713605c258fae2c2b3adf..560792f062f3bbb0fcb9164ffd9095803fe6c4fe 100644
--- a/testcases/kernel/fs/stream/stream04.c
+++ b/testcases/kernel/fs/stream/stream04.c
@@ -1,124 +1,57 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
+ * Copyright (c) International Business Machines Corp., 2002
+ * ported from SPIE, section2/filesuite/stream4.c, by Airong Zhang
*
- * 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
+ * Copyright (c) 2026 Andrea Cervesato <andrea.cervesato@suse.com>
*/
-/* Ported from SPIE, section2/iosuite/stream4.c, by Airong Zhang */
-
-/*======================================================================
- =================== TESTPLAN SEGMENT ===================
->KEYS: < fwrite() fread()
->WHAT: < 1) Ensure fwrite appends data to stream.
- < 2) Ensure fread and fwrite return values are valid.
->HOW: < 1) Open a file, write to it, and then check it.
- < 2) Fwrite a know quanity, check return value.
- < Fread a know quanity, check return value.
->BUGS: <
-======================================================================*/
-
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "test.h"
-
-char *TCID = "stream04";
-int TST_TOTAL = 1;
-int local_flag;
+/*\
+ * Ensure that `fwrite()` is appending data to stream and `fread()`
+ * `fwrite()` are returning the right data.
+ */
-#define PASSED 1
-#define FAILED 0
+#include "tst_test.h"
+#include "tst_safe_stdio.h"
-char progname[] = "stream04()";
-char tempfile1[40] = "";
-long ftell();
+#define FILENAME "ltp_file"
+#define DATA "abcdefghijklmnopqrstuvwxyz"
+#define DATASIZE sizeof(DATA)
-/* XXX: add setup and cleanup */
+static char *data;
+static char *buff;
-/*--------------------------------------------------------------------*/
-int main(int ac, char *av[])
+static void run(void)
{
FILE *stream;
- char *junk = "abcdefghijklmnopqrstuvwxyz";
- char *inbuf;
- int ret;
- int lc;
+ memset(buff, 0, DATASIZE);
- /*
- * parse standard options
- */
- tst_parse_opts(ac, av, NULL, NULL);
- tst_tmpdir();
- for (lc = 0; TEST_LOOPING(lc); lc++) {
+ stream = SAFE_FOPEN(FILENAME, "a+");
+ TST_EXP_EQ_LI(fwrite(data, 1, DATASIZE, stream), DATASIZE);
+ SAFE_FCLOSE(stream);
- local_flag = PASSED;
+ stream = SAFE_FOPEN(FILENAME, "r+");
+ TST_EXP_EQ_LI(fread(buff, 1, DATASIZE, stream), DATASIZE);
+ SAFE_FCLOSE(stream);
- sprintf(tempfile1, "stream04.%d", getpid());
- /*--------------------------------------------------------------------*/
- //block0:
- if ((stream = fopen(tempfile1, "a+")) == NULL) {
- tst_brkm(TFAIL | TERRNO, tst_rmdir, "fopen(%s) a+ failed",
- tempfile1);
- }
- /* write something and check */
- if ((ret =
- fwrite(junk, sizeof(*junk), strlen(junk), stream)) == 0) {
- tst_brkm(TFAIL, tst_rmdir, "fwrite failed: %s",
- strerror(errno));
- }
+ SAFE_UNLINK(FILENAME);
- if ((size_t) ret != strlen(junk)) {
- tst_resm(TFAIL,
- "strlen(junk) = %zi != return value from fwrite = %zi",
- strlen(junk), ret);
- local_flag = FAILED;
- }
+ TST_EXP_EQ_STRN(data, buff, DATASIZE);
+}
- fclose(stream);
- if ((stream = fopen(tempfile1, "r+")) == NULL) {
- tst_brkm(TFAIL, tst_rmdir, "fopen(%s) r+ failed: %s", tempfile1,
- strerror(errno));
- }
- if ((inbuf = malloc(strlen(junk))) == 0) {
- tst_brkm(TBROK, tst_rmdir, "test failed because of malloc: %s",
- strerror(errno));
- }
- if ((ret =
- fread(inbuf, sizeof(*junk), strlen(junk), stream)) == 0) {
- tst_brkm(TFAIL, tst_rmdir, "fread failed: %s",
- strerror(errno));
- }
- if ((size_t) ret != strlen(junk)) {
- tst_resm(TFAIL,
- "strlen(junk) = %zi != return value from fread = %zi",
- strlen(junk), ret);
- local_flag = FAILED;
- }
- fclose(stream);
- if (local_flag == PASSED) {
- tst_resm(TPASS, "Test passed.");
- } else {
- tst_resm(TFAIL, "Test failed.");
- }
- /*--------------------------------------------------------------------*/
- unlink(tempfile1);
- } /* end for */
- tst_rmdir();
- tst_exit();
+static void setup(void)
+{
+ memcpy(data, DATA, DATASIZE);
}
+
+static struct tst_test test = {
+ .test_all = run,
+ .setup = setup,
+ .needs_tmpdir = 1,
+ .bufs = (struct tst_buffers []) {
+ {&data, .size = DATASIZE},
+ {&buff, .size = DATASIZE},
+ {},
+ },
+};
--
2.51.0
More information about the ltp
mailing list