summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2021-08-30 01:44:03 +0200
committerBruno Haible <bruno@clisp.org>2021-08-30 01:44:03 +0200
commit1968e3a57ac44a8e782de06454a6b7df4e4a4c33 (patch)
treec31ecb30821d79106438e660d6168cca66d49af2
parent6aafd2a92b4bb48937f3e767e51a4b7abf2f2217 (diff)
downloadgnulib-1968e3a57ac44a8e782de06454a6b7df4e4a4c33.tar.gz
getcwd tests: Avoid test failure when running under QEMU user-mode.
* modules/getcwd-tests (Files): Add qemu.h. (Depends-on): Add stdbool. * tests/test-getcwd.c: Include qemu.h. (test_long_name): Skip this test when running under QEMU user-mode. (main): Consider return code 77 from test_long_name.
-rw-r--r--ChangeLog9
-rw-r--r--modules/getcwd-tests4
-rw-r--r--tests/test-getcwd.c12
3 files changed, 23 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index ee933c9efa..88a396e09e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2021-08-29 Bruno Haible <bruno@clisp.org>
+
+ getcwd tests: Avoid test failure when running under QEMU user-mode.
+ * modules/getcwd-tests (Files): Add qemu.h.
+ (Depends-on): Add stdbool.
+ * tests/test-getcwd.c: Include qemu.h.
+ (test_long_name): Skip this test when running under QEMU user-mode.
+ (main): Consider return code 77 from test_long_name.
+
2021-08-29 Paul Eggert <eggert@cs.ucla.edu>
base32, base64: treat negative sizes as overflows
diff --git a/modules/getcwd-tests b/modules/getcwd-tests
index e5a7bd78b1..c842c77115 100644
--- a/modules/getcwd-tests
+++ b/modules/getcwd-tests
@@ -1,12 +1,14 @@
Files:
-tests/test-getcwd.c
tests/test-getcwd.sh
+tests/test-getcwd.c
+tests/qemu.h
Depends-on:
errno
fcntl-h
getcwd-lgpl
pathmax
+stdbool
sys_stat
test-framework-sh
diff --git a/tests/test-getcwd.c b/tests/test-getcwd.c
index 061c69eb12..051d4f26a0 100644
--- a/tests/test-getcwd.c
+++ b/tests/test-getcwd.c
@@ -27,6 +27,7 @@
#include <sys/stat.h>
#include "pathmax.h"
+#include "qemu.h"
#include "macros.h"
#if !(HAVE_GETPAGESIZE || defined getpagesize)
@@ -138,6 +139,13 @@ test_long_name (void)
this should be done in a compile test. */
return 0;
#else
+ /* For a process running under QEMU user-mode, the "/" directory is not
+ really the root directory, but the value of the QEMU_LD_PREFIX environment
+ variable or of the -L command-line option. This causes the logic from
+ glibc/sysdeps/posix/getcwd.c to fail. In this case, skip the test. */
+ if (is_running_under_qemu_user ())
+ return 77;
+
char buf[PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1)
+ DIR_NAME_SIZE + BUF_SLOP];
char *cwd = getcwd (buf, PATH_MAX);
@@ -256,5 +264,7 @@ test_long_name (void)
int
main (int argc, char **argv)
{
- return test_abort_bug () * 10 + test_long_name ();
+ int err1 = test_abort_bug ();
+ int err2 = test_long_name ();
+ return err1 * 10 + (err1 != 0 && err2 == 77 ? 0 : err2);
}