[PATCH] tests/mknod.c: add workaround for ppc bug in travis

Ákos Uzonyi uzonyi.akos at gmail.com
Tue Aug 25 13:39:24 UTC 2020


On ppc travis builds syscall(mknod) sometimes does not fail with EEXISTS
as expected, but returns successfully. This commit uses sprintrc for
errno printing, which handles successful return values too.

* tests/mknod.c (call_mknod): set errno to 0 before syscall.
(main): Use sprintrc for printing errno.
---
 tests/mknod.c | 34 ++++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/tests/mknod.c b/tests/mknod.c
index 44c6f028..2570b523 100644
--- a/tests/mknod.c
+++ b/tests/mknod.c
@@ -10,6 +10,7 @@
 
 #ifdef __NR_mknod
 
+# include <errno.h>
 # include <stdio.h>
 # include <sys/stat.h>
 # include <sys/sysmacros.h>
@@ -20,6 +21,7 @@ static const char *sample;
 static long
 call_mknod(unsigned short mode, unsigned long dev)
 {
+	errno = 0;
 	unsigned long lmode = (unsigned long) 0xffffffffffff0000ULL | mode;
 	return syscall(__NR_mknod, sample, lmode, dev);
 }
@@ -31,44 +33,44 @@ main(int ac, char **av)
 	sample = av[0];
 
 	long rc = call_mknod(0, dev);
-	printf("mknod(\"%s\", 000) = %ld %s (%m)\n",
-	       sample, rc, errno2name());
+	printf("mknod(\"%s\", 000) = %s\n",
+	       sample, sprintrc(rc));
 
 	rc = call_mknod(0xffff, dev);
-	printf("mknod(\"%s\", %#03ho) = %ld %s (%m)\n",
-	       sample, (unsigned short) -1, rc, errno2name());
+	printf("mknod(\"%s\", %#03ho) = %s\n",
+	       sample, (unsigned short) -1, sprintrc(rc));
 
 	rc = call_mknod(S_IFREG, 0);
-	printf("mknod(\"%s\", S_IFREG|000) = %ld %s (%m)\n",
-	       sample, rc, errno2name());
+	printf("mknod(\"%s\", S_IFREG|000) = %s\n",
+	       sample, sprintrc(rc));
 
 	rc = call_mknod(S_IFDIR | 06, 0);
-	printf("mknod(\"%s\", S_IFDIR|006) = %ld %s (%m)\n",
-	       sample, rc, errno2name());
+	printf("mknod(\"%s\", S_IFDIR|006) = %s\n",
+	       sample, sprintrc(rc));
 
 	rc = call_mknod(S_IFLNK | 060, 0);
-	printf("mknod(\"%s\", S_IFLNK|060) = %ld %s (%m)\n",
-	       sample, rc, errno2name());
+	printf("mknod(\"%s\", S_IFLNK|060) = %s\n",
+	       sample, sprintrc(rc));
 
 	rc = call_mknod(S_IFIFO | 0600, 0);
-	printf("mknod(\"%s\", S_IFIFO|0600) = %ld %s (%m)\n",
-	       sample, rc, errno2name());
+	printf("mknod(\"%s\", S_IFIFO|0600) = %s\n",
+	       sample, sprintrc(rc));
 
 	dev = (unsigned long) 0xdeadbeef00000000ULL | makedev(1, 7);
 
 	rc = call_mknod(S_IFCHR | 024, dev);
-	printf("mknod(\"%s\", S_IFCHR|024, makedev(0x1, 0x7)) = %ld %s (%m)\n",
-	       sample, rc, errno2name());
+	printf("mknod(\"%s\", S_IFCHR|024, makedev(0x1, 0x7)) = %s\n",
+	       sample, sprintrc(rc));
 
 	const unsigned short mode = (0xffff & ~S_IFMT) | S_IFBLK;
 	dev = (unsigned long) 0xdeadbeefbadc0dedULL;
 
 	rc = call_mknod(mode, dev);
 	printf("mknod(\"%s\", S_IFBLK|S_ISUID|S_ISGID|S_ISVTX|%#03ho"
-	       ", makedev(%#x, %#x)) = %ld %s (%m)\n",
+	       ", makedev(%#x, %#x)) = %s\n",
 	       sample, (short) (mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX)),
 	       major((unsigned) dev), minor((unsigned) dev),
-	       rc, errno2name());
+	       sprintrc(rc));
 
 	puts("+++ exited with 0 +++");
 	return 0;
-- 
2.28.0



More information about the Strace-devel mailing list