Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/tests/lib/libcurses Reapply fix for big-endian environments,...



details:   https://anonhg.NetBSD.org/src/rev/96ec3fd7fee7
branches:  trunk
changeset: 960963:96ec3fd7fee7
user:      rin <rin%NetBSD.org@localhost>
date:      Sun Apr 04 09:49:13 2021 +0000

description:
Reapply fix for big-endian environments, which was lost when GSoC results
were merged...

http://www.nerv.org/netbsd/?q=id:20200620T075016Z.3584036ccf31f69ee76ea4a02e9be30ff081df21

> Fix false positive for mvscanw tests on big endian machines.
>
> When conversion specifier is not a derivative form of "%s", retrieve
> input as 32bit integer, and then convert to string literal. Then we
> can avoid interpretation from ASCII code to integer, which is
> apparently byte-order depended.

diffstat:

 tests/lib/libcurses/slave/curses_commands.c |  15 ++++++++++++---
 tests/lib/libcurses/tests/mvscanw           |   6 ++++--
 2 files changed, 16 insertions(+), 5 deletions(-)

diffs (50 lines):

diff -r 7307734e0d56 -r 96ec3fd7fee7 tests/lib/libcurses/slave/curses_commands.c
--- a/tests/lib/libcurses/slave/curses_commands.c       Sun Apr 04 09:42:08 2021 +0000
+++ b/tests/lib/libcurses/slave/curses_commands.c       Sun Apr 04 09:49:13 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: curses_commands.c,v 1.24 2021/04/04 09:42:08 rin Exp $ */
+/*     $NetBSD: curses_commands.c,v 1.25 2021/04/04 09:49:13 rin Exp $ */
 
 /*-
  * Copyright 2009 Brett Lymn <blymn%NetBSD.org@localhost>
@@ -1986,10 +1986,19 @@
        ARGC(3);
        ARG_INT(0, y);
        ARG_INT(1, x);
-       ARG_STRING(2, fmt);     /* Must have a single "%s" in this test. */
+       ARG_STRING(2, fmt);
 
        report_count(2);
-       report_return(ret = mvscanw(y, x, fmt, string));
+       if (strchr(fmt, 's') != NULL) {
+               report_return(ret = mvscanw(y, x, fmt, string));
+       } else {
+               int val; /* XXX assume 32-bit integer */
+               report_return(ret = mvscanw(y, x, fmt, &val));
+               if (ret == ERR)
+                       goto out;
+               snprintf(string, sizeof(string), fmt, val);
+       }
+out:
        /*
         * When mvscanw(3) fails, string is not modified.
         * Let's ignore the 2nd result for this case.
diff -r 7307734e0d56 -r 96ec3fd7fee7 tests/lib/libcurses/tests/mvscanw
--- a/tests/lib/libcurses/tests/mvscanw Sun Apr 04 09:42:08 2021 +0000
+++ b/tests/lib/libcurses/tests/mvscanw Sun Apr 04 09:49:13 2021 +0000
@@ -1,11 +1,13 @@
+# XXX
+# For this test, only one string or 32-bit integer are supported as
+# conversion specifiers at the moment.
 include start
 input "testing 1 2 3\n"
 call2 OK "testing" mvscanw 3 5 "%s"
 input "testing 1 2 3\n"
 call2 OK "test" mvscanw 3 5 "%4s"
-# 50 will translate into number 2 in ascii
 input "50 12\n"
-call2 OK "2" mvscanw 3 5 "%d"
+call2 OK "50" mvscanw 3 5 "%d"
 input "aa bb 50 12\n"
 # expect ERR because input has alpha and scanw wants integer
 call2 ERR "ERR" mvscanw 3 5 "%d"



Home | Main Index | Thread Index | Old Index