summaryrefslogtreecommitdiff
path: root/patches/strace/4.10/004_stat64-v.test.patch
blob: 53383e3438aa76ec2f968a63fe22646afacc63d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
commit f79252f072a193bdff435afeaa6b6cd6d5c79947
Author: Dmitry V. Levin <ldv@altlinux.org>
Date:   Mon Mar 16 17:18:40 2015 +0000

    stat64-v.test: add newfstatat syscall support
    
    Newer architectures have no stat syscall, so stat() is implemented there
    using newfstatat syscall.
    
    * tests/stat.c (STAT_FNAME): Rename to STAT_PREFIX.  Update callers.
    [_FILE_OFFSET_BITS == 64] (STAT_PREFIX): Add newfstatat support.
    (main) [!NR_stat]: Add newfstatat support.
    
    Reported-by: Andreas Schwab <schwab@suse.de>

diff --git a/tests/stat.c b/tests/stat.c
index 21e37fb..2b04010 100644
--- a/tests/stat.c
+++ b/tests/stat.c
@@ -14,22 +14,22 @@
 # include <sys/types.h>
 #endif
 
-#undef STAT_FNAME
+#undef STAT_PREFIX
 #undef NR_stat
 
 #if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
 # include <sys/stat.h>
-# define STAT_FNAME "stat(64)?"
+# define STAT_PREFIX "(stat(64)?\\(|newfstatat\\(AT_FDCWD, )"
 #else
 # include <sys/syscall.h>
 # if defined __NR_stat
 #  define NR_stat __NR_stat
-#  define STAT_FNAME "stat"
+#  define STAT_PREFIX "stat\\("
 # elif defined __NR_newstat
 #  define NR_stat __NR_newstat
-#  define STAT_FNAME "newstat"
+#  define STAT_PREFIX "newstat\\("
 # endif
-# ifdef STAT_FNAME
+# ifdef STAT_PREFIX
 /* for S_IFMT */
 #  define stat libc_stat
 #  define stat64 libc_stat64
@@ -57,10 +57,10 @@
 #  define off_t __kernel_off_t
 #  define loff_t __kernel_loff_t
 #  include <asm/stat.h>
-#  endif /* STAT_FNAME */
+#  endif /* STAT_PREFIX */
 #endif /* _FILE_OFFSET_BITS */
 
-#ifdef STAT_FNAME
+#ifdef STAT_PREFIX
 
 static void
 print_ftype(unsigned int mode)
@@ -115,7 +115,7 @@ main(int ac, const char **av)
 	assert(stat(av[1], &stb) == 0);
 #endif
 
-	printf(STAT_FNAME "\\(\"%s\", \\{", av[1]);
+	printf(STAT_PREFIX "\"%s\", \\{", av[1]);
 	printf("st_dev=makedev\\(%u, %u\\)",
 	       (unsigned int) major(stb.st_dev),
 	       (unsigned int) minor(stb.st_dev));
@@ -159,11 +159,15 @@ main(int ac, const char **av)
 	printf("(, st_flags=[0-9]+)?");
 	printf("(, st_fstype=[^,]*)?");
 	printf("(, st_gen=[0-9]+)?");
-	printf("\\}\\) += 0\n");
+	printf("\\}");
+#ifndef NR_stat
+	printf("(, 0)?");
+#endif
+	printf("\\) += 0\n");
 	return 0;
 }
 
-#else /* !STAT_FNAME */
+#else /* !STAT_PREFIX */
 int main(void)
 {
 	return 77;