]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
s390/sclp_vt220: Convert newlines to CRLF instead of LFCR
authorThomas Weißschuh <thomas.weissschuh@linutronix.de>
Mon, 14 Oct 2024 05:50:07 +0000 (07:50 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Oct 2024 13:39:25 +0000 (15:39 +0200)
commit dee3df68ab4b00fff6bdf9fc39541729af37307c upstream.

According to the VT220 specification the possible character combinations
sent on RETURN are only CR or CRLF [0].

The Return key sends either a CR character (0/13) or a CR
character (0/13) and an LF character (0/10), depending on the
set/reset state of line feed/new line mode (LNM).

The sclp/vt220 driver however uses LFCR. This can confuse tools, for
example the kunit runner.

Link: https://vt100.net/docs/vt220-rm/chapter3.html#S3.2
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: stable@vger.kernel.org
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
Link: https://lore.kernel.org/r/20241014-s390-kunit-v1-2-941defa765a6@linutronix.de
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/s390/char/sclp_vt220.c

index 3c2ed6d013873aa9a257c229d030c404177ba40a..d574c167c9dc815f76e870a0ecf5817e3d62dd18 100644 (file)
@@ -325,7 +325,7 @@ sclp_vt220_add_msg(struct sclp_vt220_request *request,
        buffer = (void *) ((addr_t) sccb + sccb->header.length);
 
        if (convertlf) {
-               /* Perform Linefeed conversion (0x0a -> 0x0a 0x0d)*/
+               /* Perform Linefeed conversion (0x0a -> 0x0d 0x0a)*/
                for (from=0, to=0;
                     (from < count) && (to < sclp_vt220_space_left(request));
                     from++) {
@@ -334,8 +334,8 @@ sclp_vt220_add_msg(struct sclp_vt220_request *request,
                        /* Perform conversion */
                        if (c == 0x0a) {
                                if (to + 1 < sclp_vt220_space_left(request)) {
-                                       ((unsigned char *) buffer)[to++] = c;
                                        ((unsigned char *) buffer)[to++] = 0x0d;
+                                       ((unsigned char *) buffer)[to++] = c;
                                } else
                                        break;