diff options
Diffstat (limited to 'patches/strace/4.10/004_stat64-v.test.patch')
-rw-r--r-- | patches/strace/4.10/004_stat64-v.test.patch | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/patches/strace/4.10/004_stat64-v.test.patch b/patches/strace/4.10/004_stat64-v.test.patch new file mode 100644 index 00000000..53383e34 --- /dev/null +++ b/patches/strace/4.10/004_stat64-v.test.patch @@ -0,0 +1,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; |