Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 03 Jan 2026 09:10:39 +0000
From:      Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav <des@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: f86148d2777d - main - linuxkpi: Correct kstrtobool
Message-ID:  <6958dd0f.98dc.3f85f227@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=f86148d2777d4d7985ed8f4ae957c41c44bd2484

commit f86148d2777d4d7985ed8f4ae957c41c44bd2484
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2026-01-03 09:09:41 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2026-01-03 09:10:22 +0000

    linuxkpi: Correct kstrtobool
    
    Implement the exact same logic as in Linux:
    
    * Accept 'e', 't', 'y', '1', "on" for true.
    
    * Accept 'd', 'f', 'n', '0', "of" for false.
    
    * Disregard any characters beyond that.
    
    * Check that the string is not null, but don't check the result pointer.
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Sponsored by:   NetApp, Inc.
    Reviewed by:    bz, emaste
    Differential Revision:  https://reviews.freebsd.org/D54451
---
 sys/compat/linuxkpi/common/include/linux/kstrtox.h | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/sys/compat/linuxkpi/common/include/linux/kstrtox.h b/sys/compat/linuxkpi/common/include/linux/kstrtox.h
index 6a145c409038..05bf94dd375d 100644
--- a/sys/compat/linuxkpi/common/include/linux/kstrtox.h
+++ b/sys/compat/linuxkpi/common/include/linux/kstrtox.h
@@ -249,22 +249,16 @@ kstrtoull(const char *cp, unsigned int base, unsigned long long *res)
 static inline int
 kstrtobool(const char *s, bool *res)
 {
-	size_t len;
-
-	if (s == NULL || (len = strlen(s)) == 0 || res == NULL)
+	if (s == NULL || *s == '\0')
 		return (-EINVAL);
 
-	/* skip newline character, if any */
-	if (s[len - 1] == '\n')
-		len--;
-
-	if (len == 1 && strchr("yY1", s[0]) != NULL)
+	if (strchr("eEtTyY1", s[0]) != NULL)
 		*res = true;
-	else if (len == 1 && strchr("nN0", s[0]) != NULL)
+	else if (strchr("dDfFnN0", s[0]) != NULL)
 		*res = false;
-	else if (strncasecmp("on", s, len) == 0)
+	else if (strncasecmp("on", s, 2) == 0)
 		*res = true;
-	else if (strncasecmp("off", s, len) == 0)
+	else if (strncasecmp("of", s, 2) == 0)
 		*res = false;
 	else
 		return (-EINVAL);


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6958dd0f.98dc.3f85f227>