public inbox for fstests@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] generic/486: print correct errno
@ 2018-05-16  8:00 Xiao Yang
  2018-05-16 15:27 ` Darrick J. Wong
  0 siblings, 1 reply; 7+ messages in thread
From: Xiao Yang @ 2018-05-16  8:00 UTC (permalink / raw)
  To: fstests; +Cc: libc-alpha-help, Xiao Yang

On glibc v2.12 or v2.17, running generic/486 with XFS got wrong
EINVAL instead of ENODATA:
----------------------------------------------------------------
QA output created by 486
No data available
error=22 at line 63
----------------------------------------------------------------

We want to save the correct errno and print it after calling perror().

It seems that only calling perror() didn't change the errno, but calling
perror() and redirecting the output of perror() to a file set errno to
EINVAL.

For example, running the special test.c to reproduce the issue:
------------------------------------------------------------
#include <errno.h>
#include <unistd.h>
#include <stdio.h>

int main(void)
{
        close(-1);
        printf("errno %d before\n", errno);
        perror("");
        printf("errno %d after\n", errno);
}
------------------------------------------------------------
# gcc -o test test.c
# ./test
# ./test 2>log

fdopen() called by perror() in glibc seems to set errno to EINVAL
in some cases(e.g. the access mode of stderr is O_WRONLY). I am not
sure whether this is a perror bug in glibc or not.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 src/attr_replace_test.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/attr_replace_test.c b/src/attr_replace_test.c
index 23adc07..e9a08cc 100644
--- a/src/attr_replace_test.c
+++ b/src/attr_replace_test.c
@@ -10,8 +10,9 @@
 #include <sys/xattr.h>
 #include <sys/stat.h>
 
-#define die() do { perror(""); \
-fprintf(stderr, "error=%d at line %d\n", errno, __LINE__); \
+#define die() do { int real_errno = errno; \
+perror(""); \
+fprintf(stderr, "error=%d at line %d\n", real_errno, __LINE__); \
 exit(1); } while (0)
 
 #define fail(...) do { \
-- 
1.8.3.1




^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-05-17 14:55 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-05-16  8:00 [PATCH] generic/486: print correct errno Xiao Yang
2018-05-16 15:27 ` Darrick J. Wong
2018-05-17  1:36   ` [PATCH] generic/486: Get rid of the redundant error=%d printing Xiao Yang
2018-05-17  3:16     ` Eryu Guan
2018-05-17  3:25       ` Xiao Yang
2018-05-17  3:32       ` [PATCH v3] " Xiao Yang
2018-05-17 14:55         ` Darrick J. Wong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox