2021-04-22 01:24:21

by Rasmus Villemoes

[permalink] [raw]
Subject: [PATCH] Input: atkbd - simplify atkbd_show_force_release()

We can just include the newline in the format string, and scnprintf()
guarantees nul-termination. These days, sysfs_emit() is
preferred in sysfs ->show methods, so switch to that.

Signed-off-by: Rasmus Villemoes <[email protected]>
---
drivers/input/keyboard/atkbd.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index edc613efc158..b146a3ec631a 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -1492,13 +1492,8 @@ static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t coun

static ssize_t atkbd_show_force_release(struct atkbd *atkbd, char *buf)
{
- size_t len = scnprintf(buf, PAGE_SIZE - 1, "%*pbl",
- ATKBD_KEYMAP_SIZE, atkbd->force_release_mask);
-
- buf[len++] = '\n';
- buf[len] = '\0';
-
- return len;
+ return sysfs_emit(buf, "%*pbl\n",
+ ATKBD_KEYMAP_SIZE, atkbd->force_release_mask);
}

static ssize_t atkbd_set_force_release(struct atkbd *atkbd,
--
2.29.2


2021-04-25 02:28:24

by Dmitry Torokhov

[permalink] [raw]
Subject: Re: [PATCH] Input: atkbd - simplify atkbd_show_force_release()

Hi Rasmus,

On Wed, Apr 21, 2021 at 10:16:39PM +0200, Rasmus Villemoes wrote:
> We can just include the newline in the format string, and scnprintf()
> guarantees nul-termination. These days, sysfs_emit() is
> preferred in sysfs ->show methods, so switch to that.

Technically speaking the conversion is not 100% equivalent - original
code ensured that there is always a newline in the output. I kind of
like this, so maybe we need sysfs_emit_nl() or similar?

>
> Signed-off-by: Rasmus Villemoes <[email protected]>
> ---
> drivers/input/keyboard/atkbd.c | 9 ++-------
> 1 file changed, 2 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
> index edc613efc158..b146a3ec631a 100644
> --- a/drivers/input/keyboard/atkbd.c
> +++ b/drivers/input/keyboard/atkbd.c
> @@ -1492,13 +1492,8 @@ static ssize_t atkbd_set_extra(struct atkbd *atkbd, const char *buf, size_t coun
>
> static ssize_t atkbd_show_force_release(struct atkbd *atkbd, char *buf)
> {
> - size_t len = scnprintf(buf, PAGE_SIZE - 1, "%*pbl",
> - ATKBD_KEYMAP_SIZE, atkbd->force_release_mask);
> -
> - buf[len++] = '\n';
> - buf[len] = '\0';
> -
> - return len;
> + return sysfs_emit(buf, "%*pbl\n",
> + ATKBD_KEYMAP_SIZE, atkbd->force_release_mask);
> }
>
> static ssize_t atkbd_set_force_release(struct atkbd *atkbd,
> --
> 2.29.2
>

Thanks.

--
Dmitry

2021-04-26 07:08:31

by Rasmus Villemoes

[permalink] [raw]
Subject: Re: [PATCH] Input: atkbd - simplify atkbd_show_force_release()

On 25/04/2021 04.27, Dmitry Torokhov wrote:
> Hi Rasmus,
>
> On Wed, Apr 21, 2021 at 10:16:39PM +0200, Rasmus Villemoes wrote:
>> We can just include the newline in the format string, and scnprintf()
>> guarantees nul-termination. These days, sysfs_emit() is
>> preferred in sysfs ->show methods, so switch to that.
>
> Technically speaking the conversion is not 100% equivalent - original
> code ensured that there is always a newline in the output. I kind of
> like this, so maybe we need sysfs_emit_nl() or similar?

(1) From a UX perspective, it actually seems better to have lack of
trailing newline as a (though subtle) indicator that the output was
truncated

(2) Given that ATKBD_KEYMAP_SIZE is 512, I don't see how that could
actually ever happen. AFAICT, the worst case %pbl representation is when
the bitmap consists of a series two set bits and one unset bit, yielding
a pattern of "xxx-yyy," (with yyy=xxx+1) for 8 characters per 3 bits, or
about 1365 characters (slight overestimate because of one- and two-digit
numbers).