From: Greg KH <gregkh@linuxfoundation.org>
To: Alejandro Colomar <alx@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Palmer Dabbelt <palmer@rivosinc.com>,
linux-api@vger.kernel.org, libc-alpha@sourceware.org,
linux-man@vger.kernel.org
Subject: Re: termios constants should be unsigned
Date: Wed, 12 Jun 2024 14:22:37 +0200 [thread overview]
Message-ID: <2024061222-scuttle-expanse-6438@gregkh> (raw)
In-Reply-To: <a7kfppfptkzvqys6cblwjudlpoghsycjglw57hxe2ywvruzkbd@e6nqpnxgwfnq>
On Wed, Jun 12, 2024 at 02:16:12PM +0200, Alejandro Colomar wrote:
> Hi!
>
> While compiling an example program in ioctl_tty(2) examples (now moving
> to TCSETS(2const)), I saw several warnings:
>
> tcgets.c:53:24: error: implicit conversion changes signedness: 'int' to 'tcflag_t' (aka 'unsigned int') [clang-diagnostic-sign-conversion,-warnings-as-errors]
> tio.c_cflag &= ~CBAUD;
> ~~ ^~~~~~
> tcgets.c:53:24: warning: use of a signed integer operand with a binary bitwise operator [hicpp-signed-bitwise]
> tio.c_cflag &= ~CBAUD;
> ~~ ^~~~~~
> tcgets.c:58:24: error: implicit conversion changes signedness: 'int' to 'tcflag_t' (aka 'unsigned int') [clang-diagnostic-sign-conversion,-warnings-as-errors]
> tio.c_cflag &= ~(CBAUD << IBSHIFT);
> ~~ ^~~~~~~~~~~~~~~~~~~
> tcgets.c:58:24: warning: use of a signed integer operand with a binary bitwise operator [hicpp-signed-bitwise]
> tio.c_cflag &= ~(CBAUD << IBSHIFT);
> ~~ ^~~~~~~~~~~~~~~~~~~
> tcgets.c:58:25: warning: use of a signed integer operand with a unary bitwise operator [hicpp-signed-bitwise]
> tio.c_cflag &= ~(CBAUD << IBSHIFT);
> ~^~~~~~~~~~~~~~~~~~
>
> Which seem reasonable warnings. Bitwise operations on signed integers
> is bad for ye health. Let's see the definitions of struct termios:
>
> alx@debian:/usr/include$ grepc termios x86_64-linux-gnu/ asm-generic/
> x86_64-linux-gnu/bits/termios-struct.h:struct termios
> {
> tcflag_t c_iflag; /* input mode flags */
> tcflag_t c_oflag; /* output mode flags */
> tcflag_t c_cflag; /* control mode flags */
> tcflag_t c_lflag; /* local mode flags */
> cc_t c_line; /* line discipline */
> cc_t c_cc[NCCS]; /* control characters */
> speed_t c_ispeed; /* input speed */
> speed_t c_ospeed; /* output speed */
> #define _HAVE_STRUCT_TERMIOS_C_ISPEED 1
> #define _HAVE_STRUCT_TERMIOS_C_OSPEED 1
> };
> asm-generic/termbits.h:struct termios {
> tcflag_t c_iflag; /* input mode flags */
> tcflag_t c_oflag; /* output mode flags */
> tcflag_t c_cflag; /* control mode flags */
> tcflag_t c_lflag; /* local mode flags */
> cc_t c_line; /* line discipline */
> cc_t c_cc[NCCS]; /* control characters */
> };
>
> Except for the speed members, they seem the same. The types of the
> members are correctly unsigned:
>
> alx@debian:/usr/include$ grepc tcflag_t x86_64-linux-gnu/ asm-generic/
> x86_64-linux-gnu/bits/termios.h:typedef unsigned int tcflag_t;
> asm-generic/termbits.h:typedef unsigned int tcflag_t;
>
> So, all of the constants that are to be used in these members, which
> will undergo bitwise operations, should use the U suffix. Here's the
> list for the UAPI:
>
> $ sed -n '/flag bits/,/^$/p' asm-generic/termbits.h
> /* c_iflag bits */
> #define IUCLC 0x0200
> #define IXON 0x0400
> #define IXOFF 0x1000
> #define IMAXBEL 0x2000
> #define IUTF8 0x4000
>
> /* c_oflag bits */
> #define OLCUC 0x00002
> #define ONLCR 0x00004
> #define NLDLY 0x00100
> #define NL0 0x00000
> #define NL1 0x00100
> #define CRDLY 0x00600
> #define CR0 0x00000
> #define CR1 0x00200
> #define CR2 0x00400
> #define CR3 0x00600
> #define TABDLY 0x01800
> #define TAB0 0x00000
> #define TAB1 0x00800
> #define TAB2 0x01000
> #define TAB3 0x01800
> #define XTABS 0x01800
> #define BSDLY 0x02000
> #define BS0 0x00000
> #define BS1 0x02000
> #define VTDLY 0x04000
> #define VT0 0x00000
> #define VT1 0x04000
> #define FFDLY 0x08000
> #define FF0 0x00000
> #define FF1 0x08000
>
> /* c_lflag bits */
> #define ISIG 0x00001
> #define ICANON 0x00002
> #define XCASE 0x00004
> #define ECHO 0x00008
> #define ECHOE 0x00010
> #define ECHOK 0x00020
> #define ECHONL 0x00040
> #define NOFLSH 0x00080
> #define TOSTOP 0x00100
> #define ECHOCTL 0x00200
> #define ECHOPRT 0x00400
> #define ECHOKE 0x00800
> #define FLUSHO 0x01000
> #define PENDIN 0x04000
> #define IEXTEN 0x08000
> #define EXTPROC 0x10000
>
> And glibc also (re)defines some of them, so those should also have the
> U suffix.
>
> Any opinions?
Have a proposed patch that you feel would resolve this?
thanks,
greg k-h
next prev parent reply other threads:[~2024-06-12 12:22 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-12 12:16 termios constants should be unsigned Alejandro Colomar
2024-06-12 12:22 ` Greg KH [this message]
2024-06-12 13:16 ` [PATCH] uapi/asm/termbits: Use the U integer suffix for bit fields Alejandro Colomar
2024-06-12 13:35 ` Greg KH
2024-06-12 14:00 ` Alejandro Colomar
2024-06-12 14:21 ` Greg KH
2024-06-12 15:07 ` Alejandro Colomar
2024-06-12 14:55 ` termios constants should be unsigned Paul Eggert
2024-06-12 16:28 ` Alejandro Colomar
2024-06-12 17:47 ` enh
2024-06-12 18:55 ` Alejandro Colomar
2024-06-12 19:01 ` Alejandro Colomar
2024-06-12 21:54 ` enh
2024-06-12 22:22 ` Alejandro Colomar
2024-06-12 18:27 ` Paul Eggert
2024-06-13 12:32 ` Zack Weinberg
2024-06-13 21:12 ` Paul Eggert
2024-06-13 21:37 ` Alejandro Colomar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2024061222-scuttle-expanse-6438@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=akpm@linux-foundation.org \
--cc=alx@kernel.org \
--cc=libc-alpha@sourceware.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-man@vger.kernel.org \
--cc=palmer@rivosinc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.