[LTP] [PATCH 1/2] lib: Add SAFE_SPLICE() macro

Andrea Cervesato andrea.cervesato@suse.de
Thu Apr 30 19:25:29 CEST 2026


From: Andrea Cervesato <andrea.cervesato@suse.com>

splice() is used as utility plumbing in several tests (tee01,
vmsplice01, af_alg08) but lacks a SAFE_* wrapper, forcing each
caller to manually check the return value. Add SAFE_SPLICE()
following the existing safe_pipe2() pattern.

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 include/tst_safe_macros.h |  8 ++++++++
 lib/tst_safe_macros.c     | 17 +++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h
index c73c1acb1cbd671d4d22b740647d3e7491f7baf2..53caf845d1172cccf23d631d97e1f5086f98f547 100644
--- a/include/tst_safe_macros.h
+++ b/include/tst_safe_macros.h
@@ -114,6 +114,14 @@ int safe_pipe2(const char *file, const int lineno, int fildes[2], int flags);
 #define SAFE_PIPE2(fildes, flags) \
 	safe_pipe2(__FILE__, __LINE__, (fildes), (flags))
 
+ssize_t safe_splice(const char *file, const int lineno,
+		    int fd_in, loff_t *off_in, int fd_out, loff_t *off_out,
+		    size_t len, unsigned int flags);
+
+#define SAFE_SPLICE(fd_in, off_in, fd_out, off_out, len, flags) \
+	safe_splice(__FILE__, __LINE__, (fd_in), (off_in), (fd_out), \
+		    (off_out), (len), (flags))
+
 #define SAFE_READ(len_strict, fildes, buf, nbyte) \
 	safe_read(__FILE__, __LINE__, NULL, (len_strict), (fildes), (buf), (nbyte))
 
diff --git a/lib/tst_safe_macros.c b/lib/tst_safe_macros.c
index cdc8c7dd33cb0f805d40095b732d723497b2adeb..8f3dbbd1d2f371f2986356187c41007993f1589e 100644
--- a/lib/tst_safe_macros.c
+++ b/lib/tst_safe_macros.c
@@ -21,6 +21,7 @@
 #include "tst_safe_macros.h"
 #include "lapi/personality.h"
 #include "lapi/pidfd.h"
+#include "lapi/splice.h"
 
 int safe_access(const char *file, const int lineno,
 	    const char *pathname, int mode)
@@ -512,6 +513,22 @@ int safe_pipe2(const char *file, const int lineno, int fildes[2], int flags)
 	return ret;
 }
 
+ssize_t safe_splice(const char *file, const int lineno,
+		    int fd_in, loff_t *off_in, int fd_out, loff_t *off_out,
+		    size_t len, unsigned int flags)
+{
+	ssize_t ret;
+
+	ret = splice(fd_in, off_in, fd_out, off_out, len, flags);
+
+	if (ret < 0) {
+		tst_brk_(file, lineno, TBROK | TERRNO,
+			"splice(%d, %d, %zu) failed", fd_in, fd_out, len);
+	}
+
+	return ret;
+}
+
 int safe_dup(const char *file, const int lineno, int oldfd)
 {
 	int rval;

-- 
2.51.0



More information about the ltp mailing list